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.java231
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);
}
}
}