aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/CacheDetailActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/CacheDetailActivity.java')
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java572
1 files changed, 310 insertions, 262 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index a66d181..3c9bb0b 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -46,6 +46,7 @@ import cgeo.geocaching.utils.CryptUtils;
import cgeo.geocaching.utils.ImageUtils;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.MatcherWrapper;
+import cgeo.geocaching.utils.RxUtils;
import cgeo.geocaching.utils.SimpleCancellableHandler;
import cgeo.geocaching.utils.SimpleHandler;
import cgeo.geocaching.utils.TextUtils;
@@ -60,9 +61,9 @@ import org.apache.commons.lang3.tuple.Pair;
import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Observer;
-import rx.Scheduler.Inner;
import rx.Subscriber;
import rx.android.observables.AndroidObservable;
+import rx.functions.Action0;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
@@ -84,6 +85,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentManager;
+import android.support.v7.view.ActionMode;
import android.text.Editable;
import android.text.Html;
import android.text.Spannable;
@@ -165,7 +167,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private Waypoint selectedWaypoint;
@Override
- public void onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState, R.layout.cachedetail_activity);
createSubscriptions = new CompositeSubscription();
@@ -272,22 +274,13 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
// nothing, we lost the window
}
- final ImageView defaultNavigationImageView = (ImageView) findViewById(R.id.defaultNavigation);
- defaultNavigationImageView.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- startDefaultNavigation2();
- return true;
- }
- });
-
final int pageToOpen = savedInstanceState != null ?
savedInstanceState.getInt(STATE_PAGE_INDEX, 0) :
Settings.isOpenLastDetailsPage() ? Settings.getLastDetailsPage() : 1;
createViewPager(pageToOpen, new OnPageSelectedListener() {
@Override
- public void onPageSelected(int position) {
+ public void onPageSelected(final int position) {
if (Settings.isOpenLastDetailsPage()) {
Settings.setLastDetailsPage(position);
}
@@ -300,9 +293,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
final String realGeocode = geocode;
final String realGuid = guid;
- Schedulers.io().schedule(new Action1<Inner>() {
+ Schedulers.io().createWorker().schedule(new Action0() {
@Override
- public void call(final Inner inner) {
+ public void call() {
search = Geocache.searchByGeocode(realGeocode, StringUtils.isBlank(realGeocode) ? realGuid : null, 0, false, loadCacheHandler);
loadCacheHandler.sendMessage(Message.obtain());
}
@@ -342,53 +335,10 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
@Override
- public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) {
+ public void onCreateContextMenu(final ContextMenu menu, final View view, final ContextMenu.ContextMenuInfo info) {
super.onCreateContextMenu(menu, view, info);
final int viewId = view.getId();
switch (viewId) {
- case R.id.value: // coordinates, gc-code, name
- assert view instanceof TextView;
- clickedItemText = ((TextView) view).getText();
- final CharSequence itemTitle = ((TextView) ((View) view.getParent()).findViewById(R.id.name)).getText();
- buildDetailsContextMenu(menu, clickedItemText, itemTitle, true);
- break;
- case R.id.shortdesc:
- assert view instanceof TextView;
- clickedItemText = ((TextView) view).getText();
- buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_description), false);
- break;
- 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();
- } else {
- clickedItemText = shortDesc + "\n\n" + ((TextView) view).getText();
- }
- buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_description), false);
- break;
- case R.id.personalnote:
- assert view instanceof TextView;
- clickedItemText = ((TextView) view).getText();
- buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_personal_note), true);
- break;
- case R.id.hint:
- assert view instanceof TextView;
- clickedItemText = ((TextView) view).getText();
- buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_hint), false);
- break;
- case R.id.log:
- assert view instanceof TextView;
- clickedItemText = ((TextView) view).getText();
- buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_logs), false);
- break;
- case R.id.date: // event date
- assert view instanceof TextView;
- clickedItemText = ((TextView) view).getText();
- buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_event), true);
- menu.findItem(R.id.menu_calendar).setVisible(cache.canBeAddedToCalendar());
- break;
case R.id.waypoint:
menu.setHeaderTitle(selectedWaypoint.getName() + " (" + res.getString(R.string.waypoint) + ")");
getMenuInflater().inflate(R.menu.waypoint_options, menu);
@@ -414,25 +364,25 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
@Override
- public boolean onContextItemSelected(MenuItem item) {
- if (onClipboardItemSelected(item, clickedItemText)) {
- return true;
- }
+ public boolean onContextItemSelected(final MenuItem item) {
switch (item.getItemId()) {
// waypoints
case R.id.menu_waypoint_edit:
if (selectedWaypoint != null) {
+ ensureSaved();
EditWaypointActivity.startActivityEditWaypoint(this, cache, selectedWaypoint.getId());
refreshOnResume = true;
}
return true;
case R.id.menu_waypoint_duplicate:
+ ensureSaved();
if (cache.duplicateWaypoint(selectedWaypoint)) {
DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
notifyDataSetChanged();
}
return true;
case R.id.menu_waypoint_delete:
+ ensureSaved();
if (cache.deleteWaypoint(selectedWaypoint)) {
DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
notifyDataSetChanged();
@@ -454,10 +404,10 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
return true;
case R.id.menu_waypoint_reset_cache_coords:
+ ensureSaved();
if (ConnectorFactory.getConnector(cache).supportsOwnCoordinates()) {
createResetCacheCoordinatesDialog(cache, selectedWaypoint).show();
- }
- else {
+ } else {
final ProgressDialog progressDialog = ProgressDialog.show(this, getString(R.string.cache), getString(R.string.waypoint_reset), true);
final HandlerResetCoordinates handler = new HandlerResetCoordinates(this, progressDialog, false);
new ResetCoordsThread(cache, handler, selectedWaypoint, true, false, progressDialog).start();
@@ -476,20 +426,23 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
+ public boolean onCreateOptionsMenu(final Menu menu) {
CacheMenuHandler.addMenuItems(this, menu, cache);
return true;
}
@Override
- public boolean onPrepareOptionsMenu(Menu menu) {
+ public boolean onPrepareOptionsMenu(final Menu menu) {
CacheMenuHandler.onPrepareOptionsMenu(menu, cache);
LoggingUI.onPrepareOptionsMenu(menu, cache);
+ menu.findItem(R.id.menu_store).setVisible(cache != null && !cache.isOffline());
+ menu.findItem(R.id.menu_delete).setVisible(cache != null && cache.isOffline());
+ menu.findItem(R.id.menu_refresh).setVisible(cache != null && cache.isOffline());
return super.onPrepareOptionsMenu(menu);
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
if (CacheMenuHandler.onMenuItemSelected(item, this, cache)) {
return true;
}
@@ -497,9 +450,15 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
final int menuItem = item.getItemId();
switch (menuItem) {
- case 0:
- // no menu selected, but a new sub menu shown
- return false;
+ case R.id.menu_delete:
+ dropCache();
+ return true;
+ case R.id.menu_store:
+ storeCache();
+ return true;
+ case R.id.menu_refresh:
+ refreshCache();
+ return true;
default:
if (NavigationAppFactory.onMenuItemSelected(item, this, cache)) {
return true;
@@ -510,7 +469,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
}
- return true;
+ return super.onOptionsItemSelected(item);
}
private static final class CacheDetailsGeoDirHandler extends GeoDirHandler {
@@ -539,7 +498,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private final static class LoadCacheHandler extends SimpleCancellableHandler {
- public LoadCacheHandler(CacheDetailActivity activity, Progress progress) {
+ public LoadCacheHandler(final CacheDetailActivity activity, final Progress progress) {
super(activity, progress);
}
@@ -574,7 +533,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
private void updateStatusMsg(final String msg) {
- CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get());
+ final CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get());
if (activity == null) {
return;
}
@@ -591,6 +550,10 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
private void notifyDataSetChanged() {
+ // This might get called asynchronically when the activity is shut down
+ if (isFinishing())
+ return;
+
if (search == null) {
return;
}
@@ -613,7 +576,18 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
} else {
setTitle(cache.getGeocode());
}
- ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(cache.getType().markerId), null, null, null);
+
+ getSupportActionBar().setIcon(getResources().getDrawable(cache.getType().markerId));
+
+ // if we have a newer Android device setup Android Beam for easy cache sharing
+ initializeAndroidBeam(
+ new ActivitySharingInterface() {
+ @Override
+ public String getUri() {
+ return cache.getCgeoUrl();
+ }
+ }
+ );
// reset imagesList so Images view page will be redrawn
imagesList = null;
@@ -622,8 +596,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
// rendering done! remove progress popup if any there
invalidateOptionsMenuCompatible();
progress.dismiss();
+
+ Settings.addCacheToHistory(cache.getGeocode());
}
+
/**
* Tries to navigate to the {@link Geocache} of this activity.
*/
@@ -632,23 +609,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
/**
- * Tries to navigate to the {@link Geocache} of this activity.
- */
- private void startDefaultNavigation2() {
- NavigationAppFactory.startDefaultNavigationApplication(2, this, cache);
- }
-
- /**
* Wrapper for the referenced method in the xml-layout.
*/
- public void goDefaultNavigation(@SuppressWarnings("unused") View view) {
+ public void goDefaultNavigation(@SuppressWarnings("unused") final View view) {
startDefaultNavigation();
}
/**
* referenced from XML view
*/
- public void showNavigationMenu(@SuppressWarnings("unused") View view) {
+ public void showNavigationMenu(@SuppressWarnings("unused") final View view) {
NavigationAppFactory.showNavigationMenu(this, cache, null, null, true, true);
}
@@ -681,7 +651,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
DETAILS(R.string.detail),
DESCRIPTION(R.string.cache_description),
LOGS(R.string.cache_logs),
- LOGSFRIENDS(R.string.cache_logsfriends),
+ LOGSFRIENDS(R.string.cache_logs_friends_and_own),
WAYPOINTS(R.string.cache_waypoints),
INVENTORY(R.string.cache_inventory),
IMAGES(R.string.cache_images);
@@ -723,7 +693,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
attributeBox.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
// toggle between attribute icons and descriptions
toggleAttributeDisplay(attributeBox, attributeBoxMaxWidth);
}
@@ -748,7 +718,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
* lazy-creates the layout holding the icons of the caches attributes
* and makes it visible
*/
- private void showAttributeIcons(LinearLayout attribBox, int parentWidth) {
+ private void showAttributeIcons(final LinearLayout attribBox, final int parentWidth) {
if (attributeIconsLayout == null) {
attributeIconsLayout = createAttributeIconsLayout(parentWidth);
// no matching icons found? show text
@@ -766,7 +736,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
* lazy-creates the layout holding the descriptions of the caches attributes
* and makes it visible
*/
- private void showAttributeDescriptions(LinearLayout attribBox) {
+ private void showAttributeDescriptions(final LinearLayout attribBox) {
if (attributeDescriptionsLayout == null) {
attributeDescriptionsLayout = createAttributeDescriptionsLayout();
}
@@ -778,7 +748,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
/**
* toggle attribute descriptions and icons
*/
- private void toggleAttributeDisplay(LinearLayout attribBox, int parentWidth) {
+ private void toggleAttributeDisplay(final LinearLayout attribBox, final int parentWidth) {
// Don't toggle when there are no icons to show.
if (noAttributeIconsFound) {
return;
@@ -792,7 +762,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
}
- private ViewGroup createAttributeIconsLayout(int parentWidth) {
+ private ViewGroup createAttributeIconsLayout(final int parentWidth) {
final LinearLayout rows = new LinearLayout(CacheDetailActivity.this);
rows.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
rows.setOrientation(LinearLayout.VERTICAL);
@@ -857,7 +827,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
for (String attributeName : cache.getAttributes()) {
final boolean enabled = CacheAttribute.isEnabled(attributeName);
// search for a translation of the attribute
- CacheAttribute attrib = CacheAttribute.getByRawName(CacheAttribute.trimAttributeName(attributeName));
+ final CacheAttribute attrib = CacheAttribute.getByRawName(CacheAttribute.trimAttributeName(attributeName));
if (attrib != null) {
attributeName = attrib.getL10n(enabled);
}
@@ -873,6 +843,54 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
}
+ private void refreshCache() {
+ if (progress.isShowing()) {
+ showToast(res.getString(R.string.err_detail_still_working));
+ return;
+ }
+
+ if (!Network.isNetworkConnected(getApplicationContext())) {
+ showToast(getString(R.string.err_server));
+ return;
+ }
+
+ final RefreshCacheHandler refreshCacheHandler = new RefreshCacheHandler(CacheDetailActivity.this, progress);
+
+ progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage());
+
+ cache.refresh(refreshCacheHandler, Schedulers.io());
+ }
+
+ private void dropCache() {
+ if (progress.isShowing()) {
+ showToast(res.getString(R.string.err_detail_still_working));
+ return;
+ }
+
+ progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_offline_drop_title), res.getString(R.string.cache_dialog_offline_drop_message), true, null);
+ cache.drop(new ChangeNotificationHandler(CacheDetailActivity.this, progress), Schedulers.io());
+ }
+
+ private void storeCache() {
+ if (progress.isShowing()) {
+ showToast(res.getString(R.string.err_detail_still_working));
+ return;
+ }
+
+ if (Settings.getChooseList()) {
+ // let user select list to store cache in
+ new StoredList.UserInterface(CacheDetailActivity.this).promptForListSelection(R.string.list_title,
+ new Action1<Integer>() {
+ @Override
+ public void call(final Integer selectedListId) {
+ storeCache(selectedListId, new StoreCacheHandler(CacheDetailActivity.this, progress));
+ }
+ }, true, StoredList.TEMPORARY_LIST_ID);
+ } else {
+ storeCache(StoredList.TEMPORARY_LIST_ID, new StoreCacheHandler(CacheDetailActivity.this, progress));
+ }
+ }
+
/**
* Creator for details-view.
*/
@@ -894,17 +912,18 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
view = (ScrollView) getLayoutInflater().inflate(R.layout.cachedetail_details_page, null);
// Start loading preview map
- AndroidObservable.bindActivity(CacheDetailActivity.this, previewMap).subscribe(new Action1<BitmapDrawable>() {
- @Override
- public void call(final BitmapDrawable image) {
- final Bitmap bitmap = image.getBitmap();
- if (bitmap != null && bitmap.getWidth() > 10) {
- final ImageView imageView = (ImageView) view.findViewById(R.id.map_preview);
- imageView.setImageDrawable(image);
- view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE);
- }
- }
- }, Schedulers.io());
+ AndroidObservable.bindActivity(CacheDetailActivity.this, previewMap).subscribeOn(Schedulers.io())
+ .subscribe(new Action1<BitmapDrawable>() {
+ @Override
+ public void call(final BitmapDrawable image) {
+ final Bitmap bitmap = image.getBitmap();
+ if (bitmap != null && bitmap.getWidth() > 10) {
+ final ImageView imageView = (ImageView) view.findViewById(R.id.map_preview);
+ imageView.setImageDrawable(image);
+ view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE);
+ }
+ }
+ });
detailsList = (LinearLayout) view.findViewById(R.id.details_list);
final CacheDetailsCreator details = new CacheDetailsCreator(CacheDetailActivity.this, detailsList);
@@ -918,10 +937,10 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
span.setSpan(new ForegroundColorSpan(res.getColor(R.color.archived_cache_color)), 0, span.toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
- registerForContextMenu(details.add(R.string.cache_name, span));
+ addContextMenu(details.add(R.string.cache_name, span));
details.add(R.string.cache_type, cache.getType().getL10n());
details.addSize(cache);
- registerForContextMenu(details.add(R.string.cache_geocode, cache.getGeocode()));
+ addContextMenu(details.add(R.string.cache_geocode, cache.getGeocode()));
details.addCacheState(cache);
details.addDistance(cache, cacheDistanceView);
@@ -955,7 +974,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
// hidden or event date
final TextView hiddenView = details.addHiddenDate(cache);
if (hiddenView != null) {
- registerForContextMenu(hiddenView);
+ addContextMenu(hiddenView);
}
// cache location
@@ -967,7 +986,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
if (cache.getCoords() != null) {
final TextView valueView = details.add(R.string.cache_coordinates, cache.getCoords().toString());
valueView.setOnClickListener(new CoordinatesFormatSwitcher(cache.getCoords()));
- registerForContextMenu(valueView);
+ addContextMenu(valueView);
}
// cache attributes
@@ -1015,59 +1034,23 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private class StoreCacheClickListener implements View.OnClickListener {
@Override
- public void onClick(View arg0) {
- if (progress.isShowing()) {
- showToast(res.getString(R.string.err_detail_still_working));
- return;
- }
-
- if (Settings.getChooseList()) {
- // let user select list to store cache in
- new StoredList.UserInterface(CacheDetailActivity.this).promptForListSelection(R.string.list_title,
- new Action1<Integer>() {
- @Override
- public void call(final Integer selectedListId) {
- storeCache(selectedListId, new StoreCacheHandler(CacheDetailActivity.this, progress));
- }
- }, true, StoredList.TEMPORARY_LIST_ID);
- } else {
- storeCache(StoredList.TEMPORARY_LIST_ID, new StoreCacheHandler(CacheDetailActivity.this, progress));
- }
+ public void onClick(final View arg0) {
+ storeCache();
}
}
private class RefreshCacheClickListener implements View.OnClickListener {
@Override
- public void onClick(View arg0) {
- if (progress.isShowing()) {
- showToast(res.getString(R.string.err_detail_still_working));
- return;
- }
-
- if (!Network.isNetworkConnected(getApplicationContext())) {
- showToast(getString(R.string.err_server));
- return;
- }
-
- final RefreshCacheHandler refreshCacheHandler = new RefreshCacheHandler(CacheDetailActivity.this, progress);
-
- progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage());
-
- cache.refresh(cache.getListId(), refreshCacheHandler, Schedulers.io());
+ public void onClick(final View arg0) {
+ refreshCache();
}
}
private class DropCacheClickListener implements View.OnClickListener {
@Override
- public void onClick(View arg0) {
- if (progress.isShowing()) {
- showToast(res.getString(R.string.err_detail_still_working));
- return;
- }
-
- progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_offline_drop_title), res.getString(R.string.cache_dialog_offline_drop_message), true, null);
- cache.drop(new ChangeNotificationHandler(CacheDetailActivity.this, progress), Schedulers.io());
+ public void onClick(final View arg0) {
+ dropCache();
}
}
@@ -1075,7 +1058,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
* Abstract Listener for add / remove buttons for watchlist
*/
private abstract class AbstractWatchlistClickListener implements View.OnClickListener {
- public void doExecute(int titleId, int messageId, Thread thread) {
+ public void doExecute(final int titleId, final int messageId, final Thread thread) {
if (progress.isShowing()) {
showToast(res.getString(R.string.err_watchlist_still_managing));
return;
@@ -1096,7 +1079,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
*/
private class AddToWatchlistClickListener extends AbstractWatchlistClickListener {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
doExecute(R.string.cache_dialog_watchlist_add_title,
R.string.cache_dialog_watchlist_add_message,
new WatchlistAddThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress)));
@@ -1108,7 +1091,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
*/
private class RemoveFromWatchlistClickListener extends AbstractWatchlistClickListener {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
doExecute(R.string.cache_dialog_watchlist_remove_title,
R.string.cache_dialog_watchlist_remove_message,
new WatchlistRemoveThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress)));
@@ -1119,7 +1102,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private class WatchlistAddThread extends Thread {
private final Handler handler;
- public WatchlistAddThread(Handler handler) {
+ public WatchlistAddThread(final Handler handler) {
this.handler = handler;
}
@@ -1131,7 +1114,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
msg = Message.obtain(handler, MESSAGE_SUCCEEDED);
} else {
msg = Message.obtain(handler, MESSAGE_FAILED);
- Bundle bundle = new Bundle();
+ final Bundle bundle = new Bundle();
bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_watchlist_failed));
msg.setData(bundle);
}
@@ -1143,7 +1126,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private class WatchlistRemoveThread extends Thread {
private final Handler handler;
- public WatchlistRemoveThread(Handler handler) {
+ public WatchlistRemoveThread(final Handler handler) {
this.handler = handler;
}
@@ -1155,7 +1138,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
msg = Message.obtain(handler, MESSAGE_SUCCEEDED);
} else {
msg = Message.obtain(handler, MESSAGE_FAILED);
- Bundle bundle = new Bundle();
+ final Bundle bundle = new Bundle();
bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_watchlist_failed));
msg.setData(bundle);
}
@@ -1167,7 +1150,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private class FavoriteAddThread extends Thread {
private final Handler handler;
- public FavoriteAddThread(Handler handler) {
+ public FavoriteAddThread(final Handler handler) {
this.handler = handler;
}
@@ -1179,7 +1162,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
msg = Message.obtain(handler, MESSAGE_SUCCEEDED);
} else {
msg = Message.obtain(handler, MESSAGE_FAILED);
- Bundle bundle = new Bundle();
+ final Bundle bundle = new Bundle();
bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_favorite_failed));
msg.setData(bundle);
}
@@ -1191,7 +1174,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private class FavoriteRemoveThread extends Thread {
private final Handler handler;
- public FavoriteRemoveThread(Handler handler) {
+ public FavoriteRemoveThread(final Handler handler) {
this.handler = handler;
}
@@ -1203,7 +1186,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
msg = Message.obtain(handler, MESSAGE_SUCCEEDED);
} else {
msg = Message.obtain(handler, MESSAGE_FAILED);
- Bundle bundle = new Bundle();
+ final Bundle bundle = new Bundle();
bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_favorite_failed));
msg.setData(bundle);
}
@@ -1216,7 +1199,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
*/
private class FavoriteAddClickListener extends AbstractWatchlistClickListener {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
doExecute(R.string.cache_dialog_favorite_add_title,
R.string.cache_dialog_favorite_add_message,
new FavoriteAddThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress)));
@@ -1228,7 +1211,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
*/
private class FavoriteRemoveClickListener extends AbstractWatchlistClickListener {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
doExecute(R.string.cache_dialog_favorite_remove_title,
R.string.cache_dialog_favorite_remove_message,
new FavoriteRemoveThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress)));
@@ -1240,7 +1223,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
*/
private class ChangeListClickListener implements View.OnClickListener {
@Override
- public void onClick(View view) {
+ public void onClick(final View view) {
new StoredList.UserInterface(CacheDetailActivity.this).promptForListSelection(R.string.list_title,
new Action1<Integer>() {
@Override
@@ -1257,7 +1240,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
* @param listId
* the ID of the list
*/
- public void switchListById(int listId) {
+ public void switchListById(final int listId) {
if (listId < 0) {
return;
}
@@ -1360,7 +1343,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
}
- private Observable<BitmapDrawable> previewMap = Observable.create(new OnSubscribe<BitmapDrawable>() {
+ private final Observable<BitmapDrawable> previewMap = Observable.create(new OnSubscribe<BitmapDrawable>() {
@Override
public void call(final Subscriber<? super BitmapDrawable> subscriber) {
try {
@@ -1369,7 +1352,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
if (image == null) {
if (Settings.isStoreOfflineMaps() && cache.getCoords() != null) {
- StaticMapsProvider.storeCachePreviewMap(cache);
+ RxUtils.waitForCompletion(StaticMapsProvider.storeCachePreviewMap(cache));
image = StaticMapsProvider.getPreviewMap(cache);
}
}
@@ -1417,7 +1400,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
showDesc.setVisibility(View.VISIBLE);
showDesc.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
loadLongDescription();
}
});
@@ -1427,16 +1410,13 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
// cache personal note
setPersonalNote(personalNoteView, cache.getPersonalNote());
personalNoteView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
- registerForContextMenu(personalNoteView);
+ addContextMenu(personalNoteView);
final Button personalNoteEdit = (Button) view.findViewById(R.id.edit_personalnote);
personalNoteEdit.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
- if (cache.isOffline()) {
- editPersonalNote(cache, CacheDetailActivity.this);
- } else {
- warnPersonalNoteNeedsStoring();
- }
+ public void onClick(final View v) {
+ ensureSaved();
+ editPersonalNote(cache, CacheDetailActivity.this);
}
});
final Button personalNoteUpload = (Button) view.findViewById(R.id.upload_personalnote);
@@ -1444,7 +1424,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
personalNoteUpload.setVisibility(View.VISIBLE);
personalNoteUpload.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
if (StringUtils.length(cache.getPersonalNote()) > GCConstants.PERSONAL_NOTE_MAX_CHARS) {
warnPersonalNoteExceedsLimit();
} else {
@@ -1478,7 +1458,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
hintView.setOnClickListener(new DecryptTextClickListener(hintView));
hintBoxView.setOnClickListener(new DecryptTextClickListener(hintView));
hintBoxView.setClickable(true);
- registerForContextMenu(hintView);
+ addContextMenu(hintView);
} else {
hintView.setVisibility(View.GONE);
hintView.setClickable(false);
@@ -1493,7 +1473,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
spoilerlinkView.setClickable(true);
spoilerlinkView.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
if (cache == null || CollectionUtils.isEmpty(cache.getSpoilers())) {
showToast(res.getString(R.string.err_detail_no_spoiler));
return;
@@ -1516,7 +1496,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private void uploadPersonalNote() {
final SimpleCancellableHandler myHandler = new SimpleCancellableHandler(CacheDetailActivity.this, progress);
- Message cancelMessage = myHandler.cancelMessage(res.getString(R.string.cache_personal_note_upload_cancelled));
+ final Message cancelMessage = myHandler.cancelMessage(res.getString(R.string.cache_personal_note_upload_cancelled));
progress.show(CacheDetailActivity.this, res.getString(R.string.cache_personal_note_uploading), res.getString(R.string.cache_personal_note_uploading), true, cancelMessage);
if (currentThread != null) {
@@ -1533,30 +1513,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
final String longDescription = cache.getDescription();
loadDescription(longDescription, longDescView, loadingView);
-
- // Hide the short description, if it is contained somewhere at the start of the long description.
- if (shortDescView != null) {
- final String shortDescription = cache.getShortDescription();
- if (StringUtils.isNotBlank(shortDescription)) {
- final int index = longDescription.indexOf(shortDescription);
- if (index >= 0 && index < 200) {
- shortDescView.setVisibility(View.GONE);
- }
- }
- }
- }
-
- private void warnPersonalNoteNeedsStoring() {
- Dialogs.confirm(CacheDetailActivity.this, R.string.cache_personal_note_unstored, R.string.cache_personal_note_store,
- new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- storeCache(StoredList.STANDARD_LIST_ID, new StoreCachePersonalNoteHandler(CacheDetailActivity.this, progress));
- }
-
- });
}
private void warnPersonalNoteExceedsLimit() {
@@ -1564,7 +1520,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int which) {
+ public void onClick(final DialogInterface dialog, final int which) {
dialog.dismiss();
uploadPersonalNote();
}
@@ -1621,7 +1577,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
});
- AndroidObservable.bindActivity(this, producer).subscribe(new Observer<Spanned>() {
+ AndroidObservable.bindActivity(this, producer).subscribeOn(Schedulers.io()).subscribe(new Observer<Spanned>() {
@Override
public void onCompleted() {
if (null != loadingIndicatorView) {
@@ -1648,7 +1604,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
descriptionView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
fixTextColor(descriptionString);
descriptionView.setVisibility(View.VISIBLE);
- registerForContextMenu(descriptionView);
+ addContextMenu(descriptionView);
+ potentiallyHideShortDescription();
}
}
@@ -1684,7 +1641,36 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
descriptionView.setBackgroundResource(backcolor);
}
- }, Schedulers.io());
+ });
+ }
+
+ /**
+ * Hide the short description, if it is contained somewhere at the start of the long description.
+ */
+ public void potentiallyHideShortDescription() {
+ final View shortView = ButterKnife.findById(this, R.id.shortdesc);
+ if (shortView == null) {
+ return;
+ }
+ if (shortView.getVisibility() == View.GONE) {
+ return;
+ }
+ final String shortDescription = cache.getShortDescription();
+ if (StringUtils.isNotBlank(shortDescription)) {
+ final int index = StringUtils.indexOf(cache.getDescription(), shortDescription);
+ // allow up to 200 characters of HTML formatting
+ if (index >= 0 && index < 200) {
+ shortView.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ private void ensureSaved() {
+ if (!cache.isOffline()) {
+ showToast(getString(R.string.info_cache_saved));
+ cache.setListId(StoredList.STANDARD_LIST_ID);
+ DataStore.saveCache(cache, LoadFlags.SAVE_ALL);
+ }
}
private class WaypointsViewCreator extends AbstractCachingPageViewCreator<ListView> {
@@ -1703,12 +1689,13 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
view = (ListView) getLayoutInflater().inflate(R.layout.cachedetail_waypoints_page, null);
view.setClickable(true);
- View addWaypointButton = getLayoutInflater().inflate(R.layout.cachedetail_waypoints_footer, null);
+ final View addWaypointButton = getLayoutInflater().inflate(R.layout.cachedetail_waypoints_footer, null);
view.addFooterView(addWaypointButton);
addWaypointButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
+ ensureSaved();
EditWaypointActivity.startActivityAddWaypoint(CacheDetailActivity.this, cache);
refreshOnResume = true;
}
@@ -1716,7 +1703,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
view.setAdapter(new ArrayAdapter<Waypoint>(CacheDetailActivity.this, R.layout.waypoint_item, sortedWaypoints) {
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
+ public View getView(final int position, final View convertView, final ViewGroup parent) {
View rowView = convertView;
if (null == rowView) {
rowView = getLayoutInflater().inflate(R.layout.waypoint_item, null);
@@ -1737,7 +1724,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
return view;
}
- protected void fillViewHolder(View rowView, final WaypointViewHolder holder, final Waypoint wpt) {
+ protected void fillViewHolder(final View rowView, final WaypointViewHolder holder, final Waypoint wpt) {
// coordinates
final TextView coordinatesView = holder.coordinatesView;
if (null != wpt.getCoords()) {
@@ -1800,22 +1787,22 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
final View wpNavView = holder.wpNavView;
wpNavView.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
NavigationAppFactory.startDefaultNavigationApplication(1, CacheDetailActivity.this, wpt);
}
});
wpNavView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
- public boolean onLongClick(View v) {
+ public boolean onLongClick(final View v) {
NavigationAppFactory.startDefaultNavigationApplication(2, CacheDetailActivity.this, wpt);
return true;
}
});
- registerForContextMenu(rowView);
+ addContextMenu(rowView);
rowView.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
selectedWaypoint = wpt;
openContextMenu(v);
}
@@ -1823,8 +1810,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
rowView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
- public boolean onLongClick(View v) {
+ public boolean onLongClick(final View v) {
selectedWaypoint = wpt;
+ ensureSaved();
EditWaypointActivity.startActivityEditWaypoint(CacheDetailActivity.this, cache, wpt.getId());
refreshOnResume = true;
return true;
@@ -1836,7 +1824,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
final WaypointType waypointType = wpt.getWaypointType();
final Drawable icon;
if (wpt.isVisited()) {
- LayerDrawable ld = new LayerDrawable(new Drawable[] {
+ final LayerDrawable ld = new LayerDrawable(new Drawable[] {
res.getDrawable(waypointType.markerId),
res.getDrawable(R.drawable.tick) });
ld.setLayerInset(0, 0, 0, VISITED_INSET, VISITED_INSET);
@@ -1865,7 +1853,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
view.setAdapter(new ArrayAdapter<Trackable>(CacheDetailActivity.this, R.layout.simple_list_item_1, cache.getInventory()));
view.setOnItemClickListener(new OnItemClickListener() {
@Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
+ public void onItemClick(final AdapterView<?> arg0, final View arg1, final int arg2, final long arg3) {
final Object selection = arg0.getItemAtPosition(arg2);
if (selection instanceof Trackable) {
final Trackable trackable = (Trackable) selection;
@@ -1901,6 +1889,86 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
context.startActivity(cachesIntent);
}
+ public void addContextMenu(final View view) {
+ view.setOnLongClickListener(new OnLongClickListener() {
+
+ @Override
+ public boolean onLongClick(final View v) {
+ startSupportActionMode(new ActionMode.Callback() {
+
+ @Override
+ public boolean onPrepareActionMode(final ActionMode actionMode, final Menu menu) {
+ switch (view.getId()) {
+ case R.id.value: // coordinates, gc-code, name
+ assert view instanceof TextView;
+ clickedItemText = ((TextView) view).getText();
+ final CharSequence itemTitle = ((TextView) ((View) view.getParent()).findViewById(R.id.name)).getText();
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, itemTitle, true);
+ return true;
+ case R.id.shortdesc:
+ assert view instanceof TextView;
+ clickedItemText = ((TextView) view).getText();
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, 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();
+ } else {
+ clickedItemText = shortDesc + "\n\n" + ((TextView) view).getText();
+ }
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, res.getString(R.string.cache_description), false);
+ return true;
+ case R.id.personalnote:
+ assert view instanceof TextView;
+ clickedItemText = ((TextView) view).getText();
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, res.getString(R.string.cache_personal_note), true);
+ return true;
+ case R.id.hint:
+ assert view instanceof TextView;
+ clickedItemText = ((TextView) view).getText();
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, res.getString(R.string.cache_hint), false);
+ return true;
+ case R.id.log:
+ assert view instanceof TextView;
+ clickedItemText = ((TextView) view).getText();
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, res.getString(R.string.cache_logs), false);
+ return true;
+ case R.id.date: // event date
+ assert view instanceof TextView;
+ clickedItemText = ((TextView) view).getText();
+ buildDetailsContextMenu(actionMode, menu, clickedItemText, res.getString(R.string.cache_event), true);
+ menu.findItem(R.id.menu_calendar).setVisible(cache.canBeAddedToCalendar());
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onDestroyActionMode(final ActionMode actionMode) {
+ // do nothing
+ }
+
+ @Override
+ public boolean onCreateActionMode(final ActionMode actionMode, final Menu menu) {
+ actionMode.getMenuInflater().inflate(R.menu.details_context, menu);
+
+ // Return true so that the action mode is shown
+ return true;
+ }
+
+ @Override
+ public boolean onActionItemClicked(final ActionMode actionMode, final MenuItem menuItem) {
+ return onClipboardItemSelected(actionMode, menuItem, clickedItemText);
+ }
+ });
+ return false;
+ }
+ });
+ }
+
public static void startActivityGuid(final Context context, final String guid, final String cacheName) {
final Intent cacheIntent = new Intent(context, CacheDetailActivity.class);
cacheIntent.putExtra(Intents.EXTRA_GUID, guid);
@@ -1920,7 +1988,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, final int which) {
+ public void onClick(final DialogInterface dialog, final int which) {
dialog.dismiss();
final ProgressDialog progressDialog = ProgressDialog.show(CacheDetailActivity.this, getString(R.string.cache), getString(R.string.waypoint_reset), true);
final HandlerResetCoordinates handler = new HandlerResetCoordinates(CacheDetailActivity.this, progressDialog, which == 1);
@@ -1936,14 +2004,14 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private final ProgressDialog progressDialog;
private final boolean resetRemote;
- protected HandlerResetCoordinates(CacheDetailActivity activity, ProgressDialog progressDialog, boolean resetRemote) {
+ protected HandlerResetCoordinates(final CacheDetailActivity activity, final ProgressDialog progressDialog, final boolean resetRemote) {
super(activity);
this.progressDialog = progressDialog;
this.resetRemote = resetRemote;
}
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
if (msg.what == ResetCoordsThread.LOCAL) {
localFinished = true;
} else {
@@ -1972,7 +2040,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
public static final int LOCAL = 0;
public static final int ON_WEBSITE = 1;
- public ResetCoordsThread(Geocache cache, Handler handler, final Waypoint wpt, boolean local, boolean remote, final ProgressDialog progress) {
+ public ResetCoordsThread(final Geocache cache, final Handler handler, final Waypoint wpt, final boolean local, final boolean remote, final ProgressDialog progress) {
this.cache = cache;
this.handler = handler;
this.local = local;
@@ -2032,19 +2100,19 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private Geocache cache = null;
private CancellableHandler handler = null;
- public UploadPersonalNoteThread(Geocache cache, CancellableHandler handler) {
+ public UploadPersonalNoteThread(final Geocache cache, final CancellableHandler handler) {
this.cache = cache;
this.handler = handler;
}
@Override
public void run() {
- IConnector con = ConnectorFactory.getConnector(cache);
+ final IConnector con = ConnectorFactory.getConnector(cache);
if (con.supportsPersonalNote()) {
con.uploadPersonalNote(cache);
}
- Message msg = Message.obtain();
- Bundle bundle = new Bundle();
+ final Message msg = Message.obtain();
+ final Bundle bundle = new Bundle();
bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.cache_personal_note_upload_done));
msg.setData(bundle);
handler.sendMessage(msg);
@@ -2052,7 +2120,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
@Override
- protected String getTitle(Page page) {
+ protected String getTitle(final Page page) {
// show number of waypoints directly in waypoint title
if (page == Page.WAYPOINTS) {
final int waypointCount = cache.getWaypoints().size();
@@ -2084,7 +2152,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
@Override
- protected AbstractViewPagerActivity.PageViewCreator createViewCreator(Page page) {
+ protected AbstractViewPagerActivity.PageViewCreator createViewCreator(final Page page) {
switch (page) {
case DETAILS:
return new DetailsViewCreator();
@@ -2112,9 +2180,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
static void updateOfflineBox(final View view, final Geocache cache, final Resources res,
- final OnClickListener refreshCacheClickListener,
- final OnClickListener dropCacheClickListener,
- final OnClickListener storeCacheClickListener) {
+ final OnClickListener refreshCacheClickListener,
+ final OnClickListener dropCacheClickListener,
+ final OnClickListener storeCacheClickListener) {
// offline use
final TextView offlineText = (TextView) view.findViewById(R.id.offline_text);
final Button offlineRefresh = (Button) view.findViewById(R.id.offline_refresh);
@@ -2160,12 +2228,12 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private static class StoreCacheHandler extends SimpleCancellableHandler {
- public StoreCacheHandler(CacheDetailActivity activity, Progress progress) {
+ public StoreCacheHandler(final CacheDetailActivity activity, final Progress progress) {
super(activity, progress);
}
@Override
- public void handleRegularMessage(Message msg) {
+ public void handleRegularMessage(final Message msg) {
if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) {
updateStatusMsg(R.string.cache_dialog_offline_save_message, (String) msg.obj);
} else {
@@ -2176,12 +2244,12 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private static final class RefreshCacheHandler extends SimpleCancellableHandler {
- public RefreshCacheHandler(CacheDetailActivity activity, Progress progress) {
+ public RefreshCacheHandler(final CacheDetailActivity activity, final Progress progress) {
super(activity, progress);
}
@Override
- public void handleRegularMessage(Message msg) {
+ public void handleRegularMessage(final Message msg) {
if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) {
updateStatusMsg(R.string.cache_dialog_refresh_message, (String) msg.obj);
} else {
@@ -2192,24 +2260,24 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private static final class ChangeNotificationHandler extends SimpleHandler {
- public ChangeNotificationHandler(CacheDetailActivity activity, Progress progress) {
+ public ChangeNotificationHandler(final CacheDetailActivity activity, final Progress progress) {
super(activity, progress);
}
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
notifyDatasetChanged(activityRef);
}
}
private static final class SimpleUpdateHandler extends SimpleHandler {
- public SimpleUpdateHandler(CacheDetailActivity activity, Progress progress) {
+ public SimpleUpdateHandler(final CacheDetailActivity activity, final Progress progress) {
super(activity, progress);
}
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
if (msg.what == MESSAGE_FAILED) {
super.handleMessage(msg);
} else {
@@ -2218,8 +2286,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
}
- private static void notifyDatasetChanged(WeakReference<AbstractActivity> activityRef) {
- CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get());
+ private static void notifyDatasetChanged(final WeakReference<AbstractActivity> activityRef) {
+ final CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get());
if (activity != null) {
activity.notifyDataSetChanged();
}
@@ -2227,42 +2295,22 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
protected void storeCache(final int listId, final StoreCacheHandler storeCacheHandler) {
progress.show(this, res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage());
- Schedulers.io().schedule(new Action1<Inner>() {
+ Schedulers.io().createWorker().schedule(new Action0() {
@Override
- public void call(final Inner inner) {
+ public void call() {
cache.store(listId, storeCacheHandler);
}
});
}
- private static final class StoreCachePersonalNoteHandler extends StoreCacheHandler {
-
- public StoreCachePersonalNoteHandler(CacheDetailActivity activity, Progress progress) {
- super(activity, progress);
- }
-
- @Override
- public void handleRegularMessage(Message msg) {
- if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) {
- updateStatusMsg(R.string.cache_dialog_offline_save_message, (String) msg.obj);
- } else {
- dismissProgress();
- CacheDetailActivity activity = (CacheDetailActivity) activityRef.get();
- if (activity != null) {
- editPersonalNote(activity.getCache(), activity);
- }
- }
- }
- }
-
public static void editPersonalNote(final Geocache cache, final CacheDetailActivity activity) {
if (cache.isOffline()) {
- EditNoteDialogListener editNoteDialogListener = new EditNoteDialogListener() {
+ final EditNoteDialogListener editNoteDialogListener = new EditNoteDialogListener() {
@Override
public void onFinishEditNoteDialog(final String note) {
cache.setPersonalNote(note);
cache.parseWaypointsFromNote();
- TextView personalNoteView = (TextView) activity.findViewById(R.id.personalnote);
+ final TextView personalNoteView = (TextView) activity.findViewById(R.id.personalnote);
setPersonalNote(personalNoteView, note);
DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
activity.notifyDataSetChanged();