aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-05-31 14:54:43 +0200
committerBananeweizen <bananeweizen@gmx.de>2014-05-31 14:54:43 +0200
commit6d72fe6ccbad00ec687885451d907b6fbb8936ea (patch)
treef70c70f82cc6f9d9d832af2379c8ef2e58b03ca4
parent2e575aed4a383e8a9597821c178df85f83f14e0f (diff)
downloadcgeo-6d72fe6ccbad00ec687885451d907b6fbb8936ea.zip
cgeo-6d72fe6ccbad00ec687885451d907b6fbb8936ea.tar.gz
cgeo-6d72fe6ccbad00ec687885451d907b6fbb8936ea.tar.bz2
fix #3915: show filter count also in actionbar spinner
-rw-r--r--main/src/cgeo/geocaching/CacheListActivity.java153
-rw-r--r--main/src/cgeo/geocaching/CacheListSpinnerAdapter.java18
2 files changed, 93 insertions, 78 deletions
diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java
index 21ff113..1441dd9 100644
--- a/main/src/cgeo/geocaching/CacheListActivity.java
+++ b/main/src/cgeo/geocaching/CacheListActivity.java
@@ -165,7 +165,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
dialog.setNegativeButton(res.getString(R.string.license_dismiss), new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
Cookies.clearCookies();
dialog.cancel();
}
@@ -173,7 +173,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
dialog.setPositiveButton(res.getString(R.string.license_show), new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
Cookies.clearCookies();
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/software/agreement.aspx?ID=0")));
}
@@ -217,12 +217,12 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
private static class LoadCachesHandler extends WeakReferenceHandler<CacheListActivity> {
- protected LoadCachesHandler(CacheListActivity activity) {
+ protected LoadCachesHandler(final CacheListActivity activity) {
super(activity);
}
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
final CacheListActivity activity = getActivity();
if (activity == null) {
return;
@@ -257,36 +257,20 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
}
- static String getCacheNumberString(Resources res, int count)
- {
+ private String getCacheNumberString(final Resources res, final int count) {
return res.getQuantityString(R.plurals.cache_counts, count, count);
}
protected void updateTitle() {
-
setTitle(title);
-
- final ArrayList<String> numbers = new ArrayList<String>();
- if (adapter.isFiltered()) {
- numbers.add(getCacheNumberString(getResources(), adapter.getCount()));
- }
- if (search != null) {
- numbers.add(getCacheNumberString(getResources(), search.getCount()));
- }
- if (numbers.isEmpty()) {
- getSupportActionBar().setSubtitle(null);
- }
- else {
- getSupportActionBar().setSubtitle(StringUtils.join(numbers, '/'));
- }
-
+ getSupportActionBar().setSubtitle(getCurrentSubtitle());
refreshSpinnerAdapter();
}
private final CancellableHandler loadDetailsHandler = new CancellableHandler() {
@Override
- public void handleRegularMessage(Message msg) {
+ public void handleRegularMessage(final Message msg) {
updateAdapter();
if (msg.what > -1) {
@@ -325,7 +309,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
*/
private class DownloadFromWebHandler extends CancellableHandler {
@Override
- public void handleRegularMessage(Message msg) {
+ public void handleRegularMessage(final Message msg) {
updateAdapter();
adapter.notifyDataSetChanged();
@@ -363,7 +347,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
private final CancellableHandler clearOfflineLogsHandler = new CancellableHandler() {
@Override
- public void handleRegularMessage(Message msg) {
+ public void handleRegularMessage(final Message msg) {
adapter.setSelectMode(false);
refreshCurrentList();
@@ -376,7 +360,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
private final Handler importGpxAttachementFinishedHandler = new Handler() {
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
refreshCurrentList();
}
};
@@ -388,7 +372,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public void onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -454,8 +438,8 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setListNavigationCallbacks(mCacheListSpinnerAdapter, new ActionBar.OnNavigationListener() {
@Override
- public boolean onNavigationItemSelected(int i, long l) {
- int newListId = mCacheListSpinnerAdapter.getItem(i).id;
+ public boolean onNavigationItemSelected(final int i, final long l) {
+ final int newListId = mCacheListSpinnerAdapter.getItem(i).id;
if (newListId != listId) {
switchListById(newListId);
}
@@ -471,9 +455,9 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
mCacheListSpinnerAdapter.clear();
- AbstractList list = AbstractList.getListById(listId);
+ final AbstractList list = AbstractList.getListById(listId);
- for (AbstractList l: StoredList.UserInterface.getMenuLists(false, PseudoList.NEW_LIST.id)) {
+ for (final AbstractList l: StoredList.UserInterface.getMenuLists(false, PseudoList.NEW_LIST.id)) {
mCacheListSpinnerAdapter.add(l);
}
@@ -481,7 +465,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public void onConfigurationChanged(Configuration newConfig) {
+ public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (currentLoader != null && currentLoader.isLoading()) {
showFooterLoadingCaches();
@@ -502,7 +486,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
new StoredList.UserInterface(this).promptForListSelection(R.string.gpx_import_select_list_title, new Action1<Integer>() {
@Override
- public void call(Integer listId) {
+ public void call(final Integer listId) {
new GPXImporter(CacheListActivity.this, listId, importGpxAttachementFinishedHandler).importGPX();
switchListById(listId);
}
@@ -549,7 +533,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
+ public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.cache_list_options, menu);
CacheListAppFactory.addMenuItems(menu, this, res);
@@ -562,7 +546,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public boolean onPrepareOptionsMenu(Menu menu) {
+ public boolean onPrepareOptionsMenu(final Menu menu) {
super.onPrepareOptionsMenu(menu);
final boolean isHistory = type == CacheListType.HISTORY;
@@ -663,7 +647,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
if (super.onOptionsItemSelected(item)) {
return true;
}
@@ -719,7 +703,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
final CacheComparator oldComparator = adapter.getCacheComparator();
new ComparatorUserInterface(this).selectComparator(oldComparator, new Action1<CacheComparator>() {
@Override
- public void call(CacheComparator selectedComparator) {
+ public void call(final CacheComparator selectedComparator) {
// selecting the same sorting twice will toggle the order
if (selectedComparator != null && oldComparator != null && selectedComparator.getClass().equals(oldComparator.getClass())) {
adapter.toggleInverseSort();
@@ -802,7 +786,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
public void showFilterMenu(final View view) {
new FilterUserInterface(this).selectFilter(new Action1<IFilter>() {
@Override
- public void call(IFilter selectedFilter) {
+ public void call(final IFilter selectedFilter) {
if (selectedFilter != null) {
setFilter(selectedFilter);
} else {
@@ -858,7 +842,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
new StoredList.UserInterface(this).promptForListSelection(R.string.cache_menu_move_list, new Action1<Integer>() {
@Override
- public void call(Integer newListId) {
+ public void call(final Integer newListId) {
DataStore.moveToList(adapter.getCheckedOrAllCaches(), newListId);
adapter.setSelectMode(false);
@@ -868,7 +852,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public boolean onContextItemSelected(MenuItem item) {
+ public boolean onContextItemSelected(final MenuItem item) {
ContextMenu.ContextMenuInfo info = item.getMenuInfo();
// restore menu info for sub menu items, see
@@ -905,7 +889,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
case R.id.menu_drop_cache:
cache.drop(new Handler() {
@Override
- public void handleMessage(Message msg) {
+ public void handleMessage(final Message msg) {
adapter.notifyDataSetChanged();
refreshCurrentList();
}
@@ -915,7 +899,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
new StoredList.UserInterface(this).promptForListSelection(R.string.cache_menu_move_list, new Action1<Integer>() {
@Override
- public void call(Integer newListId) {
+ public void call(final Integer newListId) {
DataStore.moveToList(Collections.singletonList(cache), newListId);
adapter.setSelectMode(false);
refreshCurrentList();
@@ -956,7 +940,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
return adapter.findCacheByGeocode(contextMenuGeocode);
}
- private boolean setFilter(IFilter filter) {
+ private boolean setFilter(final IFilter filter) {
adapter.setFilter(filter);
prepareFilterBar();
updateTitle();
@@ -965,7 +949,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
+ public boolean onKeyDown(final int keyCode, final KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (adapter.isSelectMode()) {
adapter.setSelectMode(false);
@@ -1029,7 +1013,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_IMPORT_GPX && resultCode == Activity.RESULT_OK) {
@@ -1045,7 +1029,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
refreshCurrentList();
}
- private String getDisplayName(Uri uri) {
+ private String getDisplayName(final Uri uri) {
Cursor cursor = null;
try {
cursor = getContentResolver().query(uri, new String[] { OpenableColumns.DISPLAY_NAME }, null, null, null);
@@ -1078,7 +1062,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
@Override
public void call(final Integer selectedListId) {
// in case of online lists, set the list id to a concrete list now
- for (Geocache geocache : caches) {
+ for (final Geocache geocache : caches) {
geocache.setListId(selectedListId);
}
refreshStoredInternal(caches);
@@ -1112,11 +1096,11 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
public void removeFromHistoryCheck() {
- int message = (adapter != null && adapter.getCheckedCount() > 0) ? R.string.cache_remove_from_history
+ final int message = (adapter != null && adapter.getCheckedCount() > 0) ? R.string.cache_remove_from_history
: R.string.cache_clear_history;
Dialogs.confirmYesNo(this, R.string.caches_removing_from_history, message, new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
removeFromHistory();
dialog.cancel();
}
@@ -1140,7 +1124,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
Dialogs.confirm(this, R.string.web_import_title, R.string.init_sendToCgeo_description, new OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int which) {
+ public void onClick(final DialogInterface dialog, final int which) {
SettingsActivity.openForScreen(R.string.preference_screen_sendtocgeo, CacheListActivity.this);
}
});
@@ -1157,18 +1141,18 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
public void dropStored(final boolean removeListAfterwards) {
- int message = (adapter.getCheckedCount() > 0) ? R.string.caches_drop_selected_ask : R.string.caches_drop_all_ask;
+ final int message = (adapter.getCheckedCount() > 0) ? R.string.caches_drop_selected_ask : R.string.caches_drop_all_ask;
Dialogs.confirmYesNo(this, R.string.caches_drop_stored, message, new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
dropSelected(removeListAfterwards);
dialog.cancel();
}
});
}
- public void dropSelected(boolean removeListAfterwards) {
+ public void dropSelected(final boolean removeListAfterwards) {
final List<Geocache> selected = adapter.getCheckedOrAllCaches();
new DropDetailsTask(removeListAfterwards).execute(selected.toArray(new Geocache[selected.size()]));
}
@@ -1182,7 +1166,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
final private CancellableHandler handler;
final private List<Geocache> caches;
- public LoadDetailsThread(CancellableHandler handler, List<Geocache> caches) {
+ public LoadDetailsThread(final CancellableHandler handler, final List<Geocache> caches) {
this.handler = handler;
this.caches = caches;
}
@@ -1213,7 +1197,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
* @return
* <code>false</code> if the storing was interrupted, <code>true</code> otherwise
*/
- private boolean refreshCache(Geocache cache) {
+ private boolean refreshCache(final Geocache cache) {
try {
if (handler.isCancelled()) {
throw new InterruptedException("Stopped storing process.");
@@ -1237,7 +1221,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
final private CancellableHandler handler;
final private int listIdLFW;
- public LoadFromWebThread(CancellableHandler handler, int listId) {
+ public LoadFromWebThread(final CancellableHandler handler, final int listId) {
this.handler = handler;
listIdLFW = StoredList.getConcreteList(listId);
}
@@ -1289,19 +1273,19 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
private final boolean removeListAfterwards;
- public DropDetailsTask(boolean removeListAfterwards) {
+ public DropDetailsTask(final boolean removeListAfterwards) {
super(CacheListActivity.this, null, res.getString(R.string.caches_drop_progress), true);
this.removeListAfterwards = removeListAfterwards;
}
@Override
- protected Void doInBackgroundInternal(Geocache[] caches) {
+ protected Void doInBackgroundInternal(final Geocache[] caches) {
DataStore.markDropped(Arrays.asList(caches));
return null;
}
@Override
- protected void onPostExecuteInternal(Void result) {
+ protected void onPostExecuteInternal(final Void result) {
// remove list in UI because of toast
if (removeListAfterwards) {
removeList(false);
@@ -1319,7 +1303,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
final private Handler handler;
final private List<Geocache> selected;
- public ClearOfflineLogsThread(Handler handlerIn) {
+ public ClearOfflineLogsThread(final Handler handlerIn) {
handler = handlerIn;
selected = adapter.getCheckedOrAllCaches();
}
@@ -1334,7 +1318,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
private class MoreCachesListener implements View.OnClickListener {
@Override
- public void onClick(View arg0) {
+ public void onClick(final View arg0) {
showProgress(true);
showFooterLoadingCaches();
listFooter.setOnClickListener(null);
@@ -1363,7 +1347,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
};
}
- public void switchListById(int id) {
+ public void switchListById(final int id) {
if (id < 0) {
return;
}
@@ -1436,7 +1420,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
// ask him, if there are caches on the list
Dialogs.confirm(this, R.string.list_dialog_remove_title, R.string.list_dialog_remove_description, R.string.list_dialog_remove, new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int whichButton) {
+ public void onClick(final DialogInterface dialog, final int whichButton) {
removeListInternal();
}
});
@@ -1522,7 +1506,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
context.startActivity(cachesIntent);
}
- public static void startActivityHistory(Context context) {
+ public static void startActivityHistory(final Context context) {
final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.HISTORY);
context.startActivity(cachesIntent);
@@ -1546,7 +1530,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
context.startActivity(cachesIntent);
}
- private static boolean isValidCoords(AbstractActivity context, Geopoint coords) {
+ private static boolean isValidCoords(final AbstractActivity context, final Geopoint coords) {
if (coords == null) {
context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_coordinates));
return false;
@@ -1588,7 +1572,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
// Loaders
@Override
- public Loader<SearchResult> onCreateLoader(int type, Bundle extras) {
+ public Loader<SearchResult> onCreateLoader(final int type, final Bundle extras) {
if (type >= CacheListLoaderType.values().length) {
throw new IllegalArgumentException("invalid loader type " + type);
}
@@ -1691,7 +1675,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
return loader;
}
- private void rememberTerm(String term) {
+ private void rememberTerm(final String term) {
// set the title of the activity
title = term;
// and remember this term for potential use in list creation
@@ -1699,7 +1683,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public void onLoadFinished(Loader<SearchResult> arg0, SearchResult searchIn) {
+ public void onLoadFinished(final Loader<SearchResult> arg0, final SearchResult searchIn) {
// The database search was moved into the UI call intentionally. If this is done before the runOnUIThread,
// then we have 2 sets of caches in memory. This can lead to OOM for huge cache lists.
if (searchIn != null) {
@@ -1720,7 +1704,38 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
}
@Override
- public void onLoaderReset(Loader<SearchResult> arg0) {
+ public void onLoaderReset(final Loader<SearchResult> arg0) {
//Not interesting
}
+
+ /**
+ * 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
+ if (list.id == listId) {
+ return getCurrentSubtitle();
+ }
+ // otherwise return the overall number
+ return getCacheNumberString(getResources(), list.getCount());
+ }
+
+ /**
+ * Calculate the subtitle of the current list depending on (optional) filters.
+ *
+ * @return
+ */
+ private CharSequence getCurrentSubtitle() {
+ final ArrayList<String> numbers = new ArrayList<String>();
+ if (adapter.isFiltered()) {
+ numbers.add(getCacheNumberString(getResources(), adapter.getCount()));
+ }
+ if (search != null) {
+ numbers.add(getCacheNumberString(getResources(), search.getCount()));
+ }
+ return numbers.isEmpty() ? null : StringUtils.join(numbers, '/');
+ }
}
diff --git a/main/src/cgeo/geocaching/CacheListSpinnerAdapter.java b/main/src/cgeo/geocaching/CacheListSpinnerAdapter.java
index 5ace70e..172daec 100644
--- a/main/src/cgeo/geocaching/CacheListSpinnerAdapter.java
+++ b/main/src/cgeo/geocaching/CacheListSpinnerAdapter.java
@@ -16,30 +16,30 @@ class CacheListSpinnerAdapter extends ArrayAdapter<AbstractList> {
TextView subtitle;
}
- private final Context mContext;
+ private final CacheListActivity cacheListActivity;
- public CacheListSpinnerAdapter(Context context, int resource) {
+ public CacheListSpinnerAdapter(final CacheListActivity context, final int resource) {
super(context, resource);
- mContext = context;
+ cacheListActivity = context;
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
+ public View getView(final int position, final View convertView, final ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ public View getDropDownView(final int position, final View convertView, final ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(final int position, final View convertView, final ViewGroup parent) {
View resultView = convertView;
- LayoutInflater inflater =
- (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ final LayoutInflater inflater =
+ (LayoutInflater) cacheListActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
CacheListSpinnerAdapter.ViewHolder holder;
@@ -54,11 +54,11 @@ class CacheListSpinnerAdapter extends ArrayAdapter<AbstractList> {
holder = (CacheListSpinnerAdapter.ViewHolder) resultView.getTag();
}
- AbstractList list = getItem(position);
+ final AbstractList list = getItem(position);
holder.title.setText(list.getTitle());
if (list.getCount() >= 0) {
holder.subtitle.setVisibility(View.VISIBLE);
- holder.subtitle.setText(CacheListActivity.getCacheNumberString(mContext.getResources(),list.getCount()));
+ holder.subtitle.setText(cacheListActivity.getCacheListSubtitle(list));
} else {
holder.subtitle.setVisibility(View.GONE);
}