aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-01-18 20:28:59 +0100
committerBananeweizen <bananeweizen@gmx.de>2012-01-18 20:28:59 +0100
commitff4a9b7d4e7112a0812ea61b7c877f7cbd11306a (patch)
tree1f3022b676a5f2770161ed4925aa5b5070c247cc
parentb9d5923ab7f63864c61074f8893e6099257e484a (diff)
downloadcgeo-ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a.zip
cgeo-ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a.tar.gz
cgeo-ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a.tar.bz2
fix #1004: Drop found
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java6
-rw-r--r--main/src/cgeo/geocaching/filter/StateFilter.java96
2 files changed, 102 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 66f8fee..5923009 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -13,6 +13,7 @@ import cgeo.geocaching.files.GPXImporter;
import cgeo.geocaching.filter.AttributeFilter;
import cgeo.geocaching.filter.IFilter;
import cgeo.geocaching.filter.SizeFilter;
+import cgeo.geocaching.filter.StateFilter;
import cgeo.geocaching.filter.TrackablesFilter;
import cgeo.geocaching.filter.TypeFilter;
import cgeo.geocaching.geopoint.Geopoint;
@@ -128,6 +129,7 @@ public class cgeocaches extends AbstractListActivity {
private static final int MENU_DROP_CACHES_AND_LIST = 65;
private static final int MENU_DEFAULT_NAVIGATION = 66;
private static final int SUBMENU_FILTER_ATTRIBUTES = 67;
+ private static final int SUBMENU_FILTER_STATE = 68;
private String action = null;
private CacheListType type = null;
@@ -781,6 +783,7 @@ public class cgeocaches extends AbstractListActivity {
}
subMenuFilter.add(0, SUBMENU_FILTER_SIZE, 0, res.getString(R.string.caches_filter_size));
subMenuFilter.add(0, SUBMENU_FILTER_ATTRIBUTES, 0, res.getString(R.string.cache_attributes));
+ subMenuFilter.add(0, SUBMENU_FILTER_STATE, 0, res.getString(R.string.cache_status));
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));
@@ -1056,6 +1059,9 @@ public class cgeocaches extends AbstractListActivity {
case SUBMENU_FILTER_ATTRIBUTES:
showFilterMenu(AttributeFilter.getAllFilters(), res.getString(R.string.cache_attributes));
return true;
+ case SUBMENU_FILTER_STATE:
+ showFilterMenu(StateFilter.getAllFilters(), res.getString(R.string.cache_status));
+ return true;
case MENU_FILTER_TRACKABLES:
setFilter(new TrackablesFilter(res.getString(R.string.caches_filter_track)));
return true;
diff --git a/main/src/cgeo/geocaching/filter/StateFilter.java b/main/src/cgeo/geocaching/filter/StateFilter.java
new file mode 100644
index 0000000..454cc92
--- /dev/null
+++ b/main/src/cgeo/geocaching/filter/StateFilter.java
@@ -0,0 +1,96 @@
+package cgeo.geocaching.filter;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.cgCache;
+import cgeo.geocaching.cgeoapplication;
+
+import android.content.res.Resources;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public abstract class StateFilter extends AbstractFilter {
+
+ public StateFilter(String name) {
+ super(name);
+ }
+
+ private static class StateFoundFilter extends StateFilter {
+
+ public StateFoundFilter(String name) {
+ super(name);
+ }
+
+ @Override
+ public boolean accepts(cgCache cache) {
+ return cache.isFound();
+ }
+
+ }
+
+ private static class StateArchivedFilter extends StateFilter {
+ public StateArchivedFilter(String name) {
+ super(name);
+ }
+
+ @Override
+ public boolean accepts(cgCache cache) {
+ return cache.isArchived();
+ }
+ }
+
+ private static class StateDisabledFilter extends StateFilter {
+ public StateDisabledFilter(String name) {
+ super(name);
+ }
+
+ @Override
+ public boolean accepts(cgCache cache) {
+ return cache.isDisabled();
+ }
+ }
+
+ private static class StatePremiumFilter extends StateFilter {
+ public StatePremiumFilter(String name) {
+ super(name);
+ }
+
+ @Override
+ public boolean accepts(cgCache cache) {
+ return cache.isPremiumMembersOnly();
+ }
+ }
+
+ private static class StateOfflineLogFilter extends StateFilter {
+ public StateOfflineLogFilter(String name) {
+ super(name);
+ }
+
+ @Override
+ public boolean accepts(cgCache cache) {
+ return cache.isLogOffline();
+ }
+ }
+
+ public static AbstractFilter[] getAllFilters() {
+ final Resources res = cgeoapplication.getInstance().getResources();
+ final ArrayList<StateFilter> filters = new ArrayList<StateFilter>();
+ filters.add(new StateFoundFilter(res.getString(R.string.cache_status_found)));
+ filters.add(new StateArchivedFilter(res.getString(R.string.cache_status_archived)));
+ filters.add(new StateDisabledFilter(res.getString(R.string.cache_status_disabled)));
+ filters.add(new StatePremiumFilter(res.getString(R.string.cache_status_premium)));
+ filters.add(new StateOfflineLogFilter(res.getString(R.string.cache_status_offline_log)));
+
+ Collections.sort(filters, new Comparator<StateFilter>() {
+
+ @Override
+ public int compare(StateFilter filter1, StateFilter filter2) {
+ return filter1.getName().compareToIgnoreCase(filter2.getName());
+ }
+ });
+
+ return filters.toArray(new StateFilter[filters.size()]);
+ }
+
+}