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.java86
1 files changed, 83 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 03c0bcf..33d89b3 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -36,6 +36,7 @@ import cgeo.geocaching.utils.HtmlUtils;
import cgeo.geocaching.utils.ImageHelper;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.MatcherWrapper;
+import cgeo.geocaching.utils.RunnableWithArgument;
import cgeo.geocaching.utils.TranslationUtils;
import cgeo.geocaching.utils.UnknownTagsHandler;
@@ -1240,6 +1241,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
buttonFavPointRemove.setOnClickListener(new FavoriteRemoveClickListener());
updateFavPointBox();
+ // list
+ Button buttonChangeList = (Button) view.findViewById(R.id.change_list);
+ buttonChangeList.setOnClickListener(new ChangeListClickListener());
+ updateListBox();
+
// data license
IConnector connector = ConnectorFactory.getConnector(cache);
if (connector != null) {
@@ -1309,6 +1315,21 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
return;
}
+ if (Settings.getChooseList()) {
+ // let user select list to store cache in
+ new StoredList.UserInterface(CacheDetailActivity.this).promptForListSelection(R.string.list_title,
+ new RunnableWithArgument<Integer>() {
+ @Override
+ public void run(final Integer selectedListId) {
+ storeCache(selectedListId);
+ }
+ }, true, StoredList.TEMPORARY_LIST_ID);
+ } else {
+ storeCache(StoredList.TEMPORARY_LIST_ID);
+ }
+ }
+
+ protected void storeCache(int listId) {
final StoreCacheHandler storeCacheHandler = new 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());
@@ -1317,7 +1338,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
storeThread.interrupt();
}
- storeThread = new StoreCacheThread(storeCacheHandler);
+ storeThread = new StoreCacheThread(listId, storeCacheHandler);
storeThread.start();
}
}
@@ -1344,15 +1365,17 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
private class StoreCacheThread extends Thread {
+ final private int listId;
final private CancellableHandler handler;
- public StoreCacheThread(final CancellableHandler handler) {
+ public StoreCacheThread(final int listId, final CancellableHandler handler) {
+ this.listId = listId;
this.handler = handler;
}
@Override
public void run() {
- cache.store(handler);
+ cache.store(listId, handler);
}
}
@@ -1537,6 +1560,38 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
/**
+ * Listener for "change list" button
+ */
+ private class ChangeListClickListener implements View.OnClickListener {
+ @Override
+ public void onClick(View view) {
+ new StoredList.UserInterface(CacheDetailActivity.this).promptForListSelection(R.string.list_title,
+ new RunnableWithArgument<Integer>() {
+ @Override
+ public void run(final Integer selectedListId) {
+ switchListById(selectedListId);
+ }
+ }, true, cache.getListId());
+ }
+ }
+
+ /**
+ * move cache to another list
+ *
+ * @param listId
+ * the ID of the list
+ */
+ public void switchListById(int listId) {
+ if (listId < 0) {
+ return;
+ }
+
+ Settings.saveLastList(listId);
+ cgData.moveToList(cache, listId);
+ updateListBox();
+ }
+
+ /**
* shows/hides buttons, sets text in watchlist box
*/
private void updateWatchlistBox() {
@@ -1604,6 +1659,31 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
/**
+ * shows/hides/updates list box
+ */
+ private void updateListBox() {
+ View box = view.findViewById(R.id.list_box);
+
+ if (cache.isOffline()) {
+ // show box
+ box.setVisibility(View.VISIBLE);
+
+ // update text
+ TextView text = (TextView) view.findViewById(R.id.list_text);
+ StoredList list = cgData.getList(cache.getListId());
+ if (list != null) {
+ text.setText(res.getString(R.string.cache_list_text) + " " + list.title);
+ } else {
+ // this should not happen
+ text.setText(R.string.cache_list_unknown);
+ }
+ } else {
+ // hide box
+ box.setVisibility(View.GONE);
+ }
+ }
+
+ /**
* Handler, called when watchlist add or remove is done
*/
private class WatchlistHandler extends Handler {