aboutsummaryrefslogtreecommitdiffstats
path: root/src/cgeo/geocaching/cgeocaches.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgeo/geocaching/cgeocaches.java')
-rw-r--r--src/cgeo/geocaching/cgeocaches.java4388
1 files changed, 2195 insertions, 2193 deletions
diff --git a/src/cgeo/geocaching/cgeocaches.java b/src/cgeo/geocaching/cgeocaches.java
index 926a72d..d196ec1 100644
--- a/src/cgeo/geocaching/cgeocaches.java
+++ b/src/cgeo/geocaching/cgeocaches.java
@@ -1,20 +1,29 @@
package cgeo.geocaching;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.UUID;
+import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.activity.AbstractListActivity;
+import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
+import cgeo.geocaching.apps.cachelist.CacheListAppFactory;
+import cgeo.geocaching.filter.cgFilter;
+import cgeo.geocaching.filter.cgFilterBySize;
+import cgeo.geocaching.filter.cgFilterByTrackables;
+import cgeo.geocaching.filter.cgFilterByType;
+import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.sorting.CacheComparator;
+import cgeo.geocaching.sorting.DateComparator;
+import cgeo.geocaching.sorting.DifficultyComparator;
+import cgeo.geocaching.sorting.FindsComparator;
+import cgeo.geocaching.sorting.GeocodeComparator;
+import cgeo.geocaching.sorting.InventoryComparator;
+import cgeo.geocaching.sorting.NameComparator;
+import cgeo.geocaching.sorting.PopularityComparator;
+import cgeo.geocaching.sorting.RatingComparator;
+import cgeo.geocaching.sorting.SizeComparator;
+import cgeo.geocaching.sorting.StateComparator;
+import cgeo.geocaching.sorting.TerrainComparator;
+import cgeo.geocaching.sorting.VoteComparator;
+import cgeo.geocaching.utils.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -31,6 +40,7 @@ import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -38,446 +48,437 @@ import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.WindowManager;
-import android.view.ContextMenu.ContextMenuInfo;
+import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
-import android.widget.AdapterView.AdapterContextMenuInfo;
-import cgeo.geocaching.activity.AbstractActivity;
-import cgeo.geocaching.activity.AbstractListActivity;
-import cgeo.geocaching.activity.ActivityMixin;
-import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
-import cgeo.geocaching.apps.cachelist.CacheListAppFactory;
-import cgeo.geocaching.filter.cgFilter;
-import cgeo.geocaching.filter.cgFilterBySize;
-import cgeo.geocaching.filter.cgFilterByTrackables;
-import cgeo.geocaching.filter.cgFilterByType;
-import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.sorting.CacheComparator;
-import cgeo.geocaching.sorting.DateComparator;
-import cgeo.geocaching.sorting.DifficultyComparator;
-import cgeo.geocaching.sorting.FindsComparator;
-import cgeo.geocaching.sorting.GeocodeComparator;
-import cgeo.geocaching.sorting.InventoryComparator;
-import cgeo.geocaching.sorting.NameComparator;
-import cgeo.geocaching.sorting.PopularityComparator;
-import cgeo.geocaching.sorting.RatingComparator;
-import cgeo.geocaching.sorting.SizeComparator;
-import cgeo.geocaching.sorting.StateComparator;
-import cgeo.geocaching.sorting.TerrainComparator;
-import cgeo.geocaching.sorting.VoteComparator;
-import cgeo.geocaching.utils.CollectionUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.UUID;
public class cgeocaches extends AbstractListActivity {
- private static final int MAX_LIST_ITEMS = 1000;
- private static final String EXTRAS_LIST_TYPE = "type";
- private static final int MENU_COMPASS = 1;
- private static final int MENU_REFRESH_STORED = 2;
- private static final int MENU_CACHE_DETAILS = 4;
- private static final int MENU_DROP_CACHES = 5;
- private static final int MENU_IMPORT_GPX = 6;
- private static final int MENU_CREATE_LIST = 7;
- private static final int MENU_DROP_LIST = 8;
- private static final int MENU_INVERT_SELECTION = 9;
- private static final int MENU_SORT_DISTANCE = 10;
- private static final int MENU_SORT_DIFFICULTY = 11;
- private static final int MENU_SORT_TERRAIN = 12;
- private static final int MENU_SORT_SIZE = 13;
- private static final int MENU_SORT_FAVORITES = 14;
- private static final int MENU_SORT_NAME = 15;
- private static final int MENU_SORT_GEOCODE = 16;
- private static final int MENU_SWITCH_LIST = 17;
- private static final int MENU_SORT_RATING = 18;
- private static final int MENU_SORT_VOTE = 19;
- private static final int MENU_SORT_INVENTORY = 20;
- private static final int MENU_IMPORT_WEB = 21;
- private static final int MENU_EXPORT_NOTES = 22;
- private static final int MENU_REMOVE_FROM_HISTORY = 23;
- private static final int MENU_DROP_CACHE = 24;
- private static final int MENU_MOVE_TO_LIST = 25;
- private static final int MENU_FILTER_CLEAR = 26;
- private static final int MENU_FILTER_TRACKABLES = 27;
- private static final int SUBMENU_FILTER_SIZE = 28;
- private static final int SUBMENU_FILTER_TYPE = 29;
- private static final int MENU_FILTER_TYPE_GPS = 30;
- private static final int MENU_FILTER_TYPE_GCHQ = 31;
- private static final int MENU_FILTER_TYPE_APE = 32;
- private static final int MENU_FILTER_TYPE_LOSTFOUND = 33;
- private static final int MENU_FILTER_TYPE_WHERIGO = 34;
- private static final int MENU_FILTER_TYPE_VIRTUAL = 35;
- private static final int MENU_FILTER_TYPE_WEBCAM = 36;
- private static final int MENU_FILTER_TYPE_CITO = 37;
- private static final int MENU_FILTER_TYPE_EARTH = 38;
- private static final int MENU_FILTER_TYPE_MEGA = 39;
- private static final int MENU_FILTER_TYPE_EVENT = 40;
- private static final int MENU_FILTER_TYPE_LETTERBOX = 41;
- private static final int MENU_FILTER_TYPE_MYSTERY = 42;
- private static final int MENU_FILTER_TYPE_MULTI = 43;
- private static final int MENU_FILTER_TYPE_TRADITIONAL = 44;
- private static final int MENU_FILTER_SIZE_NOT_CHOSEN = 45;
- private static final int MENU_FILTER_SIZE_VIRTUAL = 46;
- private static final int MENU_FILTER_SIZE_OTHER = 47;
- private static final int MENU_FILTER_SIZE_LARGE = 48;
- private static final int MENU_FILTER_SIZE_REGULAR = 49;
- private static final int MENU_FILTER_SIZE_SMALL = 50;
- private static final int MENU_FILTER_SIZE_MICRO = 51;
- private static final int MENU_SWITCH_SELECT_MODE = 52;
- private static final int SUBMENU_SHOW_MAP = 54;
- private static final int SUBMENU_MANAGE_LISTS = 55;
- private static final int SUBMENU_MANAGE_OFFLINE = 56;
+ private static final int MAX_LIST_ITEMS = 1000;
+ private static final String EXTRAS_LIST_TYPE = "type";
+ private static final int MENU_COMPASS = 1;
+ private static final int MENU_REFRESH_STORED = 2;
+ private static final int MENU_CACHE_DETAILS = 4;
+ private static final int MENU_DROP_CACHES = 5;
+ private static final int MENU_IMPORT_GPX = 6;
+ private static final int MENU_CREATE_LIST = 7;
+ private static final int MENU_DROP_LIST = 8;
+ private static final int MENU_INVERT_SELECTION = 9;
+ private static final int MENU_SORT_DISTANCE = 10;
+ private static final int MENU_SORT_DIFFICULTY = 11;
+ private static final int MENU_SORT_TERRAIN = 12;
+ private static final int MENU_SORT_SIZE = 13;
+ private static final int MENU_SORT_FAVORITES = 14;
+ private static final int MENU_SORT_NAME = 15;
+ private static final int MENU_SORT_GEOCODE = 16;
+ private static final int MENU_SWITCH_LIST = 17;
+ private static final int MENU_SORT_RATING = 18;
+ private static final int MENU_SORT_VOTE = 19;
+ private static final int MENU_SORT_INVENTORY = 20;
+ private static final int MENU_IMPORT_WEB = 21;
+ private static final int MENU_EXPORT_NOTES = 22;
+ private static final int MENU_REMOVE_FROM_HISTORY = 23;
+ private static final int MENU_DROP_CACHE = 24;
+ private static final int MENU_MOVE_TO_LIST = 25;
+ private static final int MENU_FILTER_CLEAR = 26;
+ private static final int MENU_FILTER_TRACKABLES = 27;
+ private static final int SUBMENU_FILTER_SIZE = 28;
+ private static final int SUBMENU_FILTER_TYPE = 29;
+ private static final int MENU_FILTER_TYPE_GPS = 30;
+ private static final int MENU_FILTER_TYPE_GCHQ = 31;
+ private static final int MENU_FILTER_TYPE_APE = 32;
+ private static final int MENU_FILTER_TYPE_LOSTFOUND = 33;
+ private static final int MENU_FILTER_TYPE_WHERIGO = 34;
+ private static final int MENU_FILTER_TYPE_VIRTUAL = 35;
+ private static final int MENU_FILTER_TYPE_WEBCAM = 36;
+ private static final int MENU_FILTER_TYPE_CITO = 37;
+ private static final int MENU_FILTER_TYPE_EARTH = 38;
+ private static final int MENU_FILTER_TYPE_MEGA = 39;
+ private static final int MENU_FILTER_TYPE_EVENT = 40;
+ private static final int MENU_FILTER_TYPE_LETTERBOX = 41;
+ private static final int MENU_FILTER_TYPE_MYSTERY = 42;
+ private static final int MENU_FILTER_TYPE_MULTI = 43;
+ private static final int MENU_FILTER_TYPE_TRADITIONAL = 44;
+ private static final int MENU_FILTER_SIZE_NOT_CHOSEN = 45;
+ private static final int MENU_FILTER_SIZE_VIRTUAL = 46;
+ private static final int MENU_FILTER_SIZE_OTHER = 47;
+ private static final int MENU_FILTER_SIZE_LARGE = 48;
+ private static final int MENU_FILTER_SIZE_REGULAR = 49;
+ private static final int MENU_FILTER_SIZE_SMALL = 50;
+ private static final int MENU_FILTER_SIZE_MICRO = 51;
+ private static final int MENU_SWITCH_SELECT_MODE = 52;
+ private static final int SUBMENU_SHOW_MAP = 54;
+ private static final int SUBMENU_MANAGE_LISTS = 55;
+ private static final int SUBMENU_MANAGE_OFFLINE = 56;
private static final int SUBMENU_SORT = 57;
- private static final int SUBMENU_FILTER = 58;
- private static final int SUBMENU_IMPORT = 59;
- private static final int SUBMENU_MANAGE_HISTORY = 60;
- private static final int MENU_SORT_DATE = 61;
- private static final int MENU_SORT_FINDS = 62;
- private static final int MENU_SORT_STATE = 63;
-
- private static final int CONTEXT_MENU_MOVE_TO_LIST = 1000;
- private static final int MENU_MOVE_SELECTED_OR_ALL_TO_LIST = 1200;
-
- private String action = null;
- private String type = null;
- private Geopoint coords = null;
- private String cachetype = null;
- private String keyword = null;
- private String address = null;
- private String username = null;
- private UUID searchId = null;
- private List<cgCache> cacheList = new ArrayList<cgCache>();
- private cgCacheListAdapter adapter = null;
- private LayoutInflater inflater = null;
- private View listFooter = null;
- private TextView listFooterText = null;
- private ProgressDialog waitDialog = null;
- private Float northHeading = 0f;
- private cgGeo geo = null;
- private cgDirection dir = null;
- private cgUpdateLoc geoUpdate = new update();
- private cgUpdateDir dirUpdate = new UpdateDirection();
- private String title = "";
- private int detailTotal = 0;
- private int detailProgress = 0;
- private long detailProgressTime = 0L;
- private geocachesLoadDetails threadD = null;
- private geocachesLoadFromWeb threadW = null;
- private geocachesDropDetails threadR = null;
- private geocachesExportFieldNotes threadF = null;
- private geocachesRemoveFromHistory threadH = null;
- private int listId = 0;
- private List<cgList> lists = null;
- private String selectedFilter = null;
- private GeocodeComparator gcComparator = new GeocodeComparator();
- private Handler loadCachesHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- try {
- if (searchId != null) {
- setTitle(title + " [" + app.getCount(searchId) + "]");
- cacheList.clear();
-
- final List<cgCache> cacheListTmp = app.getCaches(searchId);
- if (CollectionUtils.isNotEmpty(cacheListTmp)) {
- cacheList.addAll(cacheListTmp);
- cacheListTmp.clear();
-
- Collections.sort((List<cgCache>)cacheList, gcComparator);
- }
- } else {
- setTitle(title);
- }
-
- setAdapter();
-
- if (cacheList == null) {
- showToast(res.getString(R.string.err_list_load_fail));
- setMoreCaches(false);
- } else {
- final Integer count = app.getTotal(searchId);
-
- if (count != null && count > 0) {
- if (cacheList.size() < app.getTotal(searchId) && cacheList.size() < MAX_LIST_ITEMS) {
- setMoreCaches(true);
- } else {
- setMoreCaches(false);
- }
- } else {
- setMoreCaches(false);
- }
- }
-
- if (cacheList != null && app.getError(searchId) != null && app.getError(searchId).equalsIgnoreCase(cgBase.errorRetrieve.get(-7))) {
- AlertDialog.Builder dialog = new AlertDialog.Builder(cgeocaches.this);
- dialog.setTitle(res.getString(R.string.license));
- dialog.setMessage(res.getString(R.string.err_license));
- dialog.setCancelable(true);
- dialog.setNegativeButton(res.getString(R.string.license_dismiss), new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int id) {
- settings.deleteCookies();
- dialog.cancel();
- }
- });
- dialog.setPositiveButton(res.getString(R.string.license_show), new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int id) {
- settings.deleteCookies();
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/software/agreement.aspx?ID=0")));
- }
- });
-
- AlertDialog alert = dialog.create();
- alert.show();
- } else if (app != null && StringUtils.isNotBlank(app.getError(searchId))) {
- showToast(res.getString(R.string.err_download_fail) + app.getError(searchId) + ".");
-
- hideLoading();
- showProgress(false);
-
- finish();
- return;
- }
-
- if (geo != null && geo.coordsNow != null) {
- adapter.setActualCoordinates(geo.coordsNow);
- adapter.setActualHeading(northHeading);
- }
- } catch (Exception e) {
- showToast(res.getString(R.string.err_detail_cache_find_any));
- Log.e(cgSettings.tag, "cgeocaches.loadCachesHandler: " + e.toString());
-
- hideLoading();
- showProgress(false);
-
- finish();
- return;
- }
-
- try {
- hideLoading();
- showProgress(false);
- } catch (Exception e2) {
- Log.e(cgSettings.tag, "cgeocaches.loadCachesHandler.2: " + e2.toString());
- }
-
- if (adapter != null) {
- adapter.setSelectMode(false, true);
- }
- }
- };
- private Handler loadNextPageHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- try {
- if (searchId != null) {
- setTitle(title + " [" + app.getCount(searchId) + "]");
- cacheList.clear();
-
- final List<cgCache> cacheListTmp = app.getCaches(searchId);
- if (CollectionUtils.isNotEmpty(cacheListTmp)) {
- cacheList.addAll(cacheListTmp);
- cacheListTmp.clear();
- Collections.sort((List<cgCache>)cacheList, gcComparator);
- }
- if(adapter != null){
- adapter.reFilter();
- }
- } else {
- setTitle(title);
- }
-
- setAdapter();
-
- if (cacheList == null) {
- showToast(res.getString(R.string.err_list_load_fail));
- setMoreCaches(false);
- } else {
- final Integer count = app.getTotal(searchId);
- if (count != null && count > 0) {
- if (cacheList.size() < app.getTotal(searchId) && cacheList.size() < MAX_LIST_ITEMS) {
- setMoreCaches(true);
- } else {
- setMoreCaches(false);
- }
- } else {
- setMoreCaches(false);
- }
- }
-
- if (StringUtils.isNotBlank(app.getError(searchId))) {
- showToast(res.getString(R.string.err_download_fail) + app.getError(searchId) + ".");
-
- listFooter.setOnClickListener(new moreCachesListener());
- hideLoading();
- showProgress(false);
-
- finish();
- return;
- }
-
- if (geo != null && geo.coordsNow != null) {
- adapter.setActualCoordinates(geo.coordsNow);
- adapter.setActualHeading(northHeading);
- }
- } catch (Exception e) {
- showToast(res.getString(R.string.err_detail_cache_find_next));
- Log.e(cgSettings.tag, "cgeocaches.loadNextPageHandler: " + e.toString());
- }
-
- listFooter.setOnClickListener(new moreCachesListener());
-
- hideLoading();
- showProgress(false);
-
- if (adapter != null) {
- adapter.setSelectMode(false, true);
- }
- }
- };
- private Handler loadDetailsHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- setAdapter();
-
- if (msg.what > -1) {
- if (waitDialog != null) {
- cacheList.get(msg.what).statusChecked = false;
-
- if (adapter != null) {
- adapter.notifyDataSetChanged();
- }
-
- int secondsElapsed = (int)((System.currentTimeMillis() - detailProgressTime) / 1000);
- int minutesRemaining = (int) ((detailTotal - detailProgress) * secondsElapsed / ((detailProgress > 0) ? detailProgress : 1) / 60);
-
- waitDialog.setProgress(detailProgress);
- if (minutesRemaining < 1) {
- waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + res.getString(R.string.caches_eta_ltm));
- } else if (minutesRemaining == 1) {
- waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + minutesRemaining + " " + res.getString(R.string.caches_eta_min));
- } else {
- waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + minutesRemaining + " " + res.getString(R.string.caches_eta_mins));
- }
- }
- } else {
- if (cacheList != null && searchId != null) {
- final List<cgCache> cacheListTmp = app.getCaches(searchId);
- if (CollectionUtils.isNotEmpty(cacheListTmp)) {
- cacheList.clear();
- cacheList.addAll(cacheListTmp);
- cacheListTmp.clear();
- Collections.sort((List<cgCache>)cacheList, gcComparator);
- }
- }
-
- if (geo != null && geo.coordsNow != null) {
- adapter.setActualCoordinates(geo.coordsNow);
- adapter.setActualHeading(northHeading);
- }
-
- showProgress(false);
- if (waitDialog != null) {
- waitDialog.dismiss();
- waitDialog.setOnCancelListener(null);
- }
-
- if (geo == null) {
- geo = app.startGeo(cgeocaches.this, geoUpdate, base, settings, 0, 0);
- }
- if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
- dir = app.startDir(cgeocaches.this, dirUpdate);
- }
- }
- }
- };
- private Handler downloadFromWebHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- setAdapter();
-
- if (adapter != null) {
- adapter.notifyDataSetChanged();
- }
-
- if (msg.what == 0) { //no caches
- waitDialog.setMessage(res.getString(R.string.web_import_waiting));
- } else if (msg.what == 1) { //cache downloading
- waitDialog.setMessage(res.getString(R.string.web_downloading)+" "+(String)msg.obj+"...");
- } else if (msg.what == 2) { //Cache downloaded
- waitDialog.setMessage(res.getString(R.string.web_downloaded)+" "+(String)msg.obj+".");
- refreshCurrentList();
+ private static final int SUBMENU_FILTER = 58;
+ private static final int SUBMENU_IMPORT = 59;
+ private static final int SUBMENU_MANAGE_HISTORY = 60;
+ private static final int MENU_SORT_DATE = 61;
+ private static final int MENU_SORT_FINDS = 62;
+ private static final int MENU_SORT_STATE = 63;
+
+ private static final int CONTEXT_MENU_MOVE_TO_LIST = 1000;
+ private static final int MENU_MOVE_SELECTED_OR_ALL_TO_LIST = 1200;
+
+ private String action = null;
+ private String type = null;
+ private Geopoint coords = null;
+ private String cachetype = null;
+ private String keyword = null;
+ private String address = null;
+ private String username = null;
+ private UUID searchId = null;
+ private List<cgCache> cacheList = new ArrayList<cgCache>();
+ private cgCacheListAdapter adapter = null;
+ private LayoutInflater inflater = null;
+ private View listFooter = null;
+ private TextView listFooterText = null;
+ private ProgressDialog waitDialog = null;
+ private Float northHeading = 0f;
+ private cgGeo geo = null;
+ private cgDirection dir = null;
+ private cgUpdateLoc geoUpdate = new update();
+ private cgUpdateDir dirUpdate = new UpdateDirection();
+ private String title = "";
+ private int detailTotal = 0;
+ private int detailProgress = 0;
+ private long detailProgressTime = 0L;
+ private geocachesLoadDetails threadD = null;
+ private geocachesLoadFromWeb threadW = null;
+ private geocachesDropDetails threadR = null;
+ private geocachesExportFieldNotes threadF = null;
+ private geocachesRemoveFromHistory threadH = null;
+ private int listId = 0;
+ private List<cgList> lists = null;
+ private String selectedFilter = null;
+ private GeocodeComparator gcComparator = new GeocodeComparator();
+ private Handler loadCachesHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ try {
+ if (searchId != null) {
+ setTitle(title + " [" + app.getCount(searchId) + "]");
+ cacheList.clear();
+
+ final List<cgCache> cacheListTmp = app.getCaches(searchId);
+ if (CollectionUtils.isNotEmpty(cacheListTmp)) {
+ cacheList.addAll(cacheListTmp);
+ cacheListTmp.clear();
+
+ Collections.sort((List<cgCache>) cacheList, gcComparator);
+ }
+ } else {
+ setTitle(title);
+ }
+
+ setAdapter();
+
+ if (cacheList == null) {
+ showToast(res.getString(R.string.err_list_load_fail));
+ setMoreCaches(false);
+ } else {
+ final Integer count = app.getTotal(searchId);
+
+ if (count != null && count > 0) {
+ if (cacheList.size() < app.getTotal(searchId) && cacheList.size() < MAX_LIST_ITEMS) {
+ setMoreCaches(true);
+ } else {
+ setMoreCaches(false);
+ }
+ } else {
+ setMoreCaches(false);
+ }
+ }
+
+ if (cacheList != null && app.getError(searchId) != null && app.getError(searchId).equalsIgnoreCase(cgBase.errorRetrieve.get(-7))) {
+ AlertDialog.Builder dialog = new AlertDialog.Builder(cgeocaches.this);
+ dialog.setTitle(res.getString(R.string.license));
+ dialog.setMessage(res.getString(R.string.err_license));
+ dialog.setCancelable(true);
+ dialog.setNegativeButton(res.getString(R.string.license_dismiss), new DialogInterface.OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int id) {
+ settings.deleteCookies();
+ dialog.cancel();
+ }
+ });
+ dialog.setPositiveButton(res.getString(R.string.license_show), new DialogInterface.OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int id) {
+ settings.deleteCookies();
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/software/agreement.aspx?ID=0")));
+ }
+ });
+
+ AlertDialog alert = dialog.create();
+ alert.show();
+ } else if (app != null && StringUtils.isNotBlank(app.getError(searchId))) {
+ showToast(res.getString(R.string.err_download_fail) + app.getError(searchId) + ".");
+
+ hideLoading();
+ showProgress(false);
+
+ finish();
+ return;
+ }
+
+ if (geo != null && geo.coordsNow != null) {
+ adapter.setActualCoordinates(geo.coordsNow);
+ adapter.setActualHeading(northHeading);
+ }
+ } catch (Exception e) {
+ showToast(res.getString(R.string.err_detail_cache_find_any));
+ Log.e(cgSettings.tag, "cgeocaches.loadCachesHandler: " + e.toString());
+
+ hideLoading();
+ showProgress(false);
+
+ finish();
+ return;
+ }
+
+ try {
+ hideLoading();
+ showProgress(false);
+ } catch (Exception e2) {
+ Log.e(cgSettings.tag, "cgeocaches.loadCachesHandler.2: " + e2.toString());
+ }
+
+ if (adapter != null) {
+ adapter.setSelectMode(false, true);
+ }
+ }
+ };
+ private Handler loadNextPageHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ try {
+ if (searchId != null) {
+ setTitle(title + " [" + app.getCount(searchId) + "]");
+ cacheList.clear();
+
+ final List<cgCache> cacheListTmp = app.getCaches(searchId);
+ if (CollectionUtils.isNotEmpty(cacheListTmp)) {
+ cacheList.addAll(cacheListTmp);
+ cacheListTmp.clear();
+ Collections.sort((List<cgCache>) cacheList, gcComparator);
+ }
+ if (adapter != null) {
+ adapter.reFilter();
+ }
+ } else {
+ setTitle(title);
+ }
+
+ setAdapter();
+
+ if (cacheList == null) {
+ showToast(res.getString(R.string.err_list_load_fail));
+ setMoreCaches(false);
+ } else {
+ final Integer count = app.getTotal(searchId);
+ if (count != null && count > 0) {
+ if (cacheList.size() < app.getTotal(searchId) && cacheList.size() < MAX_LIST_ITEMS) {
+ setMoreCaches(true);
+ } else {
+ setMoreCaches(false);
+ }
+ } else {
+ setMoreCaches(false);
+ }
+ }
+
+ if (StringUtils.isNotBlank(app.getError(searchId))) {
+ showToast(res.getString(R.string.err_download_fail) + app.getError(searchId) + ".");
+
+ listFooter.setOnClickListener(new moreCachesListener());
+ hideLoading();
+ showProgress(false);
+
+ finish();
+ return;
+ }
+
+ if (geo != null && geo.coordsNow != null) {
+ adapter.setActualCoordinates(geo.coordsNow);
+ adapter.setActualHeading(northHeading);
+ }
+ } catch (Exception e) {
+ showToast(res.getString(R.string.err_detail_cache_find_next));
+ Log.e(cgSettings.tag, "cgeocaches.loadNextPageHandler: " + e.toString());
+ }
+
+ listFooter.setOnClickListener(new moreCachesListener());
+
+ hideLoading();
+ showProgress(false);
+
+ if (adapter != null) {
+ adapter.setSelectMode(false, true);
+ }
+ }
+ };
+ private Handler loadDetailsHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ setAdapter();
+
+ if (msg.what > -1) {
+ if (waitDialog != null) {
+ cacheList.get(msg.what).statusChecked = false;
+
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
+
+ int secondsElapsed = (int) ((System.currentTimeMillis() - detailProgressTime) / 1000);
+ int minutesRemaining = (int) ((detailTotal - detailProgress) * secondsElapsed / ((detailProgress > 0) ? detailProgress : 1) / 60);
+
+ waitDialog.setProgress(detailProgress);
+ if (minutesRemaining < 1) {
+ waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + res.getString(R.string.caches_eta_ltm));
+ } else if (minutesRemaining == 1) {
+ waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + minutesRemaining + " " + res.getString(R.string.caches_eta_min));
+ } else {
+ waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + minutesRemaining + " " + res.getString(R.string.caches_eta_mins));
+ }
+ }
+ } else {
+ if (cacheList != null && searchId != null) {
+ final List<cgCache> cacheListTmp = app.getCaches(searchId);
+ if (CollectionUtils.isNotEmpty(cacheListTmp)) {
+ cacheList.clear();
+ cacheList.addAll(cacheListTmp);
+ cacheListTmp.clear();
+ Collections.sort((List<cgCache>) cacheList, gcComparator);
+ }
+ }
+
+ if (geo != null && geo.coordsNow != null) {
+ adapter.setActualCoordinates(geo.coordsNow);
+ adapter.setActualHeading(northHeading);
+ }
+
+ showProgress(false);
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ waitDialog.setOnCancelListener(null);
+ }
+
+ if (geo == null) {
+ geo = app.startGeo(cgeocaches.this, geoUpdate, base, settings, 0, 0);
+ }
+ if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
+ dir = app.startDir(cgeocaches.this, dirUpdate);
+ }
+ }
+ }
+ };
+ private Handler downloadFromWebHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ setAdapter();
+
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
+
+ if (msg.what == 0) { //no caches
+ waitDialog.setMessage(res.getString(R.string.web_import_waiting));
+ } else if (msg.what == 1) { //cache downloading
+ waitDialog.setMessage(res.getString(R.string.web_downloading) + " " + (String) msg.obj + "...");
+ } else if (msg.what == 2) { //Cache downloaded
+ waitDialog.setMessage(res.getString(R.string.web_downloaded) + " " + (String) msg.obj + ".");
+ refreshCurrentList();
} else if (msg.what == -2) {
- if (waitDialog != null) {
- waitDialog.dismiss();
- waitDialog.setOnCancelListener(null);
- }
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ waitDialog.setOnCancelListener(null);
+ }
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
showToast(res.getString(R.string.sendToCgeo_download_fail));
- finish();
- return;
+ finish();
+ return;
} else if (msg.what == -3) {
- if (waitDialog != null) {
- waitDialog.dismiss();
- waitDialog.setOnCancelListener(null);
- }
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ waitDialog.setOnCancelListener(null);
+ }
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
showToast(res.getString(R.string.sendToCgeo_no_registration));
- finish();
- return;
- } else {
- if (adapter != null) {
- adapter.setSelectMode(false, true);
- }
-
- cacheList.clear();
-
- final List<cgCache> cacheListTmp = app.getCaches(searchId);
- if (CollectionUtils.isNotEmpty(cacheListTmp)) {
- cacheList.addAll(cacheListTmp);
- cacheListTmp.clear();
-
- Collections.sort((List<cgCache>)cacheList, gcComparator);
- }
-
- if (waitDialog != null) {
- waitDialog.dismiss();
- waitDialog.setOnCancelListener(null);
- }
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
- }
- };
- private Handler dropDetailsHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- if (adapter != null) {
- adapter.setSelectMode(false, true);
- }
-
- refreshCurrentList();
-
- cacheList.clear();
-
- final List<cgCache> cacheListTmp = app.getCaches(searchId);
- if (CollectionUtils.isNotEmpty(cacheListTmp)) {
- cacheList.addAll(cacheListTmp);
- cacheListTmp.clear();
-
- Collections.sort((List<cgCache>)cacheList, gcComparator);
- }
-
- if (waitDialog != null) {
- waitDialog.dismiss();
- waitDialog.setOnCancelListener(null);
- }
- }
- };
+ finish();
+ return;
+ } else {
+ if (adapter != null) {
+ adapter.setSelectMode(false, true);
+ }
+
+ cacheList.clear();
+
+ final List<cgCache> cacheListTmp = app.getCaches(searchId);
+ if (CollectionUtils.isNotEmpty(cacheListTmp)) {
+ cacheList.addAll(cacheListTmp);
+ cacheListTmp.clear();
+
+ Collections.sort((List<cgCache>) cacheList, gcComparator);
+ }
+
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ waitDialog.setOnCancelListener(null);
+ }
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
+ }
+ };
+ private Handler dropDetailsHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ if (adapter != null) {
+ adapter.setSelectMode(false, true);
+ }
+
+ refreshCurrentList();
+
+ cacheList.clear();
+
+ final List<cgCache> cacheListTmp = app.getCaches(searchId);
+ if (CollectionUtils.isNotEmpty(cacheListTmp)) {
+ cacheList.addAll(cacheListTmp);
+ cacheListTmp.clear();
+
+ Collections.sort((List<cgCache>) cacheList, gcComparator);
+ }
+
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ waitDialog.setOnCancelListener(null);
+ }
+ }
+ };
private Handler removeFromHistoryHandler = new Handler() {
@Override
@@ -500,7 +501,7 @@ public class cgeocaches extends AbstractListActivity {
}
}
};
- private Handler exportFieldNotesHandler = new Handler() {
+ private Handler exportFieldNotesHandler = new Handler() {
@Override
public void handleMessage(Message msg)
@@ -535,371 +536,371 @@ public class cgeocaches extends AbstractListActivity {
}
}
};
- private ContextMenuInfo lastMenuInfo;
- /**
- * the navigation menu item for the cache list (not the context menu!), or <code>null</code>
- */
- private MenuItem navigationMenu;
- /**
- * flag indicating whether we shall show the move to list context menu
- */
- private boolean contextMenuMoveToList = false;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- // init
- app.setAction(action);
-
- setTheme();
- setContentView(R.layout.caches);
- setTitle("caches");
-
- // get parameters
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- type = extras.getString(EXTRAS_LIST_TYPE);
- coords = new Geopoint(extras.getDouble("latitude"), extras.getDouble("longitude"));
- cachetype = extras.getString("cachetype");
- keyword = extras.getString("keyword");
- address = extras.getString("address");
- username = extras.getString("username");
- }
-
- init();
-
- Thread threadPure;
- cgSearchThread thread;
-
- if (type.equals("offline")) {
- listId = settings.getLastList();
- if (listId <= 0) {
- listId = 1;
- title = res.getString(R.string.caches_stored);
- } else {
- final cgList list = app.getList(listId);
- title = list.title;
- }
-
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- threadPure = new geocachesLoadByOffline(loadCachesHandler, coords, listId);
- threadPure.start();
- } else if (type.equals("history")) {
- if (adapter != null) {
- adapter.setHistoric(true);
- }
-
- title = res.getString(R.string.caches_history);
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- threadPure = new geocachesLoadByHistory(loadCachesHandler);
- threadPure.start();
- } else if (type.equals("nearest")) {
- action = "pending";
- title = res.getString(R.string.caches_nearby);
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- thread = new geocachesLoadByCoords(loadCachesHandler, coords, cachetype);
- thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
- thread.start();
- } else if (type.equals("coordinate")) {
- action = "planning";
- title = cgBase.formatCoords(coords, true);
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- thread = new geocachesLoadByCoords(loadCachesHandler, coords, cachetype);
- thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
- thread.start();
- } else if (type.equals("keyword")) {
- title = keyword;
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- thread = new geocachesLoadByKeyword(loadCachesHandler, keyword, cachetype);
- thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
- thread.start();
- } else if (type.equals("address")) {
- action = "planning";
- if (StringUtils.isNotBlank(address)) {
- title = address;
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
- } else {
- title = cgBase.formatCoords(coords, true);
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
- }
-
- thread = new geocachesLoadByCoords(loadCachesHandler, coords, cachetype);
- thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
- thread.start();
- } else if (type.equals("username")) {
- title = username;
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- thread = new geocachesLoadByUserName(loadCachesHandler, username, cachetype);
- thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
- thread.start();
- } else if (type.equals("owner")) {
- title = username;
- setTitle(title);
- showProgress(true);
- setLoadingCaches();
-
- thread = new geocachesLoadByOwner(loadCachesHandler, username, cachetype);
- thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
- thread.start();
- } else {
- title = "caches";
- setTitle(title);
- Log.e(cgSettings.tag, "cgeocaches.onCreate: No action or unknown action specified");
- }
-
- prepareFilterBar();
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
-
- init();
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- settings.load();
- init();
-
- if (adapter != null && geo != null && geo.coordsNow != null) {
- adapter.setActualCoordinates(geo.coordsNow);
- adapter.setActualHeading(northHeading);
- }
-
- if (adapter != null) {
- adapter.setSelectMode(false, true);
- if (geo != null && geo.coordsNow != null) {
- adapter.forceSort(geo.coordsNow);
- }
- }
-
- if (loadCachesHandler != null && searchId != null) {
- loadCachesHandler.sendEmptyMessage(0);
- }
- }
-
- @Override
- public void onDestroy() {
- if (adapter != null) {
- adapter = null;
- }
-
- if (dir != null) {
- dir = app.removeDir();
- }
- if (geo != null) {
- geo = app.removeGeo();
- }
-
- super.onDestroy();
- }
-
- @Override
- public void onStop() {
- if (dir != null) {
- dir = app.removeDir();
- }
- if (geo != null) {
- geo = app.removeGeo();
- }
-
- super.onStop();
- }
-
- @Override
- public void onPause() {
- if (dir != null) {
- dir = app.removeDir();
- }
- if (geo != null) {
- geo = app.removeGeo();
- }
-
- super.onPause();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- SubMenu subMenuFilter = menu.addSubMenu(0, SUBMENU_FILTER, 0, res.getString(R.string.caches_filter)).setIcon(android.R.drawable.ic_menu_search);
- subMenuFilter.setHeaderTitle(res.getString(R.string.caches_filter_title));
- if (settings.cacheType == null) {
- subMenuFilter.add(0, SUBMENU_FILTER_TYPE, 0, res.getString(R.string.caches_filter_type));
- }
- subMenuFilter.add(0, SUBMENU_FILTER_SIZE, 0, res.getString(R.string.caches_filter_size));
- subMenuFilter.add(0, MENU_FILTER_TRACKABLES, 0, res.getString(R.string.caches_filter_track));
- subMenuFilter.add(0, MENU_FILTER_CLEAR, 0, res.getString(R.string.caches_filter_clear));
-
- SubMenu subMenuSort = menu.addSubMenu(0, SUBMENU_SORT, 0, res.getString(R.string.caches_sort)).setIcon(android.R.drawable.ic_menu_sort_alphabetically);
- subMenuSort.setHeaderTitle(res.getString(R.string.caches_sort_title));
-
- // sort the context menu labels alphabetically for easier reading
- Map<String, Integer> comparators = new HashMap<String, Integer>();
- comparators.put(res.getString(R.string.caches_sort_distance), MENU_SORT_DISTANCE);
- comparators.put(res.getString(R.string.caches_sort_difficulty), MENU_SORT_DIFFICULTY);
- comparators.put(res.getString(R.string.caches_sort_terrain), MENU_SORT_TERRAIN);
- comparators.put(res.getString(R.string.caches_sort_size), MENU_SORT_SIZE);
- comparators.put(res.getString(R.string.caches_sort_favorites), MENU_SORT_FAVORITES);
- comparators.put(res.getString(R.string.caches_sort_name), MENU_SORT_NAME);
- comparators.put(res.getString(R.string.caches_sort_gccode), MENU_SORT_GEOCODE);
- comparators.put(res.getString(R.string.caches_sort_rating), MENU_SORT_RATING);
- comparators.put(res.getString(R.string.caches_sort_vote), MENU_SORT_VOTE);
- comparators.put(res.getString(R.string.caches_sort_inventory), MENU_SORT_INVENTORY);
- comparators.put(res.getString(R.string.caches_sort_date), MENU_SORT_DATE);
- comparators.put(res.getString(R.string.caches_sort_finds), MENU_SORT_FINDS);
- comparators.put(res.getString(R.string.caches_sort_state), MENU_SORT_STATE);
-
- List<String> sortedLabels = new ArrayList<String>(comparators.keySet());
- Collections.sort(sortedLabels);
- for (String label : sortedLabels) {
- Integer id = comparators.get(label);
- subMenuSort.add(1, id, 0, label).setCheckable(true).setChecked(id == MENU_SORT_DISTANCE);
- }
-
- subMenuSort.setGroupCheckable(1, true, true);
-
- menu.add(0, MENU_SWITCH_SELECT_MODE, 0, res.getString(R.string.caches_select_mode)).setIcon(android.R.drawable.ic_menu_agenda);
- menu.add(0, MENU_INVERT_SELECTION, 0, res.getString(R.string.caches_select_invert)).setIcon(android.R.drawable.ic_menu_agenda);
- if (type.equals("offline")) {
- SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_OFFLINE, 0, res.getString(R.string.caches_manage)).setIcon(android.R.drawable.ic_menu_save);
- subMenu.add(0, MENU_DROP_CACHES, 0, res.getString(R.string.caches_drop_all)); // delete saved caches
- subMenu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.cache_offline_refresh)); // download details for all caches
- subMenu.add(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list));
- subMenu.add(0, MENU_EXPORT_NOTES, 0, res.getString(R.string.cache_export_fieldnote)); // export field notes
- if (settings.webDeviceCode == null)
- {
- menu.add(0, MENU_IMPORT_GPX, 0, res.getString(R.string.gpx_import_title)).setIcon(android.R.drawable.ic_menu_upload); // import gpx file
- } else {
- SubMenu subMenuImport = menu.addSubMenu(0, SUBMENU_IMPORT, 0, res.getString(R.string.import_title)).setIcon(android.R.drawable.ic_menu_upload); // import
- subMenuImport.add(1, MENU_IMPORT_GPX, 0, res.getString(R.string.gpx_import_title)).setCheckable(false).setChecked(false);
- subMenuImport.add(1, MENU_IMPORT_WEB, 0, res.getString(R.string.web_import_title)).setCheckable(false).setChecked(false);
- }
- } else {
- if (type.equals("history"))
- {
- SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_HISTORY, 0, res.getString(R.string.caches_manage)).setIcon(android.R.drawable.ic_menu_save);
- subMenu.add(0, MENU_REMOVE_FROM_HISTORY, 0, res.getString(R.string.cache_clear_history)); // remove from history
- subMenu.add(0, MENU_EXPORT_NOTES, 0, res.getString(R.string.cache_export_fieldnote)); // export field notes
- }
- menu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.caches_store_offline)).setIcon(android.R.drawable.ic_menu_set_as); // download details for all caches
- }
-
- navigationMenu = CacheListAppFactory.addMenuItems(menu, this, res);
-
- if (type.equals("offline")) {
- SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_LISTS, 0, res.getString(R.string.list_menu)).setIcon(android.R.drawable.ic_menu_more);
- subMenu.add(0, MENU_CREATE_LIST, 0, res.getString(R.string.list_menu_create));
- subMenu.add(0, MENU_DROP_LIST, 0, res.getString(R.string.list_menu_drop));
- subMenu.add(0, MENU_SWITCH_LIST, 0, res.getString(R.string.list_menu_change));
- }
-
- return true;
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
-
- try {
- if (adapter != null && adapter.getSelectMode()) {
- menu.findItem(MENU_SWITCH_SELECT_MODE).setTitle(res.getString(R.string.caches_select_mode_exit));
- menu.findItem(MENU_INVERT_SELECTION).setVisible(true);
- } else {
- menu.findItem(MENU_SWITCH_SELECT_MODE).setTitle(res.getString(R.string.caches_select_mode));
- menu.findItem(MENU_INVERT_SELECTION).setVisible(false);
- }
-
- boolean hasSelection = adapter != null && adapter.getChecked() > 0;
- if (type != null && type.equals("offline")) { // only offline list
- if (hasSelection) {
- menu.findItem(MENU_DROP_CACHES).setTitle(res.getString(R.string.caches_drop_selected) + " (" + adapter.getChecked() + ")");
- } else {
- menu.findItem(MENU_DROP_CACHES).setTitle(res.getString(R.string.caches_drop_all));
- }
-
- if (hasSelection) {
- menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_refresh_selected) + " (" + adapter.getChecked() + ")");
- } else {
- menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_refresh_all));
- }
-
- if (hasSelection) {
- menu.findItem(MENU_MOVE_TO_LIST).setTitle(res.getString(R.string.caches_move_selected) + " (" + adapter.getChecked() + ")");
- } else {
- menu.findItem(MENU_MOVE_TO_LIST).setTitle(res.getString(R.string.caches_move_all));
- }
- } else { // search and history list (all other than offline)
- if (hasSelection) {
- menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_store_selected) + " (" + adapter.getChecked() + ")");
- } else {
- menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_store_offline));
- }
- }
-
- // Hide menus if cache-list is empty
- int[] hideIfEmptyList = new int[] {MENU_SWITCH_SELECT_MODE,
- SUBMENU_MANAGE_OFFLINE,
- SUBMENU_MANAGE_HISTORY,
- SUBMENU_SHOW_MAP,
- SUBMENU_SORT,
- MENU_REFRESH_STORED};
-
- boolean menuEnabled = cacheList.size() > 0;
- for (int itemId : hideIfEmptyList)
- {
- MenuItem item = menu.findItem(itemId);
- if (null != item)
- {
- item.setEnabled(menuEnabled);
- }
- }
-
- if (navigationMenu != null) {
- navigationMenu.setEnabled(menuEnabled);
- }
-
- MenuItem item = menu.findItem(MENU_DROP_LIST);
- if (item != null) {
- item.setVisible(listId != 1);
- }
-
- boolean multipleLists = app.getLists().size() >= 2;
- item = menu.findItem(MENU_SWITCH_LIST);
- if (item != null) {
- item.setVisible(multipleLists);
- }
- item = menu.findItem(MENU_MOVE_TO_LIST);
- if (item != null) {
- item.setVisible(multipleLists);
- }
-
- item = menu.findItem(MENU_REMOVE_FROM_HISTORY);
- if (null != item) {
+ private ContextMenuInfo lastMenuInfo;
+ /**
+ * the navigation menu item for the cache list (not the context menu!), or <code>null</code>
+ */
+ private MenuItem navigationMenu;
+ /**
+ * flag indicating whether we shall show the move to list context menu
+ */
+ private boolean contextMenuMoveToList = false;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // init
+ app.setAction(action);
+
+ setTheme();
+ setContentView(R.layout.caches);
+ setTitle("caches");
+
+ // get parameters
+ Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ type = extras.getString(EXTRAS_LIST_TYPE);
+ coords = new Geopoint(extras.getDouble("latitude"), extras.getDouble("longitude"));
+ cachetype = extras.getString("cachetype");
+ keyword = extras.getString("keyword");
+ address = extras.getString("address");
+ username = extras.getString("username");
+ }
+
+ init();
+
+ Thread threadPure;
+ cgSearchThread thread;
+
+ if (type.equals("offline")) {
+ listId = settings.getLastList();
+ if (listId <= 0) {
+ listId = 1;
+ title = res.getString(R.string.caches_stored);
+ } else {
+ final cgList list = app.getList(listId);
+ title = list.title;
+ }
+
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ threadPure = new geocachesLoadByOffline(loadCachesHandler, coords, listId);
+ threadPure.start();
+ } else if (type.equals("history")) {
+ if (adapter != null) {
+ adapter.setHistoric(true);
+ }
+
+ title = res.getString(R.string.caches_history);
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ threadPure = new geocachesLoadByHistory(loadCachesHandler);
+ threadPure.start();
+ } else if (type.equals("nearest")) {
+ action = "pending";
+ title = res.getString(R.string.caches_nearby);
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ thread = new geocachesLoadByCoords(loadCachesHandler, coords, cachetype);
+ thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
+ thread.start();
+ } else if (type.equals("coordinate")) {
+ action = "planning";
+ title = cgBase.formatCoords(coords, true);
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ thread = new geocachesLoadByCoords(loadCachesHandler, coords, cachetype);
+ thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
+ thread.start();
+ } else if (type.equals("keyword")) {
+ title = keyword;
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ thread = new geocachesLoadByKeyword(loadCachesHandler, keyword, cachetype);
+ thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
+ thread.start();
+ } else if (type.equals("address")) {
+ action = "planning";
+ if (StringUtils.isNotBlank(address)) {
+ title = address;
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+ } else {
+ title = cgBase.formatCoords(coords, true);
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+ }
+
+ thread = new geocachesLoadByCoords(loadCachesHandler, coords, cachetype);
+ thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
+ thread.start();
+ } else if (type.equals("username")) {
+ title = username;
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ thread = new geocachesLoadByUserName(loadCachesHandler, username, cachetype);
+ thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
+ thread.start();
+ } else if (type.equals("owner")) {
+ title = username;
+ setTitle(title);
+ showProgress(true);
+ setLoadingCaches();
+
+ thread = new geocachesLoadByOwner(loadCachesHandler, username, cachetype);
+ thread.setRecaptchaHandler(new cgSearchHandler(this, res, thread));
+ thread.start();
+ } else {
+ title = "caches";
+ setTitle(title);
+ Log.e(cgSettings.tag, "cgeocaches.onCreate: No action or unknown action specified");
+ }
+
+ prepareFilterBar();
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ init();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ settings.load();
+ init();
+
+ if (adapter != null && geo != null && geo.coordsNow != null) {
+ adapter.setActualCoordinates(geo.coordsNow);
+ adapter.setActualHeading(northHeading);
+ }
+
+ if (adapter != null) {
+ adapter.setSelectMode(false, true);
+ if (geo != null && geo.coordsNow != null) {
+ adapter.forceSort(geo.coordsNow);
+ }
+ }
+
+ if (loadCachesHandler != null && searchId != null) {
+ loadCachesHandler.sendEmptyMessage(0);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ if (adapter != null) {
+ adapter = null;
+ }
+
+ if (dir != null) {
+ dir = app.removeDir();
+ }
+ if (geo != null) {
+ geo = app.removeGeo();
+ }
+
+ super.onDestroy();
+ }
+
+ @Override
+ public void onStop() {
+ if (dir != null) {
+ dir = app.removeDir();
+ }
+ if (geo != null) {
+ geo = app.removeGeo();
+ }
+
+ super.onStop();
+ }
+
+ @Override
+ public void onPause() {
+ if (dir != null) {
+ dir = app.removeDir();
+ }
+ if (geo != null) {
+ geo = app.removeGeo();
+ }
+
+ super.onPause();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ SubMenu subMenuFilter = menu.addSubMenu(0, SUBMENU_FILTER, 0, res.getString(R.string.caches_filter)).setIcon(android.R.drawable.ic_menu_search);
+ subMenuFilter.setHeaderTitle(res.getString(R.string.caches_filter_title));
+ if (settings.cacheType == null) {
+ subMenuFilter.add(0, SUBMENU_FILTER_TYPE, 0, res.getString(R.string.caches_filter_type));
+ }
+ subMenuFilter.add(0, SUBMENU_FILTER_SIZE, 0, res.getString(R.string.caches_filter_size));
+ subMenuFilter.add(0, MENU_FILTER_TRACKABLES, 0, res.getString(R.string.caches_filter_track));
+ subMenuFilter.add(0, MENU_FILTER_CLEAR, 0, res.getString(R.string.caches_filter_clear));
+
+ SubMenu subMenuSort = menu.addSubMenu(0, SUBMENU_SORT, 0, res.getString(R.string.caches_sort)).setIcon(android.R.drawable.ic_menu_sort_alphabetically);
+ subMenuSort.setHeaderTitle(res.getString(R.string.caches_sort_title));
+
+ // sort the context menu labels alphabetically for easier reading
+ Map<String, Integer> comparators = new HashMap<String, Integer>();
+ comparators.put(res.getString(R.string.caches_sort_distance), MENU_SORT_DISTANCE);
+ comparators.put(res.getString(R.string.caches_sort_difficulty), MENU_SORT_DIFFICULTY);
+ comparators.put(res.getString(R.string.caches_sort_terrain), MENU_SORT_TERRAIN);
+ comparators.put(res.getString(R.string.caches_sort_size), MENU_SORT_SIZE);
+ comparators.put(res.getString(R.string.caches_sort_favorites), MENU_SORT_FAVORITES);
+ comparators.put(res.getString(R.string.caches_sort_name), MENU_SORT_NAME);
+ comparators.put(res.getString(R.string.caches_sort_gccode), MENU_SORT_GEOCODE);
+ comparators.put(res.getString(R.string.caches_sort_rating), MENU_SORT_RATING);
+ comparators.put(res.getString(R.string.caches_sort_vote), MENU_SORT_VOTE);
+ comparators.put(res.getString(R.string.caches_sort_inventory), MENU_SORT_INVENTORY);
+ comparators.put(res.getString(R.string.caches_sort_date), MENU_SORT_DATE);
+ comparators.put(res.getString(R.string.caches_sort_finds), MENU_SORT_FINDS);
+ comparators.put(res.getString(R.string.caches_sort_state), MENU_SORT_STATE);
+
+ List<String> sortedLabels = new ArrayList<String>(comparators.keySet());
+ Collections.sort(sortedLabels);
+ for (String label : sortedLabels) {
+ Integer id = comparators.get(label);
+ subMenuSort.add(1, id, 0, label).setCheckable(true).setChecked(id == MENU_SORT_DISTANCE);
+ }
+
+ subMenuSort.setGroupCheckable(1, true, true);
+
+ menu.add(0, MENU_SWITCH_SELECT_MODE, 0, res.getString(R.string.caches_select_mode)).setIcon(android.R.drawable.ic_menu_agenda);
+ menu.add(0, MENU_INVERT_SELECTION, 0, res.getString(R.string.caches_select_invert)).setIcon(android.R.drawable.ic_menu_agenda);
+ if (type.equals("offline")) {
+ SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_OFFLINE, 0, res.getString(R.string.caches_manage)).setIcon(android.R.drawable.ic_menu_save);
+ subMenu.add(0, MENU_DROP_CACHES, 0, res.getString(R.string.caches_drop_all)); // delete saved caches
+ subMenu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.cache_offline_refresh)); // download details for all caches
+ subMenu.add(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list));
+ subMenu.add(0, MENU_EXPORT_NOTES, 0, res.getString(R.string.cache_export_fieldnote)); // export field notes
+ if (settings.webDeviceCode == null)
+ {
+ menu.add(0, MENU_IMPORT_GPX, 0, res.getString(R.string.gpx_import_title)).setIcon(android.R.drawable.ic_menu_upload); // import gpx file
+ } else {
+ SubMenu subMenuImport = menu.addSubMenu(0, SUBMENU_IMPORT, 0, res.getString(R.string.import_title)).setIcon(android.R.drawable.ic_menu_upload); // import
+ subMenuImport.add(1, MENU_IMPORT_GPX, 0, res.getString(R.string.gpx_import_title)).setCheckable(false).setChecked(false);
+ subMenuImport.add(1, MENU_IMPORT_WEB, 0, res.getString(R.string.web_import_title)).setCheckable(false).setChecked(false);
+ }
+ } else {
+ if (type.equals("history"))
+ {
+ SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_HISTORY, 0, res.getString(R.string.caches_manage)).setIcon(android.R.drawable.ic_menu_save);
+ subMenu.add(0, MENU_REMOVE_FROM_HISTORY, 0, res.getString(R.string.cache_clear_history)); // remove from history
+ subMenu.add(0, MENU_EXPORT_NOTES, 0, res.getString(R.string.cache_export_fieldnote)); // export field notes
+ }
+ menu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.caches_store_offline)).setIcon(android.R.drawable.ic_menu_set_as); // download details for all caches
+ }
+
+ navigationMenu = CacheListAppFactory.addMenuItems(menu, this, res);
+
+ if (type.equals("offline")) {
+ SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_LISTS, 0, res.getString(R.string.list_menu)).setIcon(android.R.drawable.ic_menu_more);
+ subMenu.add(0, MENU_CREATE_LIST, 0, res.getString(R.string.list_menu_create));
+ subMenu.add(0, MENU_DROP_LIST, 0, res.getString(R.string.list_menu_drop));
+ subMenu.add(0, MENU_SWITCH_LIST, 0, res.getString(R.string.list_menu_change));
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+
+ try {
+ if (adapter != null && adapter.getSelectMode()) {
+ menu.findItem(MENU_SWITCH_SELECT_MODE).setTitle(res.getString(R.string.caches_select_mode_exit));
+ menu.findItem(MENU_INVERT_SELECTION).setVisible(true);
+ } else {
+ menu.findItem(MENU_SWITCH_SELECT_MODE).setTitle(res.getString(R.string.caches_select_mode));
+ menu.findItem(MENU_INVERT_SELECTION).setVisible(false);
+ }
+
+ boolean hasSelection = adapter != null && adapter.getChecked() > 0;
+ if (type != null && type.equals("offline")) { // only offline list
+ if (hasSelection) {
+ menu.findItem(MENU_DROP_CACHES).setTitle(res.getString(R.string.caches_drop_selected) + " (" + adapter.getChecked() + ")");
+ } else {
+ menu.findItem(MENU_DROP_CACHES).setTitle(res.getString(R.string.caches_drop_all));
+ }
+
+ if (hasSelection) {
+ menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_refresh_selected) + " (" + adapter.getChecked() + ")");
+ } else {
+ menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_refresh_all));
+ }
+
+ if (hasSelection) {
+ menu.findItem(MENU_MOVE_TO_LIST).setTitle(res.getString(R.string.caches_move_selected) + " (" + adapter.getChecked() + ")");
+ } else {
+ menu.findItem(MENU_MOVE_TO_LIST).setTitle(res.getString(R.string.caches_move_all));
+ }
+ } else { // search and history list (all other than offline)
+ if (hasSelection) {
+ menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_store_selected) + " (" + adapter.getChecked() + ")");
+ } else {
+ menu.findItem(MENU_REFRESH_STORED).setTitle(res.getString(R.string.caches_store_offline));
+ }
+ }
+
+ // Hide menus if cache-list is empty
+ int[] hideIfEmptyList = new int[] { MENU_SWITCH_SELECT_MODE,
+ SUBMENU_MANAGE_OFFLINE,
+ SUBMENU_MANAGE_HISTORY,
+ SUBMENU_SHOW_MAP,
+ SUBMENU_SORT,
+ MENU_REFRESH_STORED };
+
+ boolean menuEnabled = cacheList.size() > 0;
+ for (int itemId : hideIfEmptyList)
+ {
+ MenuItem item = menu.findItem(itemId);
+ if (null != item)
+ {
+ item.setEnabled(menuEnabled);
+ }
+ }
+
+ if (navigationMenu != null) {
+ navigationMenu.setEnabled(menuEnabled);
+ }
+
+ MenuItem item = menu.findItem(MENU_DROP_LIST);
+ if (item != null) {
+ item.setVisible(listId != 1);
+ }
+
+ boolean multipleLists = app.getLists().size() >= 2;
+ item = menu.findItem(MENU_SWITCH_LIST);
+ if (item != null) {
+ item.setVisible(multipleLists);
+ }
+ item = menu.findItem(MENU_MOVE_TO_LIST);
+ if (item != null) {
+ item.setVisible(multipleLists);
+ }
+
+ item = menu.findItem(MENU_REMOVE_FROM_HISTORY);
+ if (null != item) {
if (hasSelection) {
item.setTitle(res.getString(R.string.cache_remove_from_history) + " (" + adapter.getChecked() + ")");
} else {
@@ -907,8 +908,8 @@ public class cgeocaches extends AbstractListActivity {
}
}
- item = menu.findItem(MENU_EXPORT_NOTES);
- if (null != item) {
+ item = menu.findItem(MENU_EXPORT_NOTES);
+ if (null != item) {
if (hasSelection) {
item.setTitle(res.getString(R.string.cache_export_fieldnote) + " (" + adapter.getChecked() + ")");
} else {
@@ -916,7 +917,7 @@ public class cgeocaches extends AbstractListActivity {
}
}
- // Hide Field Notes export if there are no caches with logs
+ // Hide Field Notes export if there are no caches with logs
item = menu.findItem(MENU_EXPORT_NOTES);
if (null != item) {
item.setEnabled(false);
@@ -929,582 +930,581 @@ public class cgeocaches extends AbstractListActivity {
}
}
}
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.onPrepareOptionsMenu: " + e.toString());
- }
-
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- int itemId = item.getItemId();
- switch (itemId) {
- case MENU_SWITCH_SELECT_MODE:
- if (adapter != null) {
- adapter.switchSelectMode();
- }
- return true;
- case MENU_REFRESH_STORED:
- refreshStored();
- return true;
- case MENU_DROP_CACHES:
- dropStored();
- return false;
- case MENU_IMPORT_GPX:
- importGpx();
- return false;
- case MENU_CREATE_LIST:
- createList();
- return false;
- case MENU_DROP_LIST:
- removeList();
- return false;
- case MENU_INVERT_SELECTION:
- if (adapter != null) {
- adapter.invertSelection();
- }
- return false;
- case MENU_SORT_DISTANCE:
- setComparator(item, null);
- return false;
- case MENU_SORT_DIFFICULTY:
- setComparator(item, new DifficultyComparator());
- return false;
- case MENU_SORT_TERRAIN:
- setComparator(item, new TerrainComparator());
- return false;
- case MENU_SORT_SIZE:
- setComparator(item, new SizeComparator());
- return false;
- case MENU_SORT_FAVORITES:
- setComparator(item, new PopularityComparator());
- return false;
- case MENU_SORT_NAME:
- setComparator(item, new NameComparator());
- return false;
- case MENU_SORT_GEOCODE:
- setComparator(item, new GeocodeComparator());
- return false;
- case MENU_SWITCH_LIST:
- selectList(null);
- return false;
- case MENU_SORT_RATING:
- setComparator(item, new RatingComparator());
- return false;
- case MENU_SORT_VOTE:
- setComparator(item, new VoteComparator());
- return false;
- case MENU_SORT_INVENTORY:
- setComparator(item, new InventoryComparator());
- return false;
- case MENU_SORT_DATE:
- setComparator(item, new DateComparator());
- return true;
- case MENU_SORT_FINDS:
- setComparator(item, new FindsComparator(app));
- return true;
- case MENU_SORT_STATE:
- setComparator(item, new StateComparator());
- return true;
- case SUBMENU_FILTER_TYPE:
- selectedFilter = res.getString(R.string.caches_filter_type);
- openContextMenu(getListView());
- return false;
- case SUBMENU_FILTER_SIZE:
- selectedFilter = res.getString(R.string.caches_filter_size);
- openContextMenu(getListView());
- return false;
- case MENU_FILTER_TRACKABLES:
- setFilter(new cgFilterByTrackables(res.getString(R.string.caches_filter_track)));
- return false;
- case MENU_FILTER_CLEAR:
- if (adapter != null) {
- setFilter(null);
- }
- return false;
- case MENU_IMPORT_WEB:
- importWeb();
- return false;
- case MENU_EXPORT_NOTES:
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.onPrepareOptionsMenu: " + e.toString());
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int itemId = item.getItemId();
+ switch (itemId) {
+ case MENU_SWITCH_SELECT_MODE:
+ if (adapter != null) {
+ adapter.switchSelectMode();
+ }
+ return true;
+ case MENU_REFRESH_STORED:
+ refreshStored();
+ return true;
+ case MENU_DROP_CACHES:
+ dropStored();
+ return false;
+ case MENU_IMPORT_GPX:
+ importGpx();
+ return false;
+ case MENU_CREATE_LIST:
+ createList();
+ return false;
+ case MENU_DROP_LIST:
+ removeList();
+ return false;
+ case MENU_INVERT_SELECTION:
+ if (adapter != null) {
+ adapter.invertSelection();
+ }
+ return false;
+ case MENU_SORT_DISTANCE:
+ setComparator(item, null);
+ return false;
+ case MENU_SORT_DIFFICULTY:
+ setComparator(item, new DifficultyComparator());
+ return false;
+ case MENU_SORT_TERRAIN:
+ setComparator(item, new TerrainComparator());
+ return false;
+ case MENU_SORT_SIZE:
+ setComparator(item, new SizeComparator());
+ return false;
+ case MENU_SORT_FAVORITES:
+ setComparator(item, new PopularityComparator());
+ return false;
+ case MENU_SORT_NAME:
+ setComparator(item, new NameComparator());
+ return false;
+ case MENU_SORT_GEOCODE:
+ setComparator(item, new GeocodeComparator());
+ return false;
+ case MENU_SWITCH_LIST:
+ selectList(null);
+ return false;
+ case MENU_SORT_RATING:
+ setComparator(item, new RatingComparator());
+ return false;
+ case MENU_SORT_VOTE:
+ setComparator(item, new VoteComparator());
+ return false;
+ case MENU_SORT_INVENTORY:
+ setComparator(item, new InventoryComparator());
+ return false;
+ case MENU_SORT_DATE:
+ setComparator(item, new DateComparator());
+ return true;
+ case MENU_SORT_FINDS:
+ setComparator(item, new FindsComparator(app));
+ return true;
+ case MENU_SORT_STATE:
+ setComparator(item, new StateComparator());
+ return true;
+ case SUBMENU_FILTER_TYPE:
+ selectedFilter = res.getString(R.string.caches_filter_type);
+ openContextMenu(getListView());
+ return false;
+ case SUBMENU_FILTER_SIZE:
+ selectedFilter = res.getString(R.string.caches_filter_size);
+ openContextMenu(getListView());
+ return false;
+ case MENU_FILTER_TRACKABLES:
+ setFilter(new cgFilterByTrackables(res.getString(R.string.caches_filter_track)));
+ return false;
+ case MENU_FILTER_CLEAR:
+ if (adapter != null) {
+ setFilter(null);
+ }
+ return false;
+ case MENU_IMPORT_WEB:
+ importWeb();
+ return false;
+ case MENU_EXPORT_NOTES:
exportFieldNotes();
return false;
- case MENU_REMOVE_FROM_HISTORY:
+ case MENU_REMOVE_FROM_HISTORY:
removeFromHistoryCheck();
return false;
- case MENU_MOVE_TO_LIST:
- contextMenuMoveToList = true;
- openContextMenu(getListView());
- contextMenuMoveToList = false;
- return false;
- }
-
- return CacheListAppFactory.onMenuItemSelected(item, geo, cacheList, this, res, searchId);
- }
-
- private void setComparator(MenuItem item,
- CacheComparator comparator) {
- if (adapter != null) {
- adapter.setComparator(comparator);
- }
- item.setChecked(true);
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) {
- super.onCreateContextMenu(menu, view, info);
-
- if (adapter == null) {
- return;
- }
-
- if (contextMenuMoveToList) {
- createFakeContextMenuMoveToList(menu);
- return;
- }
-
- AdapterContextMenuInfo adapterInfo = null;
- try {
- adapterInfo = (AdapterContextMenuInfo) info;
- } catch (Exception e) {
- Log.w(cgSettings.tag, "cgeocaches.onCreateContextMenu: " + e.toString());
- }
-
- if ((adapterInfo == null || adapterInfo.position < 0) && selectedFilter != null){
- // Context menu opened by selecting an option on the filter submenu
-
- if (selectedFilter.equals(res.getString(R.string.caches_filter_size))) {
- menu.setHeaderTitle(res.getString(R.string.caches_filter_size_title));
- menu.add(0, MENU_FILTER_SIZE_MICRO, 0, res.getString(R.string.caches_filter_size_micro));
- menu.add(0, MENU_FILTER_SIZE_SMALL, 0, res.getString(R.string.caches_filter_size_small));
- menu.add(0, MENU_FILTER_SIZE_REGULAR, 0, res.getString(R.string.caches_filter_size_regular));
- menu.add(0, MENU_FILTER_SIZE_LARGE, 0, res.getString(R.string.caches_filter_size_large));
- menu.add(0, MENU_FILTER_SIZE_OTHER, 0, res.getString(R.string.caches_filter_size_other));
- menu.add(0, MENU_FILTER_SIZE_VIRTUAL, 0, res.getString(R.string.caches_filter_size_virtual));
- menu.add(0, MENU_FILTER_SIZE_NOT_CHOSEN, 0, res.getString(R.string.caches_filter_size_notchosen));
- } else if (selectedFilter.equals(res.getString(R.string.caches_filter_type))) {
- menu.setHeaderTitle(res.getString(R.string.caches_filter_type_title));
- menu.add(0, MENU_FILTER_TYPE_TRADITIONAL, 0, res.getString(R.string.caches_filter_type_traditional));
- menu.add(0, MENU_FILTER_TYPE_MULTI, 0, res.getString(R.string.caches_filter_type_multi));
- menu.add(0, MENU_FILTER_TYPE_MYSTERY, 0, res.getString(R.string.caches_filter_type_mystery));
- menu.add(0, MENU_FILTER_TYPE_LETTERBOX, 0, res.getString(R.string.caches_filter_type_letterbox));
- menu.add(0, MENU_FILTER_TYPE_EVENT, 0, res.getString(R.string.caches_filter_type_event));
- menu.add(0, MENU_FILTER_TYPE_MEGA, 0, res.getString(R.string.caches_filter_type_mega));
- menu.add(0, MENU_FILTER_TYPE_EARTH, 0, res.getString(R.string.caches_filter_type_earth));
- menu.add(0, MENU_FILTER_TYPE_CITO, 0, res.getString(R.string.caches_filter_type_cito));
- menu.add(0, MENU_FILTER_TYPE_WEBCAM, 0, res.getString(R.string.caches_filter_type_webcam));
- menu.add(0, MENU_FILTER_TYPE_VIRTUAL, 0, res.getString(R.string.caches_filter_type_virtual));
- menu.add(0, MENU_FILTER_TYPE_WHERIGO, 0, res.getString(R.string.caches_filter_type_wherigo));
- menu.add(0, MENU_FILTER_TYPE_LOSTFOUND, 0, res.getString(R.string.caches_filter_type_lostfound));
- menu.add(0, MENU_FILTER_TYPE_APE, 0, res.getString(R.string.caches_filter_type_ape));
- menu.add(0, MENU_FILTER_TYPE_GCHQ, 0, res.getString(R.string.caches_filter_type_gchq));
- menu.add(0, MENU_FILTER_TYPE_GPS, 0, res.getString(R.string.caches_filter_type_gps));
- }
- } else{
- if (adapterInfo.position >= adapter.getCount()) {
- return;
- }
- final cgCache cache = adapter.getItem(adapterInfo.position);
-
- if (StringUtils.isNotBlank(cache.name)) {
- menu.setHeaderTitle(cache.name);
- } else {
- menu.setHeaderTitle(cache.geocode);
- }
-
- if (cache.coords != null) {
- menu.add(0, MENU_COMPASS, 0, res.getString(R.string.cache_menu_compass));
- SubMenu subMenu = menu.addSubMenu(1, 0, 0, res.getString(R.string.cache_menu_navigate)).setIcon(android.R.drawable.ic_menu_more);
- NavigationAppFactory.addMenuItems(subMenu, this, res);
- addVisitMenu(menu, cache);
-// String label = settings.getLogOffline()? res.getString(R.string.cache_menu_visit_offline) : res.getString(R.string.cache_menu_visit);
-// menu.add(0, MENU_LOG_VISIT, 0, label);
- menu.add(0, MENU_CACHE_DETAILS, 0, res.getString(R.string.cache_menu_details));
- }
- if (cache.reason >= 1) {
- menu.add(0, MENU_DROP_CACHE, 0, res.getString(R.string.cache_offline_drop));
- List<cgList> cacheLists = app.getLists();
- int listCount = cacheLists.size();
- if (listCount > 1) {
- SubMenu submenu = menu.addSubMenu(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list));
- for (int i = 0; i < listCount; i++) {
- cgList list = cacheLists.get(i);
- submenu.add(Menu.NONE, CONTEXT_MENU_MOVE_TO_LIST + list.id, Menu.NONE, list.title);
- }
- }
- }
- }
- }
-
- private void createFakeContextMenuMoveToList(ContextMenu menu) {
- List<cgList> cacheLists = app.getLists();
- int listCount = cacheLists.size();
- menu.setHeaderTitle(res.getString(R.string.cache_menu_move_list));
- for (int i = 0; i < listCount; i++) {
- cgList list = cacheLists.get(i);
- menu.add(Menu.NONE, MENU_MOVE_SELECTED_OR_ALL_TO_LIST + list.id, Menu.NONE, list.title);
- }
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- final int id = item.getItemId();
- ContextMenu.ContextMenuInfo info = item.getMenuInfo();
-
- // restore menu info for sub menu items, see
- // https://code.google.com/p/android/issues/detail?id=7139
- if (info == null) {
- info = lastMenuInfo;
- lastMenuInfo = null;
- }
-
- AdapterContextMenuInfo adapterInfo = null;
- try {
- adapterInfo = (AdapterContextMenuInfo) info;
- } catch (Exception e) {
- Log.w(cgSettings.tag, "cgeocaches.onContextItemSelected: " + e.toString());
- }
-
- // the context menu may be invoked for the cache or for the filter list
- int touchedPos = -1;
- cgCache cache = null;
- if (adapterInfo != null) {
- touchedPos = adapterInfo.position;
- if (touchedPos < adapter.getCount()) {
- cache = adapter.getItem(touchedPos);
- }
- }
-
- if (id == MENU_COMPASS) {
- Intent navigateIntent = new Intent(this, cgeonavigate.class);
- navigateIntent.putExtra("latitude", cache.coords.getLatitude());
- navigateIntent.putExtra("longitude", cache.coords.getLongitude());
- navigateIntent.putExtra("geocode", cache.geocode.toUpperCase());
- navigateIntent.putExtra("name", cache.name);
-
- startActivity(navigateIntent);
-
- return true;
- } else if (id == MENU_LOG_VISIT) {
- return cache.logVisit(this);
- } else if (id == MENU_CACHE_DETAILS) {
- Intent cachesIntent = new Intent(this, cgeodetail.class);
- cachesIntent.putExtra("geocode", cache.geocode.toUpperCase());
- cachesIntent.putExtra("name", cache.name);
- startActivity(cachesIntent);
-
- return true;
- }
- else if (id == MENU_FILTER_SIZE_MICRO) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_micro)));
- } else if (id == MENU_FILTER_SIZE_SMALL) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_small)));
- } else if (id == MENU_FILTER_SIZE_REGULAR) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_regular)));
- } else if (id == MENU_FILTER_SIZE_LARGE) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_large)));
- } else if (id == MENU_FILTER_SIZE_OTHER) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_other)));
- } else if (id == MENU_FILTER_SIZE_VIRTUAL) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_virtual)));
- } else if (id == MENU_FILTER_SIZE_NOT_CHOSEN) {
- return setFilter(new cgFilterBySize(
- res.getString(R.string.caches_filter_size_notchosen)));
- } else if (id == MENU_FILTER_TYPE_TRADITIONAL) {
- return setFilter(new cgFilterByType("traditional"));
- } else if (id == MENU_FILTER_TYPE_MULTI) {
- return setFilter(new cgFilterByType("multi"));
- } else if (id == MENU_FILTER_TYPE_MYSTERY) {
- return setFilter(new cgFilterByType("mystery"));
- } else if (id == MENU_FILTER_TYPE_LETTERBOX) {
- return setFilter(new cgFilterByType("letterbox"));
- } else if (id == MENU_FILTER_TYPE_EVENT) {
- return setFilter(new cgFilterByType("event"));
- } else if (id == MENU_FILTER_TYPE_MEGA) {
- return setFilter(new cgFilterByType("mega"));
- } else if (id == MENU_FILTER_TYPE_EARTH) {
- return setFilter(new cgFilterByType("earth"));
- } else if (id == MENU_FILTER_TYPE_CITO) {
- return setFilter(new cgFilterByType("cito"));
- } else if (id == MENU_FILTER_TYPE_WEBCAM) {
- return setFilter(new cgFilterByType("webcam"));
- } else if (id == MENU_FILTER_TYPE_VIRTUAL) {
- return setFilter(new cgFilterByType("virtual"));
- } else if (id == MENU_FILTER_TYPE_WHERIGO) {
- return setFilter(new cgFilterByType("wherigo"));
- } else if (id == MENU_FILTER_TYPE_LOSTFOUND) {
- return setFilter(new cgFilterByType("lostfound"));
- } else if (id == MENU_FILTER_TYPE_APE) {
- return setFilter(new cgFilterByType("ape"));
- } else if (id == MENU_FILTER_TYPE_GCHQ) {
- return setFilter(new cgFilterByType("gchq"));
- } else if (id == MENU_FILTER_TYPE_GPS) {
- return setFilter(new cgFilterByType("gps"));
- } else if (id == MENU_DROP_CACHE) {
- cgBase.dropCache(app, this, cache, new Handler() {
- @Override
- public void handleMessage(Message msg) {
- refreshCurrentList();
- }
- });
- return true;
- } else if (id >= CONTEXT_MENU_MOVE_TO_LIST && id < CONTEXT_MENU_MOVE_TO_LIST + 100) {
- int newListId = id - CONTEXT_MENU_MOVE_TO_LIST;
- if (cache != null) {
- app.moveToList(cache.geocode, newListId);
- }
- adapter.resetChecks();
-
- refreshCurrentList();
- return true;
- } else if (id >= MENU_MOVE_SELECTED_OR_ALL_TO_LIST && id < MENU_MOVE_SELECTED_OR_ALL_TO_LIST + 100) {
- int newListId = id - MENU_MOVE_SELECTED_OR_ALL_TO_LIST;
- boolean moveAll = adapter.getChecked() == 0;
- final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
- for (cgCache c : cacheListTemp) {
- if (moveAll || c.statusChecked) {
- app.moveToList(c.geocode, newListId);
- }
- }
- adapter.resetChecks();
-
- refreshCurrentList();
- return true;
- }
-
- // we must remember the menu info for the sub menu, there is a bug
- // in Android:
- // https://code.google.com/p/android/issues/detail?id=7139
- lastMenuInfo = info;
-
- if (cache != null) {
- // create a searchId for a single cache (as if in details view)
- Map<String, String> params = new HashMap<String, String>();
- params.put("geocode", cache.geocode);
- final UUID singleSearchId = base.searchByGeocode(params, 0, false);
-
- if (NavigationAppFactory.onMenuItemSelected(item, geo, this,
- res, cache, singleSearchId, null, null)) {
- return true;
- }
-
- int logType = id - MENU_LOG_VISIT_OFFLINE;
- cache.logOffline(this, logType, settings, base);
- }
- return true;
- }
-
- private boolean setFilter(cgFilter filter) {
- if (adapter != null) {
- adapter.setFilter(filter);
- prepareFilterBar();
- return true;
- }
- return false;
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (adapter != null) {
- if (adapter.resetChecks()) {
- return true;
- } else if (adapter.getSelectMode()) {
- adapter.setSelectMode(false, true);
- return true;
- }
- }
- }
- return super.onKeyDown(keyCode, event);
- }
-
-
- private void setAdapter() {
- if (listFooter == null) {
- if (inflater == null) {
- inflater = getLayoutInflater();
- }
- listFooter = inflater.inflate(R.layout.caches_footer, null);
-
- listFooter.setClickable(true);
- listFooter.setOnClickListener(new moreCachesListener());
- }
- if (listFooterText == null) {
- listFooterText = (TextView) listFooter.findViewById(R.id.more_caches);
- }
-
- if (adapter == null) {
- final ListView list = getListView();
-
- registerForContextMenu(list);
- list.setLongClickable(true);
- list.addFooterView(listFooter);
-
- adapter = new cgCacheListAdapter(this, settings, cacheList, base);
- setListAdapter(adapter);
- } else {
- adapter.notifyDataSetChanged();
- }
- adapter.reFilter();
-
- if (geo != null) {
- adapter.setActualCoordinates(geo.coordsNow);
- }
- if (dir != null) {
- adapter.setActualHeading(dir.directionNow);
- }
- }
-
- private void setLoadingCaches() {
- if (listFooter == null) {
- return;
- }
- if (listFooterText == null) {
- return;
- }
-
- listFooterText.setText(res.getString(R.string.caches_more_caches_loading));
- listFooter.setClickable(false);
- listFooter.setOnClickListener(null);
- }
-
- private void setMoreCaches(boolean more) {
- if (listFooter == null) {
- return;
- }
- if (listFooterText == null) {
- return;
- }
-
- if (more == false) {
- if (CollectionUtils.isEmpty(cacheList)) {
- listFooterText.setText(res.getString(R.string.caches_no_cache));
- } else {
- listFooterText.setText(res.getString(R.string.caches_more_caches_no));
- }
- listFooter.setClickable(false);
- listFooter.setOnClickListener(null);
- } else {
- listFooterText.setText(res.getString(R.string.caches_more_caches));
- listFooter.setClickable(true);
- listFooter.setOnClickListener(new moreCachesListener());
- }
- }
-
- private void init() {
- // sensor & geolocation manager
- if (geo == null) {
- geo = app.startGeo(this, geoUpdate, base, settings, 0, 0);
- }
- if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
- dir = app.startDir(this, dirUpdate);
- }
-
- if (cacheList != null) {
- setTitle(title);
- }
-
- if (CollectionUtils.isNotEmpty(cacheList)) {
- final Integer count = app.getTotal(searchId);
- if (count != null && count > 0) {
- setTitle(title);
- if (cacheList.size() < app.getTotal(searchId) && cacheList.size() < MAX_LIST_ITEMS) {
- setMoreCaches(true);
- } else {
- setMoreCaches(false);
- }
- } else {
- setTitle(title);
- setMoreCaches(false);
- }
- } else {
- setTitle(title);
- }
-
- setAdapter();
-
- if (geo != null) {
- geoUpdate.updateLoc(geo);
- }
- if (dir != null) {
- dirUpdate.updateDir(dir);
- }
- }
-
- private void importGpx() {
- cgeogpxes.startSubActivity(this, listId);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- refreshCurrentList();
- }
-
- public void refreshStored() {
- if (adapter != null && adapter.getChecked() > 0) {
- // there are some checked caches
- detailTotal = adapter.getChecked();
- } else {
- // no checked caches, download everything (when already stored - refresh them)
- detailTotal = cacheList.size();
- }
- detailProgress = 0;
-
- showProgress(false);
- waitDialog = new ProgressDialog(this);
- waitDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
-
- public void onCancel(DialogInterface arg0) {
- try {
- if (threadD != null) {
- threadD.kill();
- }
-
- if (geo == null) {
- geo = app.startGeo(cgeocaches.this, geoUpdate, base, settings, 0, 0);
- }
- if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
- dir = app.startDir(cgeocaches.this, dirUpdate);
- }
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.onOptionsItemSelected.onCancel: " + e.toString());
- }
- }
- });
-
- waitDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- int etaTime = (int) ((detailTotal * 25) / 60);
- if (etaTime < 1) {
- waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + res.getString(R.string.caches_eta_ltm));
- } else if (etaTime == 1) {
- waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + etaTime + " " + res.getString(R.string.caches_eta_min));
- } else {
- waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + etaTime + " " + res.getString(R.string.caches_eta_mins));
- }
- waitDialog.setCancelable(true);
- waitDialog.setMax(detailTotal);
- waitDialog.show();
-
- detailProgressTime = System.currentTimeMillis();
-
- threadD = new geocachesLoadDetails(loadDetailsHandler, listId);
- threadD.start();
- }
-
- public void removeFromHistoryCheck()
+ case MENU_MOVE_TO_LIST:
+ contextMenuMoveToList = true;
+ openContextMenu(getListView());
+ contextMenuMoveToList = false;
+ return false;
+ }
+
+ return CacheListAppFactory.onMenuItemSelected(item, geo, cacheList, this, res, searchId);
+ }
+
+ private void setComparator(MenuItem item,
+ CacheComparator comparator) {
+ if (adapter != null) {
+ adapter.setComparator(comparator);
+ }
+ item.setChecked(true);
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) {
+ super.onCreateContextMenu(menu, view, info);
+
+ if (adapter == null) {
+ return;
+ }
+
+ if (contextMenuMoveToList) {
+ createFakeContextMenuMoveToList(menu);
+ return;
+ }
+
+ AdapterContextMenuInfo adapterInfo = null;
+ try {
+ adapterInfo = (AdapterContextMenuInfo) info;
+ } catch (Exception e) {
+ Log.w(cgSettings.tag, "cgeocaches.onCreateContextMenu: " + e.toString());
+ }
+
+ if ((adapterInfo == null || adapterInfo.position < 0) && selectedFilter != null) {
+ // Context menu opened by selecting an option on the filter submenu
+
+ if (selectedFilter.equals(res.getString(R.string.caches_filter_size))) {
+ menu.setHeaderTitle(res.getString(R.string.caches_filter_size_title));
+ menu.add(0, MENU_FILTER_SIZE_MICRO, 0, res.getString(R.string.caches_filter_size_micro));
+ menu.add(0, MENU_FILTER_SIZE_SMALL, 0, res.getString(R.string.caches_filter_size_small));
+ menu.add(0, MENU_FILTER_SIZE_REGULAR, 0, res.getString(R.string.caches_filter_size_regular));
+ menu.add(0, MENU_FILTER_SIZE_LARGE, 0, res.getString(R.string.caches_filter_size_large));
+ menu.add(0, MENU_FILTER_SIZE_OTHER, 0, res.getString(R.string.caches_filter_size_other));
+ menu.add(0, MENU_FILTER_SIZE_VIRTUAL, 0, res.getString(R.string.caches_filter_size_virtual));
+ menu.add(0, MENU_FILTER_SIZE_NOT_CHOSEN, 0, res.getString(R.string.caches_filter_size_notchosen));
+ } else if (selectedFilter.equals(res.getString(R.string.caches_filter_type))) {
+ menu.setHeaderTitle(res.getString(R.string.caches_filter_type_title));
+ menu.add(0, MENU_FILTER_TYPE_TRADITIONAL, 0, res.getString(R.string.caches_filter_type_traditional));
+ menu.add(0, MENU_FILTER_TYPE_MULTI, 0, res.getString(R.string.caches_filter_type_multi));
+ menu.add(0, MENU_FILTER_TYPE_MYSTERY, 0, res.getString(R.string.caches_filter_type_mystery));
+ menu.add(0, MENU_FILTER_TYPE_LETTERBOX, 0, res.getString(R.string.caches_filter_type_letterbox));
+ menu.add(0, MENU_FILTER_TYPE_EVENT, 0, res.getString(R.string.caches_filter_type_event));
+ menu.add(0, MENU_FILTER_TYPE_MEGA, 0, res.getString(R.string.caches_filter_type_mega));
+ menu.add(0, MENU_FILTER_TYPE_EARTH, 0, res.getString(R.string.caches_filter_type_earth));
+ menu.add(0, MENU_FILTER_TYPE_CITO, 0, res.getString(R.string.caches_filter_type_cito));
+ menu.add(0, MENU_FILTER_TYPE_WEBCAM, 0, res.getString(R.string.caches_filter_type_webcam));
+ menu.add(0, MENU_FILTER_TYPE_VIRTUAL, 0, res.getString(R.string.caches_filter_type_virtual));
+ menu.add(0, MENU_FILTER_TYPE_WHERIGO, 0, res.getString(R.string.caches_filter_type_wherigo));
+ menu.add(0, MENU_FILTER_TYPE_LOSTFOUND, 0, res.getString(R.string.caches_filter_type_lostfound));
+ menu.add(0, MENU_FILTER_TYPE_APE, 0, res.getString(R.string.caches_filter_type_ape));
+ menu.add(0, MENU_FILTER_TYPE_GCHQ, 0, res.getString(R.string.caches_filter_type_gchq));
+ menu.add(0, MENU_FILTER_TYPE_GPS, 0, res.getString(R.string.caches_filter_type_gps));
+ }
+ } else {
+ if (adapterInfo.position >= adapter.getCount()) {
+ return;
+ }
+ final cgCache cache = adapter.getItem(adapterInfo.position);
+
+ if (StringUtils.isNotBlank(cache.name)) {
+ menu.setHeaderTitle(cache.name);
+ } else {
+ menu.setHeaderTitle(cache.geocode);
+ }
+
+ if (cache.coords != null) {
+ menu.add(0, MENU_COMPASS, 0, res.getString(R.string.cache_menu_compass));
+ SubMenu subMenu = menu.addSubMenu(1, 0, 0, res.getString(R.string.cache_menu_navigate)).setIcon(android.R.drawable.ic_menu_more);
+ NavigationAppFactory.addMenuItems(subMenu, this, res);
+ addVisitMenu(menu, cache);
+ // String label = settings.getLogOffline()? res.getString(R.string.cache_menu_visit_offline) : res.getString(R.string.cache_menu_visit);
+ // menu.add(0, MENU_LOG_VISIT, 0, label);
+ menu.add(0, MENU_CACHE_DETAILS, 0, res.getString(R.string.cache_menu_details));
+ }
+ if (cache.reason >= 1) {
+ menu.add(0, MENU_DROP_CACHE, 0, res.getString(R.string.cache_offline_drop));
+ List<cgList> cacheLists = app.getLists();
+ int listCount = cacheLists.size();
+ if (listCount > 1) {
+ SubMenu submenu = menu.addSubMenu(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list));
+ for (int i = 0; i < listCount; i++) {
+ cgList list = cacheLists.get(i);
+ submenu.add(Menu.NONE, CONTEXT_MENU_MOVE_TO_LIST + list.id, Menu.NONE, list.title);
+ }
+ }
+ }
+ }
+ }
+
+ private void createFakeContextMenuMoveToList(ContextMenu menu) {
+ List<cgList> cacheLists = app.getLists();
+ int listCount = cacheLists.size();
+ menu.setHeaderTitle(res.getString(R.string.cache_menu_move_list));
+ for (int i = 0; i < listCount; i++) {
+ cgList list = cacheLists.get(i);
+ menu.add(Menu.NONE, MENU_MOVE_SELECTED_OR_ALL_TO_LIST + list.id, Menu.NONE, list.title);
+ }
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ final int id = item.getItemId();
+ ContextMenu.ContextMenuInfo info = item.getMenuInfo();
+
+ // restore menu info for sub menu items, see
+ // https://code.google.com/p/android/issues/detail?id=7139
+ if (info == null) {
+ info = lastMenuInfo;
+ lastMenuInfo = null;
+ }
+
+ AdapterContextMenuInfo adapterInfo = null;
+ try {
+ adapterInfo = (AdapterContextMenuInfo) info;
+ } catch (Exception e) {
+ Log.w(cgSettings.tag, "cgeocaches.onContextItemSelected: " + e.toString());
+ }
+
+ // the context menu may be invoked for the cache or for the filter list
+ int touchedPos = -1;
+ cgCache cache = null;
+ if (adapterInfo != null) {
+ touchedPos = adapterInfo.position;
+ if (touchedPos < adapter.getCount()) {
+ cache = adapter.getItem(touchedPos);
+ }
+ }
+
+ if (id == MENU_COMPASS) {
+ Intent navigateIntent = new Intent(this, cgeonavigate.class);
+ navigateIntent.putExtra("latitude", cache.coords.getLatitude());
+ navigateIntent.putExtra("longitude", cache.coords.getLongitude());
+ navigateIntent.putExtra("geocode", cache.geocode.toUpperCase());
+ navigateIntent.putExtra("name", cache.name);
+
+ startActivity(navigateIntent);
+
+ return true;
+ } else if (id == MENU_LOG_VISIT) {
+ return cache.logVisit(this);
+ } else if (id == MENU_CACHE_DETAILS) {
+ Intent cachesIntent = new Intent(this, cgeodetail.class);
+ cachesIntent.putExtra("geocode", cache.geocode.toUpperCase());
+ cachesIntent.putExtra("name", cache.name);
+ startActivity(cachesIntent);
+
+ return true;
+ }
+ else if (id == MENU_FILTER_SIZE_MICRO) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_micro)));
+ } else if (id == MENU_FILTER_SIZE_SMALL) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_small)));
+ } else if (id == MENU_FILTER_SIZE_REGULAR) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_regular)));
+ } else if (id == MENU_FILTER_SIZE_LARGE) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_large)));
+ } else if (id == MENU_FILTER_SIZE_OTHER) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_other)));
+ } else if (id == MENU_FILTER_SIZE_VIRTUAL) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_virtual)));
+ } else if (id == MENU_FILTER_SIZE_NOT_CHOSEN) {
+ return setFilter(new cgFilterBySize(
+ res.getString(R.string.caches_filter_size_notchosen)));
+ } else if (id == MENU_FILTER_TYPE_TRADITIONAL) {
+ return setFilter(new cgFilterByType("traditional"));
+ } else if (id == MENU_FILTER_TYPE_MULTI) {
+ return setFilter(new cgFilterByType("multi"));
+ } else if (id == MENU_FILTER_TYPE_MYSTERY) {
+ return setFilter(new cgFilterByType("mystery"));
+ } else if (id == MENU_FILTER_TYPE_LETTERBOX) {
+ return setFilter(new cgFilterByType("letterbox"));
+ } else if (id == MENU_FILTER_TYPE_EVENT) {
+ return setFilter(new cgFilterByType("event"));
+ } else if (id == MENU_FILTER_TYPE_MEGA) {
+ return setFilter(new cgFilterByType("mega"));
+ } else if (id == MENU_FILTER_TYPE_EARTH) {
+ return setFilter(new cgFilterByType("earth"));
+ } else if (id == MENU_FILTER_TYPE_CITO) {
+ return setFilter(new cgFilterByType("cito"));
+ } else if (id == MENU_FILTER_TYPE_WEBCAM) {
+ return setFilter(new cgFilterByType("webcam"));
+ } else if (id == MENU_FILTER_TYPE_VIRTUAL) {
+ return setFilter(new cgFilterByType("virtual"));
+ } else if (id == MENU_FILTER_TYPE_WHERIGO) {
+ return setFilter(new cgFilterByType("wherigo"));
+ } else if (id == MENU_FILTER_TYPE_LOSTFOUND) {
+ return setFilter(new cgFilterByType("lostfound"));
+ } else if (id == MENU_FILTER_TYPE_APE) {
+ return setFilter(new cgFilterByType("ape"));
+ } else if (id == MENU_FILTER_TYPE_GCHQ) {
+ return setFilter(new cgFilterByType("gchq"));
+ } else if (id == MENU_FILTER_TYPE_GPS) {
+ return setFilter(new cgFilterByType("gps"));
+ } else if (id == MENU_DROP_CACHE) {
+ cgBase.dropCache(app, this, cache, new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ refreshCurrentList();
+ }
+ });
+ return true;
+ } else if (id >= CONTEXT_MENU_MOVE_TO_LIST && id < CONTEXT_MENU_MOVE_TO_LIST + 100) {
+ int newListId = id - CONTEXT_MENU_MOVE_TO_LIST;
+ if (cache != null) {
+ app.moveToList(cache.geocode, newListId);
+ }
+ adapter.resetChecks();
+
+ refreshCurrentList();
+ return true;
+ } else if (id >= MENU_MOVE_SELECTED_OR_ALL_TO_LIST && id < MENU_MOVE_SELECTED_OR_ALL_TO_LIST + 100) {
+ int newListId = id - MENU_MOVE_SELECTED_OR_ALL_TO_LIST;
+ boolean moveAll = adapter.getChecked() == 0;
+ final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
+ for (cgCache c : cacheListTemp) {
+ if (moveAll || c.statusChecked) {
+ app.moveToList(c.geocode, newListId);
+ }
+ }
+ adapter.resetChecks();
+
+ refreshCurrentList();
+ return true;
+ }
+
+ // we must remember the menu info for the sub menu, there is a bug
+ // in Android:
+ // https://code.google.com/p/android/issues/detail?id=7139
+ lastMenuInfo = info;
+
+ if (cache != null) {
+ // create a searchId for a single cache (as if in details view)
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("geocode", cache.geocode);
+ final UUID singleSearchId = base.searchByGeocode(params, 0, false);
+
+ if (NavigationAppFactory.onMenuItemSelected(item, geo, this,
+ res, cache, singleSearchId, null, null)) {
+ return true;
+ }
+
+ int logType = id - MENU_LOG_VISIT_OFFLINE;
+ cache.logOffline(this, logType, settings, base);
+ }
+ return true;
+ }
+
+ private boolean setFilter(cgFilter filter) {
+ if (adapter != null) {
+ adapter.setFilter(filter);
+ prepareFilterBar();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (adapter != null) {
+ if (adapter.resetChecks()) {
+ return true;
+ } else if (adapter.getSelectMode()) {
+ adapter.setSelectMode(false, true);
+ return true;
+ }
+ }
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ private void setAdapter() {
+ if (listFooter == null) {
+ if (inflater == null) {
+ inflater = getLayoutInflater();
+ }
+ listFooter = inflater.inflate(R.layout.caches_footer, null);
+
+ listFooter.setClickable(true);
+ listFooter.setOnClickListener(new moreCachesListener());
+ }
+ if (listFooterText == null) {
+ listFooterText = (TextView) listFooter.findViewById(R.id.more_caches);
+ }
+
+ if (adapter == null) {
+ final ListView list = getListView();
+
+ registerForContextMenu(list);
+ list.setLongClickable(true);
+ list.addFooterView(listFooter);
+
+ adapter = new cgCacheListAdapter(this, settings, cacheList, base);
+ setListAdapter(adapter);
+ } else {
+ adapter.notifyDataSetChanged();
+ }
+ adapter.reFilter();
+
+ if (geo != null) {
+ adapter.setActualCoordinates(geo.coordsNow);
+ }
+ if (dir != null) {
+ adapter.setActualHeading(dir.directionNow);
+ }
+ }
+
+ private void setLoadingCaches() {
+ if (listFooter == null) {
+ return;
+ }
+ if (listFooterText == null) {
+ return;
+ }
+
+ listFooterText.setText(res.getString(R.string.caches_more_caches_loading));
+ listFooter.setClickable(false);
+ listFooter.setOnClickListener(null);
+ }
+
+ private void setMoreCaches(boolean more) {
+ if (listFooter == null) {
+ return;
+ }
+ if (listFooterText == null) {
+ return;
+ }
+
+ if (more == false) {
+ if (CollectionUtils.isEmpty(cacheList)) {
+ listFooterText.setText(res.getString(R.string.caches_no_cache));
+ } else {
+ listFooterText.setText(res.getString(R.string.caches_more_caches_no));
+ }
+ listFooter.setClickable(false);
+ listFooter.setOnClickListener(null);
+ } else {
+ listFooterText.setText(res.getString(R.string.caches_more_caches));
+ listFooter.setClickable(true);
+ listFooter.setOnClickListener(new moreCachesListener());
+ }
+ }
+
+ private void init() {
+ // sensor & geolocation manager
+ if (geo == null) {
+ geo = app.startGeo(this, geoUpdate, base, settings, 0, 0);
+ }
+ if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
+ dir = app.startDir(this, dirUpdate);
+ }
+
+ if (cacheList != null) {
+ setTitle(title);
+ }
+
+ if (CollectionUtils.isNotEmpty(cacheList)) {
+ final Integer count = app.getTotal(searchId);
+ if (count != null && count > 0) {
+ setTitle(title);
+ if (cacheList.size() < app.getTotal(searchId) && cacheList.size() < MAX_LIST_ITEMS) {
+ setMoreCaches(true);
+ } else {
+ setMoreCaches(false);
+ }
+ } else {
+ setTitle(title);
+ setMoreCaches(false);
+ }
+ } else {
+ setTitle(title);
+ }
+
+ setAdapter();
+
+ if (geo != null) {
+ geoUpdate.updateLoc(geo);
+ }
+ if (dir != null) {
+ dirUpdate.updateDir(dir);
+ }
+ }
+
+ private void importGpx() {
+ cgeogpxes.startSubActivity(this, listId);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ refreshCurrentList();
+ }
+
+ public void refreshStored() {
+ if (adapter != null && adapter.getChecked() > 0) {
+ // there are some checked caches
+ detailTotal = adapter.getChecked();
+ } else {
+ // no checked caches, download everything (when already stored - refresh them)
+ detailTotal = cacheList.size();
+ }
+ detailProgress = 0;
+
+ showProgress(false);
+ waitDialog = new ProgressDialog(this);
+ waitDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+
+ public void onCancel(DialogInterface arg0) {
+ try {
+ if (threadD != null) {
+ threadD.kill();
+ }
+
+ if (geo == null) {
+ geo = app.startGeo(cgeocaches.this, geoUpdate, base, settings, 0, 0);
+ }
+ if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
+ dir = app.startDir(cgeocaches.this, dirUpdate);
+ }
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.onOptionsItemSelected.onCancel: " + e.toString());
+ }
+ }
+ });
+
+ waitDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ int etaTime = (int) ((detailTotal * 25) / 60);
+ if (etaTime < 1) {
+ waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + res.getString(R.string.caches_eta_ltm));
+ } else if (etaTime == 1) {
+ waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + etaTime + " " + res.getString(R.string.caches_eta_min));
+ } else {
+ waitDialog.setMessage(res.getString(R.string.caches_downloading) + " " + etaTime + " " + res.getString(R.string.caches_eta_mins));
+ }
+ waitDialog.setCancelable(true);
+ waitDialog.setMax(detailTotal);
+ waitDialog.show();
+
+ detailProgressTime = System.currentTimeMillis();
+
+ threadD = new geocachesLoadDetails(loadDetailsHandler, listId);
+ threadD.start();
+ }
+
+ public void removeFromHistoryCheck()
{
- AlertDialog.Builder dialog = new AlertDialog.Builder(this);
+ AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setCancelable(true);
dialog.setTitle(res.getString(R.string.caches_removing_from_history));
dialog.setMessage((adapter != null && adapter.getChecked() > 0) ? res.getString(R.string.cache_remove_from_history)
- : res.getString(R.string.cache_clear_history));
+ : res.getString(R.string.cache_clear_history));
dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
removeFromHistory();
@@ -1565,8 +1565,8 @@ public class cgeocaches extends AbstractListActivity {
threadH.start();
}
- public void exportFieldNotes()
- {
+ public void exportFieldNotes()
+ {
if (adapter != null && adapter.getChecked() > 0)
{
// there are some checked caches
@@ -1609,586 +1609,586 @@ public class cgeocaches extends AbstractListActivity {
threadF.start();
}
- public void importWeb() {
- detailProgress = 0;
-
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- showProgress(false);
- waitDialog = new ProgressDialog(this);
- waitDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
-
- public void onCancel(DialogInterface arg0) {
- try {
- if (threadW != null) {
- threadW.kill();
- }
-
- if (geo == null) {
- geo = app.startGeo(cgeocaches.this, geoUpdate, base, settings, 0, 0);
- }
- if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
- dir = app.startDir(cgeocaches.this, dirUpdate);
- }
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.importWeb.onCancel: " + e.toString());
- }
- }
- });
-
- waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
- waitDialog.setMessage(res.getString(R.string.web_import_waiting));
- waitDialog.setCancelable(true);
- waitDialog.show();
-
- threadW = new geocachesLoadFromWeb(downloadFromWebHandler, listId);
- threadW.start();
- }
-
- public void dropStored() {
- AlertDialog.Builder dialog = new AlertDialog.Builder(this);
- dialog.setCancelable(true);
- dialog.setTitle(res.getString(R.string.caches_drop_stored));
-
- if (adapter != null && adapter.getChecked() > 0) {
- dialog.setMessage(res.getString(R.string.caches_drop_selected_ask));
- dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int id) {
- dropSelected();
- dialog.cancel();
- }
- });
- } else {
- dialog.setMessage(res.getString(R.string.caches_drop_all_ask));
- dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int id) {
- dropSelected();
- dialog.cancel();
- }
- });
- }
- dialog.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() {
-
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
-
- AlertDialog alert = dialog.create();
- alert.show();
- }
-
- public void dropSelected() {
- waitDialog = new ProgressDialog(this);
- waitDialog.setMessage(res.getString(R.string.caches_drop_progress));
- waitDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
-
- public void onCancel(DialogInterface arg0) {
- try {
- if (threadR != null) {
- threadR.kill();
- }
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.onOptionsItemSelected.onCancel: " + e.toString());
- }
- }
- });
-
- waitDialog.setCancelable(true);
- waitDialog.show();
-
- threadR = new geocachesDropDetails(dropDetailsHandler);
- threadR.start();
- }
-
- private class update extends cgUpdateLoc {
-
- @Override
- public void updateLoc(cgGeo geo) {
- if (geo == null) {
- return;
- }
- if (adapter == null) {
- return;
- }
-
- try {
- if (cacheList != null && geo.coordsNow != null) {
- adapter.setActualCoordinates(geo.coordsNow);
- }
-
- if (settings.useCompass == 0 || (geo.speedNow != null && geo.speedNow > 5)) { // use GPS when speed is higher than 18 km/h
- if (settings.useCompass == 0) {
- if (geo.bearingNow != null) {
- adapter.setActualHeading(geo.bearingNow);
- } else {
- adapter.setActualHeading(0f);
- }
- }
- if (northHeading != null) {
- adapter.setActualHeading(northHeading);
- }
- }
- } catch (Exception e) {
- Log.w(cgSettings.tag, "Failed to update location.");
- }
- }
- }
-
- private class UpdateDirection extends cgUpdateDir {
-
- @Override
- public void updateDir(cgDirection dir) {
- if (settings.livelist == 0) {
- return;
- }
- if (dir == null || dir.directionNow == null) {
- return;
- }
-
- northHeading = dir.directionNow;
- if (northHeading != null && adapter != null && (geo == null || geo.speedNow == null || geo.speedNow <= 5)) { // use compass when speed is lower than 18 km/h) {
- adapter.setActualHeading(northHeading);
- }
- }
- }
-
- private class geocachesLoadByOffline extends Thread {
-
- private Handler handler = null;
- private Geopoint coords = null;
- private int listId = 1;
-
- public geocachesLoadByOffline(Handler handlerIn, final Geopoint coordsIn, int listIdIn) {
- handler = handlerIn;
- coords = coordsIn;
- listId = listIdIn;
- }
-
- @Override
- public void run() {
- Map<String, Object> params = new HashMap<String, Object>();
- if (coords != null) {
- params.put("latitude", coords.getLatitude());
- params.put("longitude", coords.getLongitude());
- params.put("cachetype", settings.cacheType);
- params.put("list", listId);
- }
-
- searchId = base.searchByOffline(params);
-
- handler.sendMessage(new Message());
- }
- }
-
- private class geocachesLoadByHistory extends Thread {
-
- private Handler handler = null;
-
- public geocachesLoadByHistory(Handler handlerIn) {
- handler = handlerIn;
- }
-
- @Override
- public void run() {
- Map<String, Object> params = new HashMap<String, Object>();
- if (coords != null) {
- params.put("cachetype", settings.cacheType);
- }
-
- searchId = base.searchByHistory(params);
-
- handler.sendMessage(new Message());
- }
- }
-
- private class geocachesLoadNextPage extends cgSearchThread {
-
- private Handler handler = null;
-
- public geocachesLoadNextPage(Handler handlerIn) {
- handler = handlerIn;
- }
-
- @Override
- public void run() {
- searchId = base.searchByNextPage(this, searchId, 0, settings.showCaptcha);
-
- handler.sendMessage(new Message());
- }
- }
-
- private class geocachesLoadByCoords extends cgSearchThread {
-
- private Handler handler = null;
- private Geopoint coords = null;
- private String cachetype = null;
+ public void importWeb() {
+ detailProgress = 0;
+
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ showProgress(false);
+ waitDialog = new ProgressDialog(this);
+ waitDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+
+ public void onCancel(DialogInterface arg0) {
+ try {
+ if (threadW != null) {
+ threadW.kill();
+ }
+
+ if (geo == null) {
+ geo = app.startGeo(cgeocaches.this, geoUpdate, base, settings, 0, 0);
+ }
+ if (settings.livelist == 1 && settings.useCompass == 1 && dir == null) {
+ dir = app.startDir(cgeocaches.this, dirUpdate);
+ }
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.importWeb.onCancel: " + e.toString());
+ }
+ }
+ });
+
+ waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ waitDialog.setMessage(res.getString(R.string.web_import_waiting));
+ waitDialog.setCancelable(true);
+ waitDialog.show();
+
+ threadW = new geocachesLoadFromWeb(downloadFromWebHandler, listId);
+ threadW.start();
+ }
+
+ public void dropStored() {
+ AlertDialog.Builder dialog = new AlertDialog.Builder(this);
+ dialog.setCancelable(true);
+ dialog.setTitle(res.getString(R.string.caches_drop_stored));
+
+ if (adapter != null && adapter.getChecked() > 0) {
+ dialog.setMessage(res.getString(R.string.caches_drop_selected_ask));
+ dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int id) {
+ dropSelected();
+ dialog.cancel();
+ }
+ });
+ } else {
+ dialog.setMessage(res.getString(R.string.caches_drop_all_ask));
+ dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int id) {
+ dropSelected();
+ dialog.cancel();
+ }
+ });
+ }
+ dialog.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() {
+
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+
+ AlertDialog alert = dialog.create();
+ alert.show();
+ }
+
+ public void dropSelected() {
+ waitDialog = new ProgressDialog(this);
+ waitDialog.setMessage(res.getString(R.string.caches_drop_progress));
+ waitDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+
+ public void onCancel(DialogInterface arg0) {
+ try {
+ if (threadR != null) {
+ threadR.kill();
+ }
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.onOptionsItemSelected.onCancel: " + e.toString());
+ }
+ }
+ });
+
+ waitDialog.setCancelable(true);
+ waitDialog.show();
+
+ threadR = new geocachesDropDetails(dropDetailsHandler);
+ threadR.start();
+ }
+
+ private class update extends cgUpdateLoc {
+
+ @Override
+ public void updateLoc(cgGeo geo) {
+ if (geo == null) {
+ return;
+ }
+ if (adapter == null) {
+ return;
+ }
+
+ try {
+ if (cacheList != null && geo.coordsNow != null) {
+ adapter.setActualCoordinates(geo.coordsNow);
+ }
+
+ if (settings.useCompass == 0 || (geo.speedNow != null && geo.speedNow > 5)) { // use GPS when speed is higher than 18 km/h
+ if (settings.useCompass == 0) {
+ if (geo.bearingNow != null) {
+ adapter.setActualHeading(geo.bearingNow);
+ } else {
+ adapter.setActualHeading(0f);
+ }
+ }
+ if (northHeading != null) {
+ adapter.setActualHeading(northHeading);
+ }
+ }
+ } catch (Exception e) {
+ Log.w(cgSettings.tag, "Failed to update location.");
+ }
+ }
+ }
+
+ private class UpdateDirection extends cgUpdateDir {
+
+ @Override
+ public void updateDir(cgDirection dir) {
+ if (settings.livelist == 0) {
+ return;
+ }
+ if (dir == null || dir.directionNow == null) {
+ return;
+ }
+
+ northHeading = dir.directionNow;
+ if (northHeading != null && adapter != null && (geo == null || geo.speedNow == null || geo.speedNow <= 5)) { // use compass when speed is lower than 18 km/h) {
+ adapter.setActualHeading(northHeading);
+ }
+ }
+ }
+
+ private class geocachesLoadByOffline extends Thread {
- public geocachesLoadByCoords(Handler handlerIn, final Geopoint coordsIn, String cachetypeIn) {
- setPriority(Thread.MIN_PRIORITY);
+ private Handler handler = null;
+ private Geopoint coords = null;
+ private int listId = 1;
- handler = handlerIn;
- coords = coordsIn;
- cachetype = cachetypeIn;
+ public geocachesLoadByOffline(Handler handlerIn, final Geopoint coordsIn, int listIdIn) {
+ handler = handlerIn;
+ coords = coordsIn;
+ listId = listIdIn;
+ }
- if (coords == null) {
- showToast(res.getString(R.string.warn_no_coordinates));
+ @Override
+ public void run() {
+ Map<String, Object> params = new HashMap<String, Object>();
+ if (coords != null) {
+ params.put("latitude", coords.getLatitude());
+ params.put("longitude", coords.getLongitude());
+ params.put("cachetype", settings.cacheType);
+ params.put("list", listId);
+ }
- finish();
- return;
- }
- }
+ searchId = base.searchByOffline(params);
- @Override
- public void run() {
- Map<String, String> params = new HashMap<String, String>();
- params.put("latitude", String.format((Locale) null, "%.6f", coords.getLatitude()));
- params.put("longitude", String.format((Locale) null, "%.6f", coords.getLongitude()));
- params.put("cachetype", cachetype);
+ handler.sendMessage(new Message());
+ }
+ }
- searchId = base.searchByCoords(this, params, 0, settings.showCaptcha);
+ private class geocachesLoadByHistory extends Thread {
- handler.sendMessage(new Message());
- }
- }
+ private Handler handler = null;
- private class geocachesLoadByKeyword extends cgSearchThread {
+ public geocachesLoadByHistory(Handler handlerIn) {
+ handler = handlerIn;
+ }
- private Handler handler = null;
- private String keyword = null;
- private String cachetype = null;
+ @Override
+ public void run() {
+ Map<String, Object> params = new HashMap<String, Object>();
+ if (coords != null) {
+ params.put("cachetype", settings.cacheType);
+ }
- public geocachesLoadByKeyword(Handler handlerIn, String keywordIn, String cachetypeIn) {
- setPriority(Thread.MIN_PRIORITY);
+ searchId = base.searchByHistory(params);
- handler = handlerIn;
- keyword = keywordIn;
- cachetype = cachetypeIn;
+ handler.sendMessage(new Message());
+ }
+ }
- if (keyword == null) {
- showToast(res.getString(R.string.warn_no_keyword));
+ private class geocachesLoadNextPage extends cgSearchThread {
- finish();
- return;
- }
- }
+ private Handler handler = null;
- @Override
- public void run() {
- Map<String, String> params = new HashMap<String, String>();
- params.put("keyword", keyword);
- params.put("cachetype", cachetype);
+ public geocachesLoadNextPage(Handler handlerIn) {
+ handler = handlerIn;
+ }
- searchId = base.searchByKeyword(this, params, 0, settings.showCaptcha);
+ @Override
+ public void run() {
+ searchId = base.searchByNextPage(this, searchId, 0, settings.showCaptcha);
- handler.sendMessage(new Message());
- }
- }
+ handler.sendMessage(new Message());
+ }
+ }
- private class geocachesLoadByUserName extends cgSearchThread {
+ private class geocachesLoadByCoords extends cgSearchThread {
- private Handler handler = null;
- private String username = null;
- private String cachetype = null;
+ private Handler handler = null;
+ private Geopoint coords = null;
+ private String cachetype = null;
- public geocachesLoadByUserName(Handler handlerIn, String usernameIn, String cachetypeIn) {
- setPriority(Thread.MIN_PRIORITY);
+ public geocachesLoadByCoords(Handler handlerIn, final Geopoint coordsIn, String cachetypeIn) {
+ setPriority(Thread.MIN_PRIORITY);
- handler = handlerIn;
- username = usernameIn;
- cachetype = cachetypeIn;
+ handler = handlerIn;
+ coords = coordsIn;
+ cachetype = cachetypeIn;
- if (StringUtils.isBlank(username)) {
- showToast(res.getString(R.string.warn_no_username));
+ if (coords == null) {
+ showToast(res.getString(R.string.warn_no_coordinates));
- finish();
- return;
- }
- }
+ finish();
+ return;
+ }
+ }
- @Override
- public void run() {
- Map<String, String> params = new HashMap<String, String>();
- params.put("username", username);
- params.put("cachetype", cachetype);
+ @Override
+ public void run() {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("latitude", String.format((Locale) null, "%.6f", coords.getLatitude()));
+ params.put("longitude", String.format((Locale) null, "%.6f", coords.getLongitude()));
+ params.put("cachetype", cachetype);
- searchId = base.searchByUsername(this, params, 0, settings.showCaptcha);
+ searchId = base.searchByCoords(this, params, 0, settings.showCaptcha);
- handler.sendMessage(new Message());
- }
- }
+ handler.sendMessage(new Message());
+ }
+ }
- private class geocachesLoadByOwner extends cgSearchThread {
+ private class geocachesLoadByKeyword extends cgSearchThread {
- private Handler handler = null;
- private String username = null;
- private String cachetype = null;
+ private Handler handler = null;
+ private String keyword = null;
+ private String cachetype = null;
- public geocachesLoadByOwner(Handler handlerIn, String usernameIn, String cachetypeIn) {
- setPriority(Thread.MIN_PRIORITY);
+ public geocachesLoadByKeyword(Handler handlerIn, String keywordIn, String cachetypeIn) {
+ setPriority(Thread.MIN_PRIORITY);
- handler = handlerIn;
- username = usernameIn;
- cachetype = cachetypeIn;
+ handler = handlerIn;
+ keyword = keywordIn;
+ cachetype = cachetypeIn;
- if (StringUtils.isBlank(username)) {
- showToast(res.getString(R.string.warn_no_username));
-
- finish();
- return;
- }
- }
+ if (keyword == null) {
+ showToast(res.getString(R.string.warn_no_keyword));
- @Override
- public void run() {
- Map<String, String> params = new HashMap<String, String>();
- params.put("username", username);
- params.put("cachetype", cachetype);
+ finish();
+ return;
+ }
+ }
- searchId = base.searchByOwner(this, params, 0, settings.showCaptcha);
+ @Override
+ public void run() {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("keyword", keyword);
+ params.put("cachetype", cachetype);
- handler.sendMessage(new Message());
- }
- }
+ searchId = base.searchByKeyword(this, params, 0, settings.showCaptcha);
- private class geocachesLoadDetails extends Thread {
+ handler.sendMessage(new Message());
+ }
+ }
- private Handler handler = null;
- private int reason = 1;
- private volatile boolean needToStop = false;
- private int checked = 0;
- private long last = 0L;
-
- public geocachesLoadDetails(Handler handlerIn, int reasonIn) {
- setPriority(Thread.MIN_PRIORITY);
-
- handler = handlerIn;
- reason = reasonIn;
-
- if (adapter != null) {
- checked = adapter.getChecked();
- }
- }
-
- public void kill() {
- needToStop = true;
- }
-
- @Override
- public void run() {
- if (dir != null) {
- dir = app.removeDir();
- }
- if (geo != null) {
- geo = app.removeGeo();
- }
-
- final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
- for (cgCache cache : cacheListTemp) {
- if (checked > 0 && cache.statusChecked == false) {
- handler.sendEmptyMessage(0);
-
- yield();
- continue;
- }
-
- try {
- if (needToStop) {
- Log.i(cgSettings.tag, "Stopped storing process.");
- break;
- }
-
- if ((System.currentTimeMillis() - last) < 1500) {
- try {
- int delay = 1000 + ((Double) (Math.random() * 1000)).intValue() - (int) (System.currentTimeMillis() - last);
- if (delay < 0) {
- delay = 500;
- }
-
- Log.i(cgSettings.tag, "Waiting for next cache " + delay + " ms");
- sleep(delay);
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.geocachesLoadDetails.sleep: " + e.toString());
- }
- }
-
- if (needToStop) {
- Log.i(cgSettings.tag, "Stopped storing process.");
- break;
- }
-
- detailProgress++;
- base.storeCache(app, cgeocaches.this, cache, null, reason, null);
-
- handler.sendEmptyMessage(cacheList.indexOf(cache));
-
- yield();
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.geocachesLoadDetails: " + e.toString());
- }
-
- last = System.currentTimeMillis();
- }
- cacheListTemp.clear();
-
- handler.sendEmptyMessage(-1);
- }
- }
-
- private class geocachesLoadFromWeb extends Thread {
-
- private Handler handler = null;
- private int reason = 1;
- private volatile boolean needToStop = false;
-
- public geocachesLoadFromWeb(Handler handlerIn, int reasonIn) {
- setPriority(Thread.MIN_PRIORITY);
-
- handler = handlerIn;
- reason = reasonIn;
- }
-
- public void kill() {
- needToStop = true;
- }
-
- @Override
- public void run() {
- if (dir != null) {
- dir = app.removeDir();
- }
- if (geo != null) {
- geo = app.removeGeo();
- }
-
- int delay=-1;
- int times=0;
-
- while (times < 3 * 60 / 5) // maximum: 3 minutes, every 5 seconds
- {
- if (needToStop)
- {
- handler.sendEmptyMessage(-1);
- break;
- }
-
- //download new code
- String deviceCode = settings.webDeviceCode;
- if (deviceCode == null) {
- deviceCode = "";
- }
- cgResponse responseFromWeb = base.request(false, "send2.cgeo.org", "/read.html", "GET", "code=" + cgBase.urlencode_rfc3986(deviceCode), 0, true);
-
- if (responseFromWeb.getStatusCode() == 200) {
- if (responseFromWeb.getData().length() > 2) {
-
- String GCcode = responseFromWeb.getData();
-
- delay = 1;
- Message mes = new Message();
- mes.what = 1;
- mes.obj = GCcode;
- handler.sendMessage(mes);
- yield();
-
- base.storeCache(app, cgeocaches.this, null, GCcode,
- reason, null);
-
- Message mes1 = new Message();
- mes1.what = 2;
- mes1.obj = GCcode;
- handler.sendMessage(mes1);
- yield();
- } else if ("RG".equals(responseFromWeb.getData())) {
- //Server returned RG (registration) and this device no longer registered.
- settings.setWebNameCode(null, null);
- needToStop = true;
- handler.sendEmptyMessage(-3);
- return;
- } else {
- delay = 0;
- handler.sendEmptyMessage(0);
- yield();
- }
- }
- if (responseFromWeb.getStatusCode() != 200) {
- needToStop = true;
- handler.sendEmptyMessage(-2);
- return;
- }
-
- try {
- yield();
- if (delay==0)
- {
- sleep(5000); //No caches 5s
- times++;
- } else {
- sleep(500); //Cache was loaded 0.5s
- times=0;
- }
- } catch (InterruptedException e) {
- Log.e(cgSettings.tag, "cgeocaches.geocachesLoadFromWeb.sleep: " + e.toString());
- }
- }
- handler.sendEmptyMessage(-1);
- }
- }
-
- private class geocachesDropDetails extends Thread {
-
- private Handler handler = null;
- private volatile boolean needToStop = false;
- private int checked = 0;
-
- public geocachesDropDetails(Handler handlerIn) {
- setPriority(Thread.MIN_PRIORITY);
-
- handler = handlerIn;
-
- if (adapter != null) {
- checked = adapter.getChecked();
- }
- }
-
- public void kill() {
- needToStop = true;
- }
-
- @Override
- public void run() {
- if (dir != null) {
- dir = app.removeDir();
- }
- if (geo != null) {
- geo = app.removeGeo();
- }
-
- final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
- for (cgCache cache : cacheListTemp) {
- if (checked > 0 && cache.statusChecked == false) {
- continue;
- }
-
- try {
- if (needToStop) {
- Log.i(cgSettings.tag, "Stopped dropping process.");
- break;
- }
-
- app.markDropped(cache.geocode);
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgeocaches.geocachesDropDetails: " + e.toString());
- }
- }
- cacheListTemp.clear();
-
- handler.sendEmptyMessage(-1);
- }
- }
-
- private class geocachesRemoveFromHistory extends Thread {
+ private class geocachesLoadByUserName extends cgSearchThread {
+
+ private Handler handler = null;
+ private String username = null;
+ private String cachetype = null;
+
+ public geocachesLoadByUserName(Handler handlerIn, String usernameIn, String cachetypeIn) {
+ setPriority(Thread.MIN_PRIORITY);
+
+ handler = handlerIn;
+ username = usernameIn;
+ cachetype = cachetypeIn;
+
+ if (StringUtils.isBlank(username)) {
+ showToast(res.getString(R.string.warn_no_username));
+
+ finish();
+ return;
+ }
+ }
+
+ @Override
+ public void run() {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("username", username);
+ params.put("cachetype", cachetype);
+
+ searchId = base.searchByUsername(this, params, 0, settings.showCaptcha);
+
+ handler.sendMessage(new Message());
+ }
+ }
+
+ private class geocachesLoadByOwner extends cgSearchThread {
+
+ private Handler handler = null;
+ private String username = null;
+ private String cachetype = null;
+
+ public geocachesLoadByOwner(Handler handlerIn, String usernameIn, String cachetypeIn) {
+ setPriority(Thread.MIN_PRIORITY);
+
+ handler = handlerIn;
+ username = usernameIn;
+ cachetype = cachetypeIn;
+
+ if (StringUtils.isBlank(username)) {
+ showToast(res.getString(R.string.warn_no_username));
+
+ finish();
+ return;
+ }
+ }
+
+ @Override
+ public void run() {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("username", username);
+ params.put("cachetype", cachetype);
+
+ searchId = base.searchByOwner(this, params, 0, settings.showCaptcha);
+
+ handler.sendMessage(new Message());
+ }
+ }
+
+ private class geocachesLoadDetails extends Thread {
+
+ private Handler handler = null;
+ private int reason = 1;
+ private volatile boolean needToStop = false;
+ private int checked = 0;
+ private long last = 0L;
+
+ public geocachesLoadDetails(Handler handlerIn, int reasonIn) {
+ setPriority(Thread.MIN_PRIORITY);
+
+ handler = handlerIn;
+ reason = reasonIn;
+
+ if (adapter != null) {
+ checked = adapter.getChecked();
+ }
+ }
+
+ public void kill() {
+ needToStop = true;
+ }
+
+ @Override
+ public void run() {
+ if (dir != null) {
+ dir = app.removeDir();
+ }
+ if (geo != null) {
+ geo = app.removeGeo();
+ }
+
+ final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
+ for (cgCache cache : cacheListTemp) {
+ if (checked > 0 && cache.statusChecked == false) {
+ handler.sendEmptyMessage(0);
+
+ yield();
+ continue;
+ }
+
+ try {
+ if (needToStop) {
+ Log.i(cgSettings.tag, "Stopped storing process.");
+ break;
+ }
+
+ if ((System.currentTimeMillis() - last) < 1500) {
+ try {
+ int delay = 1000 + ((Double) (Math.random() * 1000)).intValue() - (int) (System.currentTimeMillis() - last);
+ if (delay < 0) {
+ delay = 500;
+ }
+
+ Log.i(cgSettings.tag, "Waiting for next cache " + delay + " ms");
+ sleep(delay);
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.geocachesLoadDetails.sleep: " + e.toString());
+ }
+ }
+
+ if (needToStop) {
+ Log.i(cgSettings.tag, "Stopped storing process.");
+ break;
+ }
+
+ detailProgress++;
+ base.storeCache(app, cgeocaches.this, cache, null, reason, null);
+
+ handler.sendEmptyMessage(cacheList.indexOf(cache));
+
+ yield();
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.geocachesLoadDetails: " + e.toString());
+ }
+
+ last = System.currentTimeMillis();
+ }
+ cacheListTemp.clear();
+
+ handler.sendEmptyMessage(-1);
+ }
+ }
+
+ private class geocachesLoadFromWeb extends Thread {
+
+ private Handler handler = null;
+ private int reason = 1;
+ private volatile boolean needToStop = false;
+
+ public geocachesLoadFromWeb(Handler handlerIn, int reasonIn) {
+ setPriority(Thread.MIN_PRIORITY);
+
+ handler = handlerIn;
+ reason = reasonIn;
+ }
+
+ public void kill() {
+ needToStop = true;
+ }
+
+ @Override
+ public void run() {
+ if (dir != null) {
+ dir = app.removeDir();
+ }
+ if (geo != null) {
+ geo = app.removeGeo();
+ }
+
+ int delay = -1;
+ int times = 0;
+
+ while (times < 3 * 60 / 5) // maximum: 3 minutes, every 5 seconds
+ {
+ if (needToStop)
+ {
+ handler.sendEmptyMessage(-1);
+ break;
+ }
+
+ //download new code
+ String deviceCode = settings.webDeviceCode;
+ if (deviceCode == null) {
+ deviceCode = "";
+ }
+ cgResponse responseFromWeb = base.request(false, "send2.cgeo.org", "/read.html", "GET", "code=" + cgBase.urlencode_rfc3986(deviceCode), 0, true);
+
+ if (responseFromWeb.getStatusCode() == 200) {
+ if (responseFromWeb.getData().length() > 2) {
+
+ String GCcode = responseFromWeb.getData();
+
+ delay = 1;
+ Message mes = new Message();
+ mes.what = 1;
+ mes.obj = GCcode;
+ handler.sendMessage(mes);
+ yield();
+
+ base.storeCache(app, cgeocaches.this, null, GCcode,
+ reason, null);
+
+ Message mes1 = new Message();
+ mes1.what = 2;
+ mes1.obj = GCcode;
+ handler.sendMessage(mes1);
+ yield();
+ } else if ("RG".equals(responseFromWeb.getData())) {
+ //Server returned RG (registration) and this device no longer registered.
+ settings.setWebNameCode(null, null);
+ needToStop = true;
+ handler.sendEmptyMessage(-3);
+ return;
+ } else {
+ delay = 0;
+ handler.sendEmptyMessage(0);
+ yield();
+ }
+ }
+ if (responseFromWeb.getStatusCode() != 200) {
+ needToStop = true;
+ handler.sendEmptyMessage(-2);
+ return;
+ }
+
+ try {
+ yield();
+ if (delay == 0)
+ {
+ sleep(5000); //No caches 5s
+ times++;
+ } else {
+ sleep(500); //Cache was loaded 0.5s
+ times = 0;
+ }
+ } catch (InterruptedException e) {
+ Log.e(cgSettings.tag, "cgeocaches.geocachesLoadFromWeb.sleep: " + e.toString());
+ }
+ }
+ handler.sendEmptyMessage(-1);
+ }
+ }
+
+ private class geocachesDropDetails extends Thread {
+
+ private Handler handler = null;
+ private volatile boolean needToStop = false;
+ private int checked = 0;
+
+ public geocachesDropDetails(Handler handlerIn) {
+ setPriority(Thread.MIN_PRIORITY);
+
+ handler = handlerIn;
+
+ if (adapter != null) {
+ checked = adapter.getChecked();
+ }
+ }
+
+ public void kill() {
+ needToStop = true;
+ }
+
+ @Override
+ public void run() {
+ if (dir != null) {
+ dir = app.removeDir();
+ }
+ if (geo != null) {
+ geo = app.removeGeo();
+ }
+
+ final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
+ for (cgCache cache : cacheListTemp) {
+ if (checked > 0 && cache.statusChecked == false) {
+ continue;
+ }
+
+ try {
+ if (needToStop) {
+ Log.i(cgSettings.tag, "Stopped dropping process.");
+ break;
+ }
+
+ app.markDropped(cache.geocode);
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgeocaches.geocachesDropDetails: " + e.toString());
+ }
+ }
+ cacheListTemp.clear();
+
+ handler.sendEmptyMessage(-1);
+ }
+ }
+
+ private class geocachesRemoveFromHistory extends Thread {
private Handler handler = null;
private volatile boolean needToStop = false;
@@ -2238,8 +2238,8 @@ public class cgeocaches extends AbstractListActivity {
}
}
- private class geocachesExportFieldNotes extends Thread
- {
+ private class geocachesExportFieldNotes extends Thread
+ {
private Handler handler = null;
private volatile boolean needToStop = false;
private int checked = 0;
@@ -2302,13 +2302,13 @@ public class cgeocaches extends AbstractListActivity {
if (null != logTypes.get(log.type))
{
fieldNoteBuffer.append(cache.geocode)
- .append(',')
- .append(fieldNoteDateFormat.format(new Date(log.date)))
- .append(',')
- .append(logTypes.get(log.type))
- .append(",\"")
- .append(log.log.replaceAll("\"", "'"))
- .append("\"\n");
+ .append(',')
+ .append(fieldNoteDateFormat.format(new Date(log.date)))
+ .append(',')
+ .append(logTypes.get(log.type))
+ .append(",\"")
+ .append(log.log.replaceAll("\"", "'"))
+ .append("\"\n");
}
}
@@ -2331,7 +2331,7 @@ public class cgeocaches extends AbstractListActivity {
File exportFile = new File(exportLocation + "/" + fileNameDateFormat.format(new Date()) + ".txt");
OutputStream os = null;
- Writer fw = null;
+ Writer fw = null;
try
{
os = new FileOutputStream(exportFile);
@@ -2339,16 +2339,18 @@ public class cgeocaches extends AbstractListActivity {
fw.write(fieldNoteBuffer.toString());
Message.obtain(handler, -2, exportFile).sendToTarget();
- }
- catch (IOException e) {
+ } catch (IOException e) {
Log.e(cgSettings.tag, "cgeocaches.geocachesExportFieldNotes: " + e.toString());
handler.sendEmptyMessage(-3);
- }
- finally
+ } finally
{
- if ( fw != null )
+ if (fw != null)
{
- try { fw.close(); } catch (IOException e) { Log.e(cgSettings.tag, "cgeocaches.geocachesExportFieldNotes: " + e.toString()); }
+ try {
+ fw.close();
+ } catch (IOException e) {
+ Log.e(cgSettings.tag, "cgeocaches.geocachesExportFieldNotes: " + e.toString());
+ }
}
}
}
@@ -2357,256 +2359,256 @@ public class cgeocaches extends AbstractListActivity {
}
}
- private class moreCachesListener implements View.OnClickListener {
-
- @Override
- public void onClick(View arg0) {
- showProgress(true);
- setLoadingCaches();
- listFooter.setOnClickListener(null);
-
- geocachesLoadNextPage thread;
- thread = new geocachesLoadNextPage(loadNextPageHandler);
- thread.setRecaptchaHandler(new cgSearchHandler(cgeocaches.this, res, thread));
- thread.start();
- }
- }
-
- private void hideLoading() {
- final ListView list = getListView();
- final RelativeLayout loading = (RelativeLayout) findViewById(R.id.loading);
-
- if (list.getVisibility() == View.GONE) {
- list.setVisibility(View.VISIBLE);
- loading.setVisibility(View.GONE);
- }
- }
-
- public void selectList(View view) {
- if (type.equals("offline") == false) {
- return;
- }
-
- lists = app.getLists();
-
- if (lists == null) {
- return;
- }
-
- final List<CharSequence> listsTitle = new ArrayList<CharSequence>();
- for (cgList list : lists) {
- listsTitle.add(list.title);
- }
-
- final CharSequence[] items = new CharSequence[listsTitle.size()];
-
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(res.getString(R.string.list_title));
- builder.setItems(listsTitle.toArray(items), new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialogInterface, int item) {
- switchListById(lists.get(item).id);
-
- return;
- }
- });
- builder.create().show();
- }
-
- public void switchListById(int id) {
- cgList list = null;
-
- if (id >= 0) {
- list = app.getList(id);
- } else {
- return;
- }
-
- if (list == null) {
- return;
- }
-
- listId = list.id;
- title = list.title;
-
- settings.saveLastList(listId);
-
- showProgress(true);
- setLoadingCaches();
-
- (new moveCachesToList(listId, new MoveHandler())).start();
- }
-
- private class MoveHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- Thread threadPure = new geocachesLoadByOffline(loadCachesHandler, coords, msg.what);
- threadPure.start();
- }
- }
-
- private class moveCachesToList extends Thread {
- int listId = -1;
- Handler handler = null;
-
- public moveCachesToList(int listIdIn, Handler handlerIn) {
- listId = listIdIn;
- handler = handlerIn;
- }
-
- @Override
- public void run() {
- int checked = adapter.getChecked();
- if (checked > 0) {
- final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
- for (cgCache cache : cacheListTemp) {
- if (cache.statusChecked) {
- app.moveToList(cache.geocode, listId);
- }
- }
- }
-
- handler.sendEmptyMessage(listId);
- }
- }
-
- private void createList() {
- final AlertDialog.Builder alert = new AlertDialog.Builder(this);
- final View view = inflater.inflate(R.layout.list_create_dialog, null);
- final EditText input = (EditText) view.findViewById(R.id.text);
-
- alert.setTitle(R.string.list_dialog_create_title);
- alert.setView(view);
- alert.setPositiveButton(R.string.list_dialog_create, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- String value = input.getText().toString();
- // remove whitespaces added by autocompletion of Android keyboard
- if (value != null) {
- value = value.trim();
- }
-
- if (StringUtils.isNotBlank(value)) {
- int newId = app.createList(value);
-
- if (newId >= 10) {
- showToast(res.getString(R.string.list_dialog_create_ok));
- } else {
- showToast(res.getString(R.string.list_dialog_create_err));
- }
- }
- }
- });
- alert.setNegativeButton(res.getString(R.string.list_dialog_cancel), new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- dialog.dismiss();
- }
- });
-
- alert.show();
- }
-
- private void removeListInternal() {
- boolean status = app.removeList(listId);
-
- if (status) {
- showToast(res.getString(R.string.list_dialog_remove_ok));
- switchListById(1);
- } else {
- showToast(res.getString(R.string.list_dialog_remove_err));
- }
- }
-
- private void removeList() {
- // if there are no caches on this list, don't bother the user with questions.
- // there is no harm in deleting the list, he could recreate it easily
- if (cacheList != null && cacheList.isEmpty()) {
- removeListInternal();
- return;
- }
-
- // ask him, if there are caches on the list
- final AlertDialog.Builder alert = new AlertDialog.Builder(this);
-
- alert.setTitle(R.string.list_dialog_remove_title);
- alert.setMessage(R.string.list_dialog_remove_description);
- alert.setPositiveButton(R.string.list_dialog_remove, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- removeListInternal();
- }
- });
- alert.setNegativeButton(res.getString(R.string.list_dialog_cancel), new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- dialog.dismiss();
- }
- });
-
- alert.show();
- }
-
- public void goMap(View view) {
- if (searchId == null || CollectionUtils.isEmpty(cacheList)) {
- showToast(res.getString(R.string.warn_no_cache_coord));
-
- return;
- }
-
- Intent mapIntent = new Intent(this, settings.getMapFactory().getMapClass());
- mapIntent.putExtra("detail", false);
- mapIntent.putExtra("searchid", searchId.toString());
-
- startActivity(mapIntent);
- }
-
- public void goManual(View view) {
- if (type != null && type.equals("offline")) {
- ActivityMixin.goManual(this, "c:geo-stored");
- } else if (type != null && type.equals("history")) {
- ActivityMixin.goManual(this, "c:geo-history");
- } else {
- ActivityMixin.goManual(this, "c:geo-nearby");
- }
- }
-
- private void refreshCurrentList() {
- switchListById(listId);
- }
-
- public static void startActivityOffline(final Context context) {
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
- cachesIntent.putExtra(EXTRAS_LIST_TYPE, "offline");
- context.startActivity(cachesIntent);
- }
-
- public static void startActivityCachesAround(final AbstractActivity context, final Geopoint coords) {
- cgeocaches cachesActivity = new cgeocaches();
-
- Intent cachesIntent = new Intent(context, cachesActivity.getClass());
- cachesIntent.putExtra("type", "coordinate");
- cachesIntent.putExtra("latitude", coords.getLatitude());
- cachesIntent.putExtra("longitude", coords.getLongitude());
- cachesIntent.putExtra("cachetype", context.getSettings().cacheType);
-
- context.startActivity(cachesIntent);
- }
-
- public static void startActivityCacheOwner(final AbstractActivity context, final String userName) {
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
-
- cachesIntent.putExtra("type", "owner");
- cachesIntent.putExtra("username", userName);
- cachesIntent.putExtra("cachetype", context.getSettings().cacheType);
-
- context.startActivity(cachesIntent);
- }
-
- public static void startActivityCacheUser(final AbstractActivity context, final String userName) {
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
-
- cachesIntent.putExtra("type", "username");
- cachesIntent.putExtra("username", userName);
- cachesIntent.putExtra("cachetype", context.getSettings().cacheType);
-
- context.startActivity(cachesIntent);
- }
+ private class moreCachesListener implements View.OnClickListener {
+
+ @Override
+ public void onClick(View arg0) {
+ showProgress(true);
+ setLoadingCaches();
+ listFooter.setOnClickListener(null);
+
+ geocachesLoadNextPage thread;
+ thread = new geocachesLoadNextPage(loadNextPageHandler);
+ thread.setRecaptchaHandler(new cgSearchHandler(cgeocaches.this, res, thread));
+ thread.start();
+ }
+ }
+
+ private void hideLoading() {
+ final ListView list = getListView();
+ final RelativeLayout loading = (RelativeLayout) findViewById(R.id.loading);
+
+ if (list.getVisibility() == View.GONE) {
+ list.setVisibility(View.VISIBLE);
+ loading.setVisibility(View.GONE);
+ }
+ }
+
+ public void selectList(View view) {
+ if (type.equals("offline") == false) {
+ return;
+ }
+
+ lists = app.getLists();
+
+ if (lists == null) {
+ return;
+ }
+
+ final List<CharSequence> listsTitle = new ArrayList<CharSequence>();
+ for (cgList list : lists) {
+ listsTitle.add(list.title);
+ }
+
+ final CharSequence[] items = new CharSequence[listsTitle.size()];
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(res.getString(R.string.list_title));
+ builder.setItems(listsTitle.toArray(items), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialogInterface, int item) {
+ switchListById(lists.get(item).id);
+
+ return;
+ }
+ });
+ builder.create().show();
+ }
+
+ public void switchListById(int id) {
+ cgList list = null;
+
+ if (id >= 0) {
+ list = app.getList(id);
+ } else {
+ return;
+ }
+
+ if (list == null) {
+ return;
+ }
+
+ listId = list.id;
+ title = list.title;
+
+ settings.saveLastList(listId);
+
+ showProgress(true);
+ setLoadingCaches();
+
+ (new moveCachesToList(listId, new MoveHandler())).start();
+ }
+
+ private class MoveHandler extends Handler {
+ @Override
+ public void handleMessage(Message msg) {
+ Thread threadPure = new geocachesLoadByOffline(loadCachesHandler, coords, msg.what);
+ threadPure.start();
+ }
+ }
+
+ private class moveCachesToList extends Thread {
+ int listId = -1;
+ Handler handler = null;
+
+ public moveCachesToList(int listIdIn, Handler handlerIn) {
+ listId = listIdIn;
+ handler = handlerIn;
+ }
+
+ @Override
+ public void run() {
+ int checked = adapter.getChecked();
+ if (checked > 0) {
+ final List<cgCache> cacheListTemp = new ArrayList<cgCache>(cacheList);
+ for (cgCache cache : cacheListTemp) {
+ if (cache.statusChecked) {
+ app.moveToList(cache.geocode, listId);
+ }
+ }
+ }
+
+ handler.sendEmptyMessage(listId);
+ }
+ }
+
+ private void createList() {
+ final AlertDialog.Builder alert = new AlertDialog.Builder(this);
+ final View view = inflater.inflate(R.layout.list_create_dialog, null);
+ final EditText input = (EditText) view.findViewById(R.id.text);
+
+ alert.setTitle(R.string.list_dialog_create_title);
+ alert.setView(view);
+ alert.setPositiveButton(R.string.list_dialog_create, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ String value = input.getText().toString();
+ // remove whitespaces added by autocompletion of Android keyboard
+ if (value != null) {
+ value = value.trim();
+ }
+
+ if (StringUtils.isNotBlank(value)) {
+ int newId = app.createList(value);
+
+ if (newId >= 10) {
+ showToast(res.getString(R.string.list_dialog_create_ok));
+ } else {
+ showToast(res.getString(R.string.list_dialog_create_err));
+ }
+ }
+ }
+ });
+ alert.setNegativeButton(res.getString(R.string.list_dialog_cancel), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ dialog.dismiss();
+ }
+ });
+
+ alert.show();
+ }
+
+ private void removeListInternal() {
+ boolean status = app.removeList(listId);
+
+ if (status) {
+ showToast(res.getString(R.string.list_dialog_remove_ok));
+ switchListById(1);
+ } else {
+ showToast(res.getString(R.string.list_dialog_remove_err));
+ }
+ }
+
+ private void removeList() {
+ // if there are no caches on this list, don't bother the user with questions.
+ // there is no harm in deleting the list, he could recreate it easily
+ if (cacheList != null && cacheList.isEmpty()) {
+ removeListInternal();
+ return;
+ }
+
+ // ask him, if there are caches on the list
+ final AlertDialog.Builder alert = new AlertDialog.Builder(this);
+
+ alert.setTitle(R.string.list_dialog_remove_title);
+ alert.setMessage(R.string.list_dialog_remove_description);
+ alert.setPositiveButton(R.string.list_dialog_remove, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ removeListInternal();
+ }
+ });
+ alert.setNegativeButton(res.getString(R.string.list_dialog_cancel), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ dialog.dismiss();
+ }
+ });
+
+ alert.show();
+ }
+
+ public void goMap(View view) {
+ if (searchId == null || CollectionUtils.isEmpty(cacheList)) {
+ showToast(res.getString(R.string.warn_no_cache_coord));
+
+ return;
+ }
+
+ Intent mapIntent = new Intent(this, settings.getMapFactory().getMapClass());
+ mapIntent.putExtra("detail", false);
+ mapIntent.putExtra("searchid", searchId.toString());
+
+ startActivity(mapIntent);
+ }
+
+ public void goManual(View view) {
+ if (type != null && type.equals("offline")) {
+ ActivityMixin.goManual(this, "c:geo-stored");
+ } else if (type != null && type.equals("history")) {
+ ActivityMixin.goManual(this, "c:geo-history");
+ } else {
+ ActivityMixin.goManual(this, "c:geo-nearby");
+ }
+ }
+
+ private void refreshCurrentList() {
+ switchListById(listId);
+ }
+
+ public static void startActivityOffline(final Context context) {
+ final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ cachesIntent.putExtra(EXTRAS_LIST_TYPE, "offline");
+ context.startActivity(cachesIntent);
+ }
+
+ public static void startActivityCachesAround(final AbstractActivity context, final Geopoint coords) {
+ cgeocaches cachesActivity = new cgeocaches();
+
+ Intent cachesIntent = new Intent(context, cachesActivity.getClass());
+ cachesIntent.putExtra("type", "coordinate");
+ cachesIntent.putExtra("latitude", coords.getLatitude());
+ cachesIntent.putExtra("longitude", coords.getLongitude());
+ cachesIntent.putExtra("cachetype", context.getSettings().cacheType);
+
+ context.startActivity(cachesIntent);
+ }
+
+ public static void startActivityCacheOwner(final AbstractActivity context, final String userName) {
+ final Intent cachesIntent = new Intent(context, cgeocaches.class);
+
+ cachesIntent.putExtra("type", "owner");
+ cachesIntent.putExtra("username", userName);
+ cachesIntent.putExtra("cachetype", context.getSettings().cacheType);
+
+ context.startActivity(cachesIntent);
+ }
+
+ public static void startActivityCacheUser(final AbstractActivity context, final String userName) {
+ final Intent cachesIntent = new Intent(context, cgeocaches.class);
+
+ cachesIntent.putExtra("type", "username");
+ cachesIntent.putExtra("username", userName);
+ cachesIntent.putExtra("cachetype", context.getSettings().cacheType);
+
+ context.startActivity(cachesIntent);
+ }
private void prepareFilterBar() {
TextView filterTextView = (TextView) findViewById(R.id.filter_text);
@@ -2620,11 +2622,11 @@ public class cgeocaches extends AbstractListActivity {
if (adapter.isFilter()) {
filter = adapter.getFilterName();
}
-
+
if (settings.cacheType != null && adapter.isFilter()) {
filter = ", " + filter;
}
-
+
filterTextView.setText(cacheType + filter);
filterBar.setVisibility(View.VISIBLE);
}