diff options
Diffstat (limited to 'main/src/cgeo/geocaching/CacheListActivity.java')
-rw-r--r-- | main/src/cgeo/geocaching/CacheListActivity.java | 88 |
1 files changed, 52 insertions, 36 deletions
diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java index 9090a4e..96a0ac1 100644 --- a/main/src/cgeo/geocaching/CacheListActivity.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -9,7 +9,9 @@ import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.activity.ShowcaseViewBuilder; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; -import cgeo.geocaching.apps.cachelist.CacheListAppFactory; +import cgeo.geocaching.apps.cachelist.CacheListApp; +import cgeo.geocaching.apps.cachelist.CacheListApps; +import cgeo.geocaching.apps.cachelist.ListNavigationSelectionActionProvider; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.gc.RecaptchaHandler; import cgeo.geocaching.enumerations.CacheListType; @@ -19,7 +21,7 @@ import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.export.FieldnoteExport; import cgeo.geocaching.export.GpxExport; import cgeo.geocaching.files.GPXImporter; -import cgeo.geocaching.filter.FilterUserInterface; +import cgeo.geocaching.filter.FilterActivity; import cgeo.geocaching.filter.IFilter; import cgeo.geocaching.list.AbstractList; import cgeo.geocaching.list.ListNameMemento; @@ -54,8 +56,8 @@ import cgeo.geocaching.ui.WeakReferenceHandler; import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.AngleUtils; import cgeo.geocaching.utils.AsyncTaskWithProgress; +import cgeo.geocaching.utils.CalendarUtils; import cgeo.geocaching.utils.CancellableHandler; -import cgeo.geocaching.utils.DateUtils; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.RxUtils; @@ -558,7 +560,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.cache_list_options, menu); - CacheListAppFactory.addMenuItems(menu, this, res); sortProvider = (SortActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.menu_sort)); assert sortProvider != null; // We set it in the XML file sortProvider.setSelection(adapter.getCacheComparator()); @@ -579,6 +580,15 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA sortProvider.setSelection(selectedComparator); } }); + + ListNavigationSelectionActionProvider.initialize(menu.findItem(R.id.menu_cache_list_app_provider), new ListNavigationSelectionActionProvider.Callback() { + + @Override + public void onListNavigationSelected(final CacheListApp app) { + app.invoke(cacheList, CacheListActivity.this, getFilteredSearch()); + } + }); + return true; } @@ -639,6 +649,11 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA setMenuItemLabel(menu, R.id.menu_remove_from_history, R.string.cache_remove_from_history, R.string.cache_clear_history); menu.findItem(R.id.menu_import_android).setVisible(Compatibility.isStorageAccessFrameworkAvailable() && isOffline); + + final List<CacheListApp> listNavigationApps = CacheListApps.getActiveApps(); + menu.findItem(R.id.menu_cache_list_app_provider).setVisible(listNavigationApps.size() > 1); + menu.findItem(R.id.menu_cache_list_app).setVisible(listNavigationApps.size() == 1); + } catch (final RuntimeException e) { Log.e("CacheListActivity.onPrepareOptionsMenu", e); } @@ -648,7 +663,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA private boolean containsPastEvents() { for (final Geocache cache : adapter.getCheckedOrAllCaches()) { - if (DateUtils.isPastEvent(cache)) { + if (CalendarUtils.isPastEvent(cache)) { return true; } } @@ -679,9 +694,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA @Override public boolean onOptionsItemSelected(final MenuItem item) { - if (super.onOptionsItemSelected(item)) { - return true; - } switch (item.getItemId()) { case R.id.menu_show_on_map: goMap(); @@ -705,23 +717,23 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA case R.id.menu_import_android: importGpxFromAndroid(); invalidateOptionsMenuCompatible(); - return false; + return true; case R.id.menu_create_list: new StoredList.UserInterface(this).promptForListCreation(getListSwitchingRunnable(), listNameMemento.getTerm()); refreshSpinnerAdapter(); invalidateOptionsMenuCompatible(); - return false; + return true; case R.id.menu_drop_list: removeList(false); invalidateOptionsMenuCompatible(); - return false; + return true; case R.id.menu_rename_list: renameList(); - return false; + return true; case R.id.menu_invert_selection: adapter.invertSelection(); invalidateOptionsMenuCompatible(); - return false; + return true; case R.id.menu_filter: showFilterMenu(null); return true; @@ -737,7 +749,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA case R.id.menu_remove_from_history: removeFromHistoryCheck(); invalidateOptionsMenuCompatible(); - return false; + return true; case R.id.menu_move_to_list: moveCachesToOtherList(); invalidateOptionsMenuCompatible(); @@ -751,13 +763,12 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA invalidateOptionsMenuCompatible(); return true; case R.id.menu_cache_list_app: - if (!cacheToShow()) { - return false; + if (cacheToShow()) { + CacheListApps.getActiveApps().get(0).invoke(cacheList, this, getFilteredSearch()); } - return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, getFilteredSearch()); - default: - return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, search); + return true; } + return super.onOptionsItemSelected(item); } private boolean cacheToShow() { @@ -775,7 +786,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA private void deletePastEvents() { final List<Geocache> deletion = new ArrayList<>(); for (final Geocache cache : adapter.getCheckedOrAllCaches()) { - if (DateUtils.isPastEvent(cache)) { + if (CalendarUtils.isPastEvent(cache)) { deletion.add(cache); } } @@ -798,12 +809,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA */ @Override public void showFilterMenu(final View view) { - new FilterUserInterface(this).selectFilter(new Action1<IFilter>() { - @Override - public void call(@Nullable final IFilter selectedFilter) { - setFilter(selectedFilter); - } - }); + FilterActivity.selectFilter(this); } private void setComparator(final CacheComparator comparator) { @@ -1048,6 +1054,10 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA new GPXImporter(this, listId, importGpxAttachementFinishedHandler).importGPX(uri, null, getDisplayName(uri)); } } + else if (requestCode == FilterActivity.REQUEST_SELECT_FILTER && resultCode == Activity.RESULT_OK) { + final int[] filterIndex = data.getIntArrayExtra(FilterActivity.EXTRA_FILTER_RESULT); + setFilter(FilterActivity.getFilterFromPosition(filterIndex[0], filterIndex[1])); + } refreshCurrentList(); } @@ -1384,12 +1394,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA // apply filter settings (if there's a filter) final SearchResult searchToUse = getFilteredSearch(); - final int count = searchToUse.getCount(); - String mapTitle = title; - if (count > 0) { - mapTitle = title + " [" + count + "]"; - } - CGeoMap.startActivitySearch(this, searchToUse, mapTitle); + CGeoMap.startActivitySearch(this, searchToUse, title); } private void refreshCurrentList() { @@ -1463,13 +1468,23 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA context.startActivity(addressIntent); } - public static void startActivityCoordinates(final AbstractActivity context, final Geopoint coords) { + /** + * start list activity, by searching around the given point. + * + * @param name + * name of coordinates, will lead to a title like "Around ..." instead of directly showing the + * coordinates as title + */ + public static void startActivityCoordinates(final AbstractActivity context, final Geopoint coords, @Nullable final String name) { if (!isValidCoords(context, coords)) { return; } final Intent cachesIntent = new Intent(context, CacheListActivity.class); Intents.putListType(cachesIntent, CacheListType.COORDINATE); cachesIntent.putExtra(Intents.EXTRA_COORDS, coords); + if (StringUtils.isNotEmpty(name)) { + cachesIntent.putExtra(Intents.EXTRA_TITLE, context.getString(R.string.around, name)); + } context.startActivity(cachesIntent); } @@ -1600,6 +1615,10 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA loader = new PocketGeocacheListLoader(app, guid); break; } + // if there is a title given in the activity start request, use this one instead of the default + if (extras != null && StringUtils.isNotBlank(extras.getString(Intents.EXTRA_TITLE))) { + title = extras.getString(Intents.EXTRA_TITLE); + } updateTitle(); showProgress(true); showFooterLoadingCaches(); @@ -1639,8 +1658,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA /** * Allow the title bar spinner to show the same subtitle like the activity itself would show. * - * @param list - * @return */ public CharSequence getCacheListSubtitle(@NonNull final AbstractList list) { // if this is the current list, be aware of filtering @@ -1658,7 +1675,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA /** * Calculate the subtitle of the current list depending on (optional) filters. * - * @return */ private CharSequence getCurrentSubtitle() { final ArrayList<String> numbers = new ArrayList<>(); |