diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CacheDetailActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 231 |
1 files changed, 130 insertions, 101 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index ac9b156..45a1dd2 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -121,8 +121,7 @@ import java.util.regex.Pattern; * * e.g. details, description, logs, waypoints, inventory... */ -public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> - implements EditNoteDialogListener { +public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailActivity.Page> { private static final int MENU_FIELD_COPY = 1; private static final int MENU_FIELD_TRANSLATE = 2; @@ -142,6 +141,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private static final int CONTEXT_MENU_WAYPOINT_DEFAULT_NAVIGATION = 1240; private static final int CONTEXT_MENU_WAYPOINT_RESET_ORIGINAL_CACHE_COORDINATES = 1241; + private static final int MESSAGE_FAILED = -1; + private static final int MESSAGE_SUCCEEDED = 1; + private static final Pattern[] DARK_COLOR_PATTERNS = { Pattern.compile("((?<!bg)color)=\"#" + "(0[0-9]){3}" + "\"", Pattern.CASE_INSENSITIVE), Pattern.compile("((?<!bg)color)=\"" + "black" + "\"", Pattern.CASE_INSENSITIVE), @@ -156,8 +158,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private SearchResult search; - private EditNoteDialogListener editNoteDialogListener; - private final GeoDirHandler locationUpdater = new GeoDirHandler() { @Override public void updateGeoData(final IGeoData geo) { @@ -1061,7 +1061,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private LinearLayout detailsList; // TODO Do we need this thread-references? - private StoreCacheThread storeThread; private RefreshCacheThread refreshThread; private Thread watchlistThread; @@ -1208,26 +1207,14 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc new RunnableWithArgument<Integer>() { @Override public void run(final Integer selectedListId) { - storeCache(selectedListId); + storeCache(selectedListId, new StoreCacheHandler(CacheDetailActivity.this, progress)); } }, true, StoredList.TEMPORARY_LIST_ID); } else { - storeCache(StoredList.TEMPORARY_LIST_ID); + storeCache(StoredList.TEMPORARY_LIST_ID, new StoreCacheHandler(CacheDetailActivity.this, progress)); } } - protected void storeCache(int listId) { - final StoreCacheHandler storeCacheHandler = new StoreCacheHandler(CacheDetailActivity.this, progress); - - progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage()); - - if (storeThread != null) { - storeThread.interrupt(); - } - - storeThread = new StoreCacheThread(listId, storeCacheHandler); - storeThread.start(); - } } private class RefreshCacheClickListener implements View.OnClickListener { @@ -1256,22 +1243,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - private class StoreCacheThread extends Thread { - final private int listId; - final private CancellableHandler handler; - - public StoreCacheThread(final int listId, final CancellableHandler handler) { - this.listId = listId; - this.handler = handler; - } - - @Override - public void run() { - cache.store(listId, handler); - storeThread = null; - } - } - private class RefreshCacheThread extends Thread { final private CancellableHandler handler; @@ -1342,7 +1313,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_watchlist_add_title, R.string.cache_dialog_watchlist_add_message, - new WatchlistAddThread(new WatchlistHandler(CacheDetailActivity.this, progress))); + new WatchlistAddThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress))); } } @@ -1354,7 +1325,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_watchlist_remove_title, R.string.cache_dialog_watchlist_remove_message, - new WatchlistRemoveThread(new WatchlistHandler(CacheDetailActivity.this, progress))); + new WatchlistRemoveThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress))); } } @@ -1369,7 +1340,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { watchlistThread = null; - handler.sendEmptyMessage(ConnectorFactory.getConnector(cache).addToWatchlist(cache) ? 1 : -1); + Message msg; + if (ConnectorFactory.getConnector(cache).addToWatchlist(cache)) { + msg = Message.obtain(handler, MESSAGE_SUCCEEDED); + } else { + msg = Message.obtain(handler, MESSAGE_FAILED); + Bundle bundle = new Bundle(); + bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_watchlist_failed)); + msg.setData(bundle); + } + handler.sendMessage(msg); } } @@ -1384,7 +1364,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { watchlistThread = null; - handler.sendEmptyMessage(ConnectorFactory.getConnector(cache).removeFromWatchlist(cache) ? 1 : -1); + Message msg; + if (ConnectorFactory.getConnector(cache).removeFromWatchlist(cache)) { + msg = Message.obtain(handler, MESSAGE_SUCCEEDED); + } else { + msg = Message.obtain(handler, MESSAGE_FAILED); + Bundle bundle = new Bundle(); + bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_watchlist_failed)); + msg.setData(bundle); + } + handler.sendMessage(msg); } } @@ -1399,7 +1388,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { watchlistThread = null; - handler.sendEmptyMessage(GCConnector.addToFavorites(cache) ? 1 : -1); + Message msg; + if (GCConnector.addToFavorites(cache)) { + msg = Message.obtain(handler, MESSAGE_SUCCEEDED); + } else { + msg = Message.obtain(handler, MESSAGE_FAILED); + Bundle bundle = new Bundle(); + bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_favorite_failed)); + msg.setData(bundle); + } + handler.sendMessage(msg); } } @@ -1414,7 +1412,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { watchlistThread = null; - handler.sendEmptyMessage(GCConnector.removeFromFavorites(cache) ? 1 : -1); + Message msg; + if (GCConnector.removeFromFavorites(cache)) { + msg = Message.obtain(handler, MESSAGE_SUCCEEDED); + } else { + msg = Message.obtain(handler, MESSAGE_FAILED); + Bundle bundle = new Bundle(); + bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.err_favorite_failed)); + msg.setData(bundle); + } + handler.sendMessage(msg); } } @@ -1426,7 +1433,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_favorite_add_title, R.string.cache_dialog_favorite_add_message, - new FavoriteAddThread(new FavoriteUpdateHandler(CacheDetailActivity.this, progress))); + new FavoriteAddThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress))); } } @@ -1438,7 +1445,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_favorite_remove_title, R.string.cache_dialog_favorite_remove_message, - new FavoriteRemoveThread(new FavoriteUpdateHandler(CacheDetailActivity.this, progress))); + new FavoriteRemoveThread(new SimpleUpdateHandler(CacheDetailActivity.this, progress))); } } @@ -1649,7 +1656,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } // cache personal note - setPersonalNote(); + setPersonalNote(personalNoteView, cache.getPersonalNote()); personalNoteView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); registerForContextMenu(personalNoteView); final Button personalNoteEdit = (Button) view.findViewById(R.id.edit_personalnote); @@ -1657,7 +1664,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void onClick(View v) { if (cache.isOffline()) { - editPersonalNote(); + editPersonalNote(cache, CacheDetailActivity.this); } else { warnPersonalNoteNeedsStoring(); } @@ -1727,24 +1734,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return view; } - private void editPersonalNote() { - if (cache.isOffline()) { - editNoteDialogListener = new EditNoteDialogListener() { - @Override - public void onFinishEditNoteDialog(final String note) { - cache.setPersonalNote(note); - cache.parseWaypointsFromNote(); - setPersonalNote(); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); - CacheDetailActivity.this.notifyDataSetChanged(); - } - }; - final FragmentManager fm = getSupportFragmentManager(); - final EditNoteDialog dialog = EditNoteDialog.newInstance(cache.getPersonalNote()); - dialog.show(fm, "fragment_edit_note"); - } - } - Thread currentThread; private void uploadPersonalNote() { @@ -1760,16 +1749,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc currentThread.start(); } - private void setPersonalNote() { - final String personalNote = cache.getPersonalNote(); - personalNoteView.setText(personalNote, TextView.BufferType.SPANNABLE); - if (StringUtils.isNotBlank(personalNote)) { - personalNoteView.setVisibility(View.VISIBLE); - } else { - personalNoteView.setVisibility(View.GONE); - } - } - private void loadLongDescription() { final Button showDesc = (Button) view.findViewById(R.id.show_description); showDesc.setVisibility(View.GONE); @@ -1796,8 +1775,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - cache.store(null); - editPersonalNote(); + storeCache(StoredList.STANDARD_LIST_ID, new StoreCachePersonalNoteHandler(CacheDetailActivity.this, progress)); } }); @@ -1808,11 +1786,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } - @Override - public void onFinishEditNoteDialog(final String note) { - editNoteDialogListener.onFinishEditNoteDialog(note); - } - /** * Loads the description in background. <br /> * <br /> @@ -2271,7 +2244,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } Message msg = Message.obtain(); Bundle bundle = new Bundle(); - bundle.putString(SimpleCancellableHandler.SUCCESS_TEXT, res.getString(R.string.cache_personal_note_upload_done)); + bundle.putString(SimpleCancellableHandler.MESSAGE_TEXT, res.getString(R.string.cache_personal_note_upload_done)); msg.setData(bundle); handler.sendMessage(msg); } @@ -2389,7 +2362,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return search; } - private static final class StoreCacheHandler extends SimpleCancellableHandler { + private static class StoreCacheHandler extends SimpleCancellableHandler { public StoreCacheHandler(CacheDetailActivity activity, Progress progress) { super(activity, progress); @@ -2433,47 +2406,103 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - private static final class FavoriteUpdateHandler extends SimpleHandler { + private static final class SimpleUpdateHandler extends SimpleHandler { - public FavoriteUpdateHandler(CacheDetailActivity activity, Progress progress) { + public SimpleUpdateHandler(CacheDetailActivity activity, Progress progress) { super(activity, progress); } @Override public void handleMessage(Message msg) { - if (msg.what == -1) { - dismissProgress(); - showToast(R.string.err_favorite_failed); + if (msg.what == MESSAGE_FAILED) { + super.handleMessage(msg); } else { notifyDatasetChanged(activityRef); } } } - /** - * Handler, called when watchlist add or remove is done - */ - private static final class WatchlistHandler extends SimpleHandler { + private static void notifyDatasetChanged(WeakReference<AbstractActivity> activityRef) { + CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); + if (activity != null) { + activity.notifyDataSetChanged(); + } + } + + private StoreCacheThread storeThread; + + private class StoreCacheThread extends Thread { + final private int listId; + final private CancellableHandler handler; - public WatchlistHandler(CacheDetailActivity activity, Progress progress) { + public StoreCacheThread(final int listId, final CancellableHandler handler) { + this.listId = listId; + this.handler = handler; + } + + @Override + public void run() { + cache.store(listId, handler); + storeThread = null; + } + } + + protected void storeCache(final int listId, final StoreCacheHandler storeCacheHandler) { + progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage()); + + if (storeThread != null) { + storeThread.interrupt(); + } + + storeThread = new StoreCacheThread(listId, storeCacheHandler); + storeThread.start(); + } + + private static final class StoreCachePersonalNoteHandler extends StoreCacheHandler { + + public StoreCachePersonalNoteHandler(CacheDetailActivity activity, Progress progress) { super(activity, progress); } @Override - public void handleMessage(Message msg) { - if (msg.what == -1) { - dismissProgress(); - showToast(R.string.err_watchlist_failed); + 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 { - notifyDatasetChanged(activityRef); + dismissProgress(); + CacheDetailActivity activity = (CacheDetailActivity) activityRef.get(); + if (activity != null) { + editPersonalNote(activity.getCache(), activity); + } } } } - private static void notifyDatasetChanged(WeakReference<AbstractActivity> activityRef) { - CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); - if (activity != null) { - activity.notifyDataSetChanged(); + public static void editPersonalNote(final Geocache cache, final CacheDetailActivity activity) { + if (cache.isOffline()) { + EditNoteDialogListener editNoteDialogListener = new EditNoteDialogListener() { + @Override + public void onFinishEditNoteDialog(final String note) { + cache.setPersonalNote(note); + cache.parseWaypointsFromNote(); + TextView personalNoteView = (TextView) activity.findViewById(R.id.personalnote); + setPersonalNote(personalNoteView, note); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + activity.notifyDataSetChanged(); + } + }; + final FragmentManager fm = activity.getSupportFragmentManager(); + final EditNoteDialog dialog = EditNoteDialog.newInstance(cache.getPersonalNote(), editNoteDialogListener); + dialog.show(fm, "fragment_edit_note"); + } + } + + private static void setPersonalNote(final TextView personalNoteView, final String personalNote) { + personalNoteView.setText(personalNote, TextView.BufferType.SPANNABLE); + if (StringUtils.isNotBlank(personalNote)) { + personalNoteView.setVisibility(View.VISIBLE); + } else { + personalNoteView.setVisibility(View.GONE); } } } |
