aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/CacheListActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/CacheListActivity.java')
-rw-r--r--main/src/cgeo/geocaching/CacheListActivity.java88
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<>();