diff options
Diffstat (limited to 'main/src/cgeo/geocaching/cgeocaches.java')
| -rw-r--r-- | main/src/cgeo/geocaching/cgeocaches.java | 286 |
1 files changed, 123 insertions, 163 deletions
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 61a32f1..5d7841d 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -2,7 +2,6 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractListActivity; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; @@ -32,13 +31,13 @@ import cgeo.geocaching.maps.CGeoMap; import cgeo.geocaching.network.Cookies; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.sorting.CacheComparator; import cgeo.geocaching.sorting.ComparatorUserInterface; -import cgeo.geocaching.sorting.EventDateComparator; -import cgeo.geocaching.sorting.VisitComparator; import cgeo.geocaching.ui.CacheListAdapter; import cgeo.geocaching.ui.LoggingUI; import cgeo.geocaching.ui.WeakReferenceHandler; +import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.DateUtils; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; @@ -74,6 +73,7 @@ import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -96,6 +96,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity 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_REFRESH = 26; 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; @@ -164,18 +165,17 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity */ private MenuItem navigationMenu; + // FIXME: This method has mostly been replaced by the loaders. But it still contains a license agreement check. public void handleCachesLoaded() { try { setAdapter(); updateTitle(); - setDateComparatorForEventList(); - showFooterMoreCaches(); if (search != null && search.getError() == StatusCode.UNAPPROVED_LICENSE) { - AlertDialog.Builder dialog = new AlertDialog.Builder(this); + final AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle(res.getString(R.string.license)); dialog.setMessage(res.getString(R.string.err_license)); dialog.setCancelable(true); @@ -196,7 +196,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } }); - AlertDialog alert = dialog.create(); + final AlertDialog alert = dialog.create(); alert.show(); } else if (search != null && search.getError() != null) { showToast(res.getString(R.string.err_download_fail) + ' ' + search.getError().getErrorString(res) + '.'); @@ -209,7 +209,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } setAdapterCurrentCoordinates(false); - } catch (Exception e) { + } catch (final Exception e) { showToast(res.getString(R.string.err_detail_cache_find_any)); Log.e("cgeocaches.loadCachesHandler", e); @@ -223,14 +223,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity try { hideLoading(); showProgress(false); - } catch (Exception e2) { + } catch (final Exception e2) { Log.e("cgeocaches.loadCachesHandler.2", e2); } adapter.setSelectMode(false); } - private Handler loadCachesHandler = new LoadCachesHandler(this); + private final Handler loadCachesHandler = new LoadCachesHandler(this); private static class LoadCachesHandler extends WeakReferenceHandler<cgeocaches> { @@ -275,7 +275,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } protected void updateTitle() { - ArrayList<Integer> numbers = new ArrayList<Integer>(); + final ArrayList<Integer> numbers = new ArrayList<Integer>(); if (adapter.isFiltered()) { numbers.add(adapter.getCount()); } @@ -290,7 +290,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } - private Handler loadDetailsHandler = new Handler() { + private final Handler loadDetailsHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -301,8 +301,8 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity adapter.notifyDataSetChanged(); - int secondsElapsed = (int) ((System.currentTimeMillis() - detailProgressTime) / 1000); - int minutesRemaining = ((detailTotal - detailProgress) * secondsElapsed / ((detailProgress > 0) ? detailProgress : 1) / 60); + final int secondsElapsed = (int) ((System.currentTimeMillis() - detailProgressTime) / 1000); + final int minutesRemaining = ((detailTotal - detailProgress) * secondsElapsed / ((detailProgress > 0) ? detailProgress : 1) / 60); progress.setProgress(detailProgress); if (minutesRemaining < 1) { @@ -338,7 +338,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity /** * TODO Possibly parts should be a Thread not a Handler */ - private Handler downloadFromWebHandler = new Handler() { + private final Handler downloadFromWebHandler = new Handler() { @Override public void handleMessage(Message msg) { setAdapter(); @@ -373,22 +373,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } }; - private Handler dropDetailsHandler = new Handler() { - - @Override - public void handleMessage(Message msg) { - if (msg.what != MSG_CANCEL) { - adapter.setSelectMode(false); - - refreshCurrentList(); - - replaceCacheListFromSearch(); - - progress.dismiss(); - } - } - }; - private Handler clearOfflineLogsHandler = new Handler() { + private final Handler clearOfflineLogsHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -404,7 +389,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } }; - private Handler importGpxAttachementFinishedHandler = new Handler() { + private final Handler importGpxAttachementFinishedHandler = new Handler() { @Override public void handleMessage(Message msg) { refreshCurrentList(); @@ -421,14 +406,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity super.onCreate(savedInstanceState); setTheme(); - setContentView(R.layout.caches); + setContentView(R.layout.cacheslist_activity); // get parameters Bundle extras = getIntent().getExtras(); if (extras != null) { - Object typeObject = extras.get(Intents.EXTRA_LIST_TYPE); + final Object typeObject = extras.get(Intents.EXTRA_LIST_TYPE); type = (typeObject instanceof CacheListType) ? (CacheListType) typeObject : CacheListType.OFFLINE; - coords = (Geopoint) extras.getParcelable(Intents.EXTRAS_COORDS); + coords = extras.getParcelable(Intents.EXTRA_COORDS); } else { extras = new Bundle(); @@ -440,6 +425,17 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } + // Add the list selection in code. This way we can leave the XML layout of the action bar the same as for other activities. + final View titleBar = findViewById(R.id.actionbar_title); + titleBar.setClickable(true); + titleBar.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + selectList(v); + } + }); + setTitle(title); setAdapter(); @@ -480,24 +476,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } private void importGpxAttachement() { - new AlertDialog.Builder(this) - .setTitle(res.getString(R.string.gpx_import_title)) - .setMessage(res.getString(R.string.gpx_import_confirm)) - .setCancelable(false) - .setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - new GPXImporter(cgeocaches.this, listId, importGpxAttachementFinishedHandler).importGPX(); - } - }) - .setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }) - .create() - .show(); + new StoredList.UserInterface(this).promptForListSelection(R.string.gpx_import_select_list_title, new RunnableWithArgument<Integer>() { + + @Override + public void run(Integer listId) { + new GPXImporter(cgeocaches.this, listId, importGpxAttachementFinishedHandler).importGPX(); + switchListById(listId); + } + }, true, 0); } @Override @@ -516,7 +502,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity // refresh standard list if it has changed (new caches downloaded) if (type == CacheListType.OFFLINE && listId >= StoredList.STANDARD_LIST_ID && search != null) { - SearchResult newSearch = cgData.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId); + final SearchResult newSearch = cgData.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId); if (newSearch != null && newSearch.getTotal() != search.getTotal()) { refreshCurrentList(); } @@ -551,7 +537,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity menu.add(0, MENU_SWITCH_SELECT_MODE, 0, res.getString(R.string.caches_select_mode)).setIcon(R.drawable.ic_menu_agenda); menu.add(0, MENU_INVERT_SELECTION, 0, res.getString(R.string.caches_select_invert)).setIcon(R.drawable.ic_menu_mark); if (type == CacheListType.OFFLINE) { - SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_OFFLINE, 0, res.getString(R.string.caches_manage)).setIcon(R.drawable.ic_menu_save); + final SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_OFFLINE, 0, res.getString(R.string.caches_manage)).setIcon(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_DROP_CACHES_AND_LIST, 0, res.getString(R.string.caches_drop_all_and_list)); subMenu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.cache_offline_refresh)); // download details for all caches @@ -568,17 +554,20 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity subMenu.add(0, MENU_EXPORT, 0, res.getString(R.string.export)); // export caches } else { if (type == CacheListType.HISTORY) { - SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_HISTORY, 0, res.getString(R.string.caches_manage)).setIcon(R.drawable.ic_menu_save); - subMenu.add(0, MENU_REMOVE_FROM_HISTORY, 0, res.getString(R.string.cache_clear_history)); // remove from history + final SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_HISTORY, 0, res.getString(R.string.caches_manage)).setIcon(R.drawable.ic_menu_save); subMenu.add(0, MENU_EXPORT, 0, res.getString(R.string.export)); // export caches + subMenu.add(0, MENU_REMOVE_FROM_HISTORY, 0, res.getString(R.string.cache_clear_history)); // remove from history + subMenu.add(0, MENU_CLEAR_OFFLINE_LOGS, 0, res.getString(R.string.caches_clear_offlinelogs)); + menu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.cache_offline_refresh)).setIcon(R.drawable.ic_menu_set_as); + } else { + menu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.caches_store_offline)).setIcon(R.drawable.ic_menu_set_as); // download details for all caches } - menu.add(0, MENU_REFRESH_STORED, 0, res.getString(R.string.caches_store_offline)).setIcon(R.drawable.ic_menu_set_as); // download details for all caches } navigationMenu = CacheListAppFactory.addMenuItems(menu, this, res); if (type == CacheListType.OFFLINE) { - SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_LISTS, 0, res.getString(R.string.list_menu)).setIcon(R.drawable.ic_menu_more); + final SubMenu subMenu = menu.addSubMenu(0, SUBMENU_MANAGE_LISTS, 0, res.getString(R.string.list_menu)).setIcon(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_RENAME_LIST, 0, res.getString(R.string.list_menu_rename)); @@ -625,8 +614,6 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity setVisible(menu, MENU_EXPORT, !isEmpty); setVisible(menu, MENU_REMOVE_FROM_HISTORY, !isEmpty); setVisible(menu, MENU_CLEAR_OFFLINE_LOGS, !isEmpty && containsOfflineLogs()); - setVisible(menu, MENU_IMPORT_GPX, isConcrete); - setVisible(menu, MENU_IMPORT_WEB, isConcrete); if (navigationMenu != null) { navigationMenu.setVisible(!isEmpty); @@ -635,14 +622,16 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity final boolean hasSelection = adapter != null && adapter.getCheckedCount() > 0; final boolean isNonDefaultList = isConcrete && listId != StoredList.STANDARD_LIST_ID; - if (type == CacheListType.OFFLINE) { // only offline list + if (type == CacheListType.OFFLINE || type == CacheListType.HISTORY) { // only offline list setMenuItemLabel(menu, MENU_DROP_CACHES, R.string.caches_drop_selected, R.string.caches_drop_all); - menu.findItem(MENU_DROP_CACHES_AND_LIST).setVisible(!hasSelection && isNonDefaultList && !adapter.isFiltered()); setMenuItemLabel(menu, MENU_REFRESH_STORED, R.string.caches_refresh_selected, R.string.caches_refresh_all); setMenuItemLabel(menu, MENU_MOVE_TO_LIST, R.string.caches_move_selected, R.string.caches_move_all); - } else { // search and history list (all other than offline) + } else { // search and global list (all other than offline and history) setMenuItemLabel(menu, MENU_REFRESH_STORED, R.string.caches_store_selected, R.string.caches_store_offline); } + if (type == CacheListType.OFFLINE) { + menu.findItem(MENU_DROP_CACHES_AND_LIST).setVisible(!hasSelection && isNonDefaultList && !adapter.isFiltered()); + } MenuItem item = menu.findItem(MENU_DROP_LIST); if (item != null) { @@ -665,7 +654,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity setMenuItemLabel(menu, MENU_REMOVE_FROM_HISTORY, R.string.cache_remove_from_history, R.string.cache_clear_history); setMenuItemLabel(menu, MENU_EXPORT, R.string.export, R.string.export); - } catch (Exception e) { + } catch (final Exception e) { Log.e("cgeocaches.onPrepareOptionsMenu", e); } @@ -673,7 +662,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } private boolean containsEvents() { - for (Geocache cache : adapter.getCheckedOrAllCaches()) { + for (final Geocache cache : adapter.getCheckedOrAllCaches()) { if (cache.isEventCache()) { return true; } @@ -682,7 +671,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } private boolean containsOfflineLogs() { - for (Geocache cache : adapter.getCheckedOrAllCaches()) { + for (final Geocache cache : adapter.getCheckedOrAllCaches()) { if (cache.isLogOffline()) { return true; } @@ -695,7 +684,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (menuItem == null) { return; } - boolean hasSelection = adapter != null && adapter.getCheckedCount() > 0; + final boolean hasSelection = adapter != null && adapter.getCheckedCount() > 0; if (hasSelection) { menuItem.setTitle(res.getString(resIdSelection) + " (" + adapter.getCheckedCount() + ")"); } else { @@ -705,7 +694,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public boolean onOptionsItemSelected(MenuItem item) { - int itemId = item.getItemId(); + final int itemId = item.getItemId(); switch (itemId) { case MENU_SWITCH_SELECT_MODE: adapter.switchSelectMode(); @@ -794,9 +783,8 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } public void deletePastEvents() { - progress.show(this, null, res.getString(R.string.caches_drop_progress), true, dropDetailsHandler.obtainMessage(MSG_CANCEL)); final List<Geocache> deletion = new ArrayList<Geocache>(); - for (Geocache cache : adapter.getCheckedOrAllCaches()) { + for (final Geocache cache : adapter.getCheckedOrAllCaches()) { if (cache.isEventCache()) { final Date eventDate = cache.getHiddenDate(); if (DateUtils.daysSince(eventDate.getTime()) > 0) { @@ -804,7 +792,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } } - new DropDetailsThread(dropDetailsHandler, deletion).start(); + new DropDetailsTask(false).execute(deletion.toArray(new Geocache[deletion.size()])); } public void clearOfflineLogs() { @@ -842,7 +830,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity AdapterContextMenuInfo adapterInfo = null; try { adapterInfo = (AdapterContextMenuInfo) info; - } catch (Exception e) { + } catch (final Exception e) { Log.w("cgeocaches.onCreateContextMenu", e); } @@ -858,13 +846,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (cache.getCoords() != null) { menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication().getName()); menu.add(1, MENU_NAVIGATION, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode); - LoggingUI.addMenuItems(menu, cache); + LoggingUI.addMenuItems(this, menu, cache); menu.add(0, MENU_CACHE_DETAILS, 0, res.getString(R.string.cache_menu_details)); } if (cache.isOffline()) { menu.add(0, MENU_DROP_CACHE, 0, res.getString(R.string.cache_offline_drop)); menu.add(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list)); menu.add(0, MENU_EXPORT, 0, res.getString(R.string.export)); + menu.add(0, MENU_REFRESH, 0, res.getString(R.string.cache_menu_refresh)); } else { menu.add(0, MENU_STORE_CACHE, 0, res.getString(R.string.cache_offline_store)); @@ -898,7 +887,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity AdapterContextMenuInfo adapterInfo = null; try { adapterInfo = (AdapterContextMenuInfo) info; - } catch (Exception e) { + } catch (final Exception e) { Log.w("cgeocaches.onContextItemSelected", e); } @@ -918,10 +907,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity NavigationAppFactory.showNavigationMenu(this, cache, null, null); break; case MENU_CACHE_DETAILS: - final Intent cachesIntent = new Intent(this, CacheDetailActivity.class); - cachesIntent.putExtra(Intents.EXTRA_GEOCODE, cache.getGeocode()); - cachesIntent.putExtra(Intents.EXTRA_NAME, cache.getName()); - startActivity(cachesIntent); + CacheDetailActivity.startActivity(this, cache.getGeocode(), cache.getName()); break; case MENU_DROP_CACHE: cache.drop(new Handler() { @@ -944,6 +930,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity }, true, listId); break; case MENU_STORE_CACHE: + case MENU_REFRESH: refreshStored(Collections.singletonList(cache)); break; case MENU_EXPORT: @@ -1000,7 +987,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (inflater == null) { inflater = getLayoutInflater(); } - listFooter = inflater.inflate(R.layout.caches_footer, null); + listFooter = inflater.inflate(R.layout.cacheslist_footer, null); listFooter.setClickable(true); listFooter.setOnClickListener(new MoreCachesListener()); @@ -1082,6 +1069,11 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity return; } + if (!Network.isNetworkConnected(getApplicationContext())) { + showToast(getString(R.string.err_server)); + return; + } + if (Settings.getChooseList() && type != CacheListType.OFFLINE) { // let user select list to store cache in new StoredList.UserInterface(this).promptForListSelection(R.string.list_title, @@ -1101,7 +1093,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity showProgress(false); - int etaTime = ((detailTotal * 25) / 60); + final int etaTime = ((detailTotal * 25) / 60); String message; if (etaTime < 1) { message = res.getString(R.string.caches_downloading) + " " + res.getString(R.string.caches_eta_ltm); @@ -1119,7 +1111,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } public void removeFromHistoryCheck() { - AlertDialog.Builder dialog = new AlertDialog.Builder(this); + final 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.getCheckedCount() > 0) ? res.getString(R.string.cache_remove_from_history) @@ -1138,17 +1130,17 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } }); - AlertDialog alert = dialog.create(); + final AlertDialog alert = dialog.create(); alert.show(); } public void removeFromHistory() { final List<Geocache> caches = adapter.getCheckedOrAllCaches(); - final String geocodes[] = new String[caches.size()]; + final String[] geocodes = new String[caches.size()]; for (int i = 0; i < geocodes.length; i++) { geocodes[i] = caches.get(i).getGeocode(); } - Bundle b = new Bundle(); + final Bundle b = new Bundle(); b.putStringArray(Intents.EXTRA_CACHELIST, geocodes); getSupportLoaderManager().initLoader(CacheListLoaderType.REMOVE_FROM_HISTORY.ordinal(), b, this); } @@ -1164,7 +1156,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } public void dropStored(final boolean removeListAfterwards) { - AlertDialog.Builder dialog = new AlertDialog.Builder(this); + final AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setCancelable(true); dialog.setTitle(res.getString(R.string.caches_drop_stored)); @@ -1177,10 +1169,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void onClick(DialogInterface dialog, int id) { - dropSelected(); - if (removeListAfterwards) { - removeList(false); - } + dropSelected(removeListAfterwards); dialog.cancel(); } }); @@ -1192,13 +1181,13 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } }); - AlertDialog alert = dialog.create(); + final AlertDialog alert = dialog.create(); alert.show(); } - public void dropSelected() { - progress.show(this, null, res.getString(R.string.caches_drop_progress), true, dropDetailsHandler.obtainMessage(MSG_CANCEL)); - new DropDetailsThread(dropDetailsHandler, adapter.getCheckedOrAllCaches()).start(); + public void dropSelected(boolean removeListAfterwards) { + final List<Geocache> selected = adapter.getCheckedOrAllCaches(); + new DropDetailsTask(removeListAfterwards).execute(selected.toArray(new Geocache[selected.size()])); } /** @@ -1230,7 +1219,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity removeGeoAndDir(); final List<Geocache> cachesWithStaticMaps = new ArrayList<Geocache>(this.caches.size()); - for (Geocache cache : this.caches) { + for (final Geocache cache : this.caches) { if (Settings.isStoreOfflineMaps() && cache.hasStaticMap()) { cachesWithStaticMaps.add(cache); continue; @@ -1242,7 +1231,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } - for (Geocache cache : cachesWithStaticMaps) { + for (final Geocache cache : cachesWithStaticMaps) { if (!refreshCache(cache)) { break; } @@ -1274,7 +1263,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } Log.i("Waiting for next cache " + delay + " ms"); - } catch (Exception e) { + } catch (final Exception e) { Log.e("cgeocaches.LoadDetailsThread.sleep", e); } } @@ -1289,10 +1278,10 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity handler.sendEmptyMessage(cacheList.indexOf(cache)); yield(); - } catch (InterruptedException e) { + } catch (final InterruptedException e) { Log.i(e.getMessage()); return false; - } catch (Exception e) { + } catch (final Exception e) { Log.e("cgeocaches.LoadDetailsThread", e); } @@ -1309,7 +1298,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public LoadFromWebThread(Handler handlerIn, int listId) { handler = handlerIn; - listIdLFW = listId; + listIdLFW = StoredList.getConcreteList(listId); } public void kill() { @@ -1332,7 +1321,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity deviceCode = ""; } final Parameters params = new Parameters("code", deviceCode); - HttpResponse responseFromWeb = Network.getRequest("http://send2.cgeo.org/read.html", params); + final HttpResponse responseFromWeb = Network.getRequest("http://send2.cgeo.org/read.html", params); if (responseFromWeb != null && responseFromWeb.getStatusLine().getStatusCode() == 200) { final String response = Network.getResponseData(responseFromWeb); @@ -1372,7 +1361,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity sleep(500); //Cache was loaded 0.5s times = 0; } - } catch (InterruptedException e) { + } catch (final InterruptedException e) { Log.e("cgeocaches.LoadFromWebThread.sleep", e); } } @@ -1383,24 +1372,35 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } - private class DropDetailsThread extends Thread { + private class DropDetailsTask extends AsyncTaskWithProgress<Geocache, Void> { - final private Handler handler; - final private List<Geocache> selected; + private final boolean removeListAfterwards; - public DropDetailsThread(Handler handlerIn, List<Geocache> selectedIn) { - handler = handlerIn; - selected = selectedIn; + public DropDetailsTask(boolean removeListAfterwards) { + super(cgeocaches.this, null, res.getString(R.string.caches_drop_progress), true); + this.removeListAfterwards = removeListAfterwards; } @Override - public void run() { + protected Void doInBackgroundInternal(Geocache[] caches) { removeGeoAndDir(); - cgData.markDropped(selected); - handler.sendEmptyMessage(MSG_DONE); - + cgData.markDropped(Arrays.asList(caches)); startGeoAndDir(); + return null; + } + + @Override + protected void onPostExecuteInternal(Void result) { + // remove list in UI because of toast + if (removeListAfterwards) { + removeList(false); + } + + adapter.setSelectMode(false); + refreshCurrentList(); + replaceCacheListFromSearch(); } + } private class ClearOfflineLogsThread extends Thread { @@ -1463,7 +1463,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity return; } - StoredList list = cgData.getList(id); + final StoredList list = cgData.getList(id); if (list == null) { return; } @@ -1552,8 +1552,8 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } // apply filter settings (if there's a filter) - Set<String> geocodes = new HashSet<String>(); - for (Geocache cache : adapter.getFilteredList()) { + final Set<String> geocodes = new HashSet<String>(); + for (final Geocache cache : adapter.getFilteredList()) { geocodes.add(cache.getGeocode()); } @@ -1566,21 +1566,6 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity CGeoMap.startActivitySearch(this, searchToUse, mapTitle); } - @Override - public void goManual(View view) { - switch (type) { - case OFFLINE: - ActivityMixin.goManual(this, "c:geo-stored"); - break; - case HISTORY: - ActivityMixin.goManual(this, "c:geo-history"); - break; - default: - ActivityMixin.goManual(this, "c:geo-nearby"); - break; - } - } - private void refreshCurrentList() { switchListById(listId); } @@ -1635,39 +1620,13 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } } - /** - * set date comparator for pure event lists - * - * TODO: move this method into the adapter - */ - private void setDateComparatorForEventList() { - if (CollectionUtils.isNotEmpty(cacheList)) { - boolean eventsOnly = true; - for (Geocache cache : cacheList) { - if (!cache.isEventCache()) { - eventsOnly = false; - break; - } - } - if (eventsOnly) { - adapter.setComparator(new EventDateComparator()); - } - else if (type == CacheListType.HISTORY) { - adapter.setComparator(new VisitComparator()); - } - else if (adapter.getCacheComparator() != null && adapter.getCacheComparator() instanceof EventDateComparator) { - adapter.setComparator(null); - } - } - } - public static void startActivityNearest(final AbstractActivity context, final Geopoint coordsNow) { if (!isValidCoords(context, coordsNow)) { return; } final Intent cachesIntent = new Intent(context, cgeocaches.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.NEAREST); - cachesIntent.putExtra(Intents.EXTRAS_COORDS, coordsNow); + cachesIntent.putExtra(Intents.EXTRA_COORDS, coordsNow); context.startActivity(cachesIntent); } @@ -1680,7 +1639,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public static void startActivityAddress(final Context context, final Geopoint coords, final String address) { final Intent addressIntent = new Intent(context, cgeocaches.class); addressIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.ADDRESS); - addressIntent.putExtra(Intents.EXTRAS_COORDS, coords); + addressIntent.putExtra(Intents.EXTRA_COORDS, coords); addressIntent.putExtra(Intents.EXTRA_ADDRESS, address); context.startActivity(addressIntent); } @@ -1691,7 +1650,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } final Intent cachesIntent = new Intent(context, cgeocaches.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.COORDINATE); - cachesIntent.putExtra(Intents.EXTRAS_COORDS, coords); + cachesIntent.putExtra(Intents.EXTRA_COORDS, coords); context.startActivity(cachesIntent); } @@ -1725,11 +1684,11 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public Loader<SearchResult> onCreateLoader(int type, Bundle extras) { - AbstractSearchLoader loader = null; if (type >= CacheListLoaderType.values().length) { throw new IllegalArgumentException("invalid loader type " + type); } - CacheListLoaderType enumType = CacheListLoaderType.values()[type]; + final CacheListLoaderType enumType = CacheListLoaderType.values()[type]; + AbstractSearchLoader loader = null; switch (enumType) { case OFFLINE: listId = Settings.getLastList(); @@ -1788,7 +1747,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity loader = new OwnerGeocacheListLoader(app, ownerName); break; case MAP: - //TODO Build Nullloader + //TODO Build Null loader title = res.getString(R.string.map_map); search = (SearchResult) extras.get(Intents.EXTRA_SEARCH); replaceCacheListFromSearch(); @@ -1822,6 +1781,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity cacheList.addAll(cachesFromSearchResult); search = searchIn; adapter.reFilter(); + adapter.setInitialComparator(); adapter.forceSort(); adapter.notifyDataSetChanged(); updateTitle(); @@ -1833,7 +1793,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void onLoaderReset(Loader<SearchResult> arg0) { - //Not interessting + //Not interesting } } |
