diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2012-01-18 20:28:59 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2012-01-18 20:28:59 +0100 |
| commit | ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a (patch) | |
| tree | 1f3022b676a5f2770161ed4925aa5b5070c247cc | |
| parent | b9d5923ab7f63864c61074f8893e6099257e484a (diff) | |
| download | cgeo-ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a.zip cgeo-ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a.tar.gz cgeo-ff4a9b7d4e7112a0812ea61b7c877f7cbd11306a.tar.bz2 | |
fix #1004: Drop found
| -rw-r--r-- | main/src/cgeo/geocaching/cgeocaches.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/filter/StateFilter.java | 96 |
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()]); + } + +} |
