diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CacheDetailActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 80 |
1 files changed, 41 insertions, 39 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 0976b35..a0e7fdb 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -18,7 +18,6 @@ import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.gc.GCConstants; import cgeo.geocaching.enumerations.CacheAttribute; -import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.enumerations.LoadFlags.SaveFlag; import cgeo.geocaching.enumerations.WaypointType; @@ -61,15 +60,16 @@ import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; -import org.eclipse.jdt.annotation.Nullable; import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; +import rx.Subscription; import rx.android.observables.AndroidObservable; import rx.functions.Action0; import rx.functions.Action1; import rx.subscriptions.CompositeSubscription; +import rx.subscriptions.Subscriptions; import android.R.color; import android.app.AlertDialog; @@ -171,6 +171,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc */ private Waypoint selectedWaypoint; + private boolean requireGeodata; + private Subscription geoDataSubscription = Subscriptions.empty(); + @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.cachedetail_activity); @@ -235,7 +238,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc finish(); return; } - } else if (uriHost.contains("opencaching.de")) { + } else if (uriHost.contains("opencaching.de") || uriHost.contains("opencaching.fr")) { if (StringUtils.startsWith(uriPath, "/oc")) { geocode = uriPath.substring(1).toUpperCase(Locale.US); } else { @@ -263,7 +266,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } // If we open this cache from a search, let's properly initialize the title bar, even if we don't have cache details - updateTitleBar(geocode, name, null); + setCacheTitleBar(geocode, name, null); final LoadCacheHandler loadCacheHandler = new LoadCacheHandler(this, progress); @@ -275,7 +278,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc title = geocode; } progress.show(this, title, res.getString(R.string.cache_dialog_loading_details), true, loadCacheHandler.cancelMessage()); - } catch (final RuntimeException e) { + } catch (final RuntimeException ignored) { // nothing, we lost the window } @@ -293,8 +296,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (getPage(position) == Page.IMAGES) { loadCacheImages(); } + requireGeodata = getPage(position) == Page.DETAILS; + startOrStopGeoDataListener(); } }); + requireGeodata = pageToOpen == 1; final String realGeocode = geocode; final String realGuid = guid; @@ -323,9 +329,17 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc outState.putInt(STATE_PAGE_INDEX, getCurrentItem()); } + private void startOrStopGeoDataListener() { + geoDataSubscription.unsubscribe(); + if (requireGeodata) { + geoDataSubscription = locationUpdater.start(GeoDirHandler.UPDATE_GEODATA); + } + } + @Override public void onResume() { - super.onResume(locationUpdater.start(GeoDirHandler.UPDATE_GEODATA)); + super.onResume(); + startOrStopGeoDataListener(); if (refreshOnResume) { notifyDataSetChanged(); @@ -334,6 +348,12 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } @Override + public void onPause() { + geoDataSubscription.unsubscribe(); + super.onPause(); + } + + @Override public void onDestroy() { createSubscriptions.unsubscribe(); super.onDestroy(); @@ -591,7 +611,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // allow cache to notify CacheDetailActivity when it changes so it can be reloaded cache.setChangeNotificationHandler(new ChangeNotificationHandler(this, progress)); - updateTitleBar(cache.getGeocode(), cache.getName(), cache.getType()); + setCacheTitleBar(cache); // reset imagesList so Images view page will be redrawn imagesList = null; @@ -604,19 +624,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc Settings.addCacheToHistory(cache.getGeocode()); } - private void updateTitleBar(@Nullable final String geocode, @Nullable final String name, @Nullable final CacheType type) { - if (StringUtils.isNotBlank(name)) { - setTitle(StringUtils.isNotBlank(geocode) ? name + " (" + geocode + ")" : name); - } else { - setTitle(StringUtils.isNotBlank(geocode) ? geocode : res.getString(R.string.cache)); - } - if (type != null) { - getSupportActionBar().setIcon(getResources().getDrawable(type.markerId)); - } else { - getSupportActionBar().setIcon(android.R.color.transparent); - } - } - /** * Tries to navigate to the {@link Geocache} of this activity using the default navigation tool. */ @@ -910,9 +917,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void call(final Integer selectedListId) { storeCache(selectedListId, new StoreCacheHandler(CacheDetailActivity.this, progress)); } - }, true, StoredList.TEMPORARY_LIST_ID); + }, true, StoredList.TEMPORARY_LIST.id); } else { - storeCache(StoredList.TEMPORARY_LIST_ID, new StoreCacheHandler(this, progress)); + storeCache(StoredList.TEMPORARY_LIST.id, new StoreCacheHandler(this, progress)); } } @@ -1597,7 +1604,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (null != loadingIndicatorView) { loadingIndicatorView.setVisibility(View.GONE); } - } catch (final Exception e) { + } catch (final Exception ignored) { showToast(res.getString(R.string.err_load_descr_failed)); } } @@ -1892,29 +1899,25 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc buildDetailsContextMenu(actionMode, menu, itemTitle, true); return true; case R.id.shortdesc: - assert view instanceof TextView; - clickedItemText = ((TextView) view).getText(); + clickedItemText = cache.getShortDescription(); buildDetailsContextMenu(actionMode, menu, res.getString(R.string.cache_description), false); return true; case R.id.longdesc: - assert view instanceof TextView; // combine short and long description final String shortDesc = cache.getShortDescription(); if (StringUtils.isBlank(shortDesc)) { - clickedItemText = ((TextView) view).getText(); + clickedItemText = cache.getDescription(); } else { - clickedItemText = shortDesc + "\n\n" + ((TextView) view).getText(); + clickedItemText = shortDesc + "\n\n" + cache.getDescription(); } buildDetailsContextMenu(actionMode, menu, res.getString(R.string.cache_description), false); return true; case R.id.personalnote: - assert view instanceof TextView; - clickedItemText = ((TextView) view).getText(); + clickedItemText = cache.getPersonalNote(); buildDetailsContextMenu(actionMode, menu, res.getString(R.string.cache_personal_note), true); return true; case R.id.hint: - assert view instanceof TextView; - clickedItemText = ((TextView) view).getText(); + clickedItemText = cache.getHint(); buildDetailsContextMenu(actionMode, menu, res.getString(R.string.cache_hint), false); return true; case R.id.log: @@ -1923,8 +1926,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc buildDetailsContextMenu(actionMode, menu, res.getString(R.string.cache_logs), false); return true; case R.id.date: // event date - assert view instanceof TextView; - clickedItemText = ((TextView) view).getText(); + clickedItemText = Formatter.formatHiddenDate(cache); buildDetailsContextMenu(actionMode, menu, res.getString(R.string.cache_event), true); menu.findItem(R.id.menu_calendar).setVisible(cache.canBeAddedToCalendar()); return true; @@ -2232,7 +2234,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { updateStatusMsg(R.string.cache_dialog_offline_save_message, (String) msg.obj); } else { - notifyDatasetChanged(activityRef); + notifyDataSetChanged(activityRef); } } } @@ -2248,7 +2250,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { updateStatusMsg(R.string.cache_dialog_refresh_message, (String) msg.obj); } else { - notifyDatasetChanged(activityRef); + notifyDataSetChanged(activityRef); } } } @@ -2261,7 +2263,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void handleMessage(final Message msg) { - notifyDatasetChanged(activityRef); + notifyDataSetChanged(activityRef); } } @@ -2276,12 +2278,12 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (msg.what == MESSAGE_FAILED) { super.handleMessage(msg); } else { - notifyDatasetChanged(activityRef); + notifyDataSetChanged(activityRef); } } } - private static void notifyDatasetChanged(final WeakReference<AbstractActivity> activityRef) { + private static void notifyDataSetChanged(final WeakReference<AbstractActivity> activityRef) { final CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); if (activity != null) { activity.notifyDataSetChanged(); |
