aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/filter
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/filter')
-rw-r--r--main/src/cgeo/geocaching/filter/AbstractFilter.java15
-rw-r--r--main/src/cgeo/geocaching/filter/AttributeFilter.java2
-rw-r--r--main/src/cgeo/geocaching/filter/DistanceFilter.java2
-rw-r--r--main/src/cgeo/geocaching/filter/FilterActivity.java154
-rw-r--r--main/src/cgeo/geocaching/filter/FilterRegistry.java86
-rw-r--r--main/src/cgeo/geocaching/filter/FilterUserInterface.java133
-rw-r--r--main/src/cgeo/geocaching/filter/IFilter.java6
-rw-r--r--main/src/cgeo/geocaching/filter/ModifiedFilter.java3
-rw-r--r--main/src/cgeo/geocaching/filter/OfflineLogFilter.java19
-rw-r--r--main/src/cgeo/geocaching/filter/OriginFilter.java2
-rw-r--r--main/src/cgeo/geocaching/filter/OwnRatingFilter.java3
-rw-r--r--main/src/cgeo/geocaching/filter/PersonalDataFilterFactory.java2
-rw-r--r--main/src/cgeo/geocaching/filter/PersonalNoteFilter.java3
-rw-r--r--main/src/cgeo/geocaching/filter/PopularityFilter.java2
-rw-r--r--main/src/cgeo/geocaching/filter/PopularityRatioFilter.java2
-rw-r--r--main/src/cgeo/geocaching/filter/RatingFilter.java14
-rw-r--r--main/src/cgeo/geocaching/filter/SizeFilter.java5
-rw-r--r--main/src/cgeo/geocaching/filter/StateFilter.java156
-rw-r--r--main/src/cgeo/geocaching/filter/StateFilterFactory.java145
-rw-r--r--main/src/cgeo/geocaching/filter/TrackablesFilter.java14
-rw-r--r--main/src/cgeo/geocaching/filter/TypeFilter.java8
21 files changed, 445 insertions, 331 deletions
diff --git a/main/src/cgeo/geocaching/filter/AbstractFilter.java b/main/src/cgeo/geocaching/filter/AbstractFilter.java
index 248c9c2..4d521c5 100644
--- a/main/src/cgeo/geocaching/filter/AbstractFilter.java
+++ b/main/src/cgeo/geocaching/filter/AbstractFilter.java
@@ -1,5 +1,6 @@
package cgeo.geocaching.filter;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import org.eclipse.jdt.annotation.NonNull;
@@ -8,12 +9,18 @@ import java.util.ArrayList;
import java.util.List;
abstract class AbstractFilter implements IFilter {
+ @NonNull
private final String name;
- protected AbstractFilter(final String name) {
+ protected AbstractFilter(final int nameResourceId) {
+ this(CgeoApplication.getInstance().getString(nameResourceId));
+ }
+
+ protected AbstractFilter(@NonNull final String name) {
this.name = name;
}
+
@Override
public void filter(@NonNull final List<Geocache> list) {
final List<Geocache> itemsToRemove = new ArrayList<>();
@@ -26,6 +33,7 @@ abstract class AbstractFilter implements IFilter {
}
@Override
+ @NonNull
public String getName() {
return name;
}
@@ -39,4 +47,9 @@ abstract class AbstractFilter implements IFilter {
public String toString() {
return getName();
}
+
+ @Override
+ public int getImageId() {
+ return 0;
+ }
}
diff --git a/main/src/cgeo/geocaching/filter/AttributeFilter.java b/main/src/cgeo/geocaching/filter/AttributeFilter.java
index 2fc6eb2..6ed4a8f 100644
--- a/main/src/cgeo/geocaching/filter/AttributeFilter.java
+++ b/main/src/cgeo/geocaching/filter/AttributeFilter.java
@@ -15,7 +15,7 @@ class AttributeFilter extends AbstractFilter {
private final String attribute;
- public AttributeFilter(final String name, final String attribute) {
+ public AttributeFilter(@NonNull final String name, final String attribute) {
super(name);
this.attribute = attribute;
}
diff --git a/main/src/cgeo/geocaching/filter/DistanceFilter.java b/main/src/cgeo/geocaching/filter/DistanceFilter.java
index f1ba7f8..b352f5d 100644
--- a/main/src/cgeo/geocaching/filter/DistanceFilter.java
+++ b/main/src/cgeo/geocaching/filter/DistanceFilter.java
@@ -17,7 +17,7 @@ class DistanceFilter extends AbstractFilter {
private final int minDistance;
private final int maxDistance;
- public DistanceFilter(final String name, final int minDistance, final int maxDistance) {
+ public DistanceFilter(@NonNull final String name, final int minDistance, final int maxDistance) {
super(name);
this.minDistance = minDistance;
this.maxDistance = maxDistance;
diff --git a/main/src/cgeo/geocaching/filter/FilterActivity.java b/main/src/cgeo/geocaching/filter/FilterActivity.java
new file mode 100644
index 0000000..13a2263
--- /dev/null
+++ b/main/src/cgeo/geocaching/filter/FilterActivity.java
@@ -0,0 +1,154 @@
+package cgeo.geocaching.filter;
+
+import butterknife.ButterKnife;
+import butterknife.InjectView;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.activity.AbstractActionBarActivity;
+import cgeo.geocaching.filter.FilterRegistry.FactoryEntry;
+import cgeo.geocaching.utils.Log;
+
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.OptionsItem;
+import org.androidannotations.annotations.OptionsMenu;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ExpandableListView;
+import android.widget.ExpandableListView.OnChildClickListener;
+import android.widget.LinearLayout;
+import android.widget.SimpleExpandableListAdapter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Show a filter selection using an {@code ExpandableListView}.
+ */
+@OptionsMenu(R.menu.filter_options)
+@EActivity
+public class FilterActivity extends AbstractActionBarActivity {
+
+ public static final String EXTRA_FILTER_RESULT = null;
+ public static final int REQUEST_SELECT_FILTER = 1234;
+
+ private static final String KEY_FILTER_NAME = "filterName";
+ private static final String KEY_FILTER_GROUP_NAME = "filterGroupName";
+
+ @InjectView(R.id.filterList) protected ExpandableListView filterList;
+ @InjectView(R.id.filters) protected LinearLayout filtersContainer;
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState, R.layout.filter_activity);
+ ButterKnife.inject(this);
+
+ createListAdapter();
+ }
+
+ private void createListAdapter() {
+ final SimpleExpandableListAdapter adapter =
+ new SimpleExpandableListAdapter(
+ this,
+ // top level entries in the next 4 lines
+ createFilterTopLevelGroups(),
+ android.R.layout.simple_expandable_list_item_1,
+ new String[] { KEY_FILTER_GROUP_NAME },
+ new int[] { android.R.id.text1 },
+
+ // child level entries in the next 4 lines
+ createFilterChildren(),
+ android.R.layout.simple_expandable_list_item_2,
+ new String[] { KEY_FILTER_NAME, "CHILD_NAME" },
+ new int[] { android.R.id.text1 }
+ );
+ filterList.setAdapter(adapter);
+ filterList.setOnChildClickListener(new OnChildClickListener() {
+
+ @Override
+ public boolean onChildClick(final ExpandableListView parent, final View v, final int groupPosition, final int childPosition, final long id) {
+ setFilterResult(groupPosition, childPosition);
+ return true;
+ }
+
+ });
+ }
+
+ public static @Nullable IFilter getFilterFromPosition(final int groupPosition, final int childPosition) {
+ if (groupPosition < 0 || childPosition < 0) {
+ return null;
+ }
+ final FactoryEntry factoryEntry = FilterRegistry.getInstance().getFactories().get(groupPosition);
+ return createFilterFactory(factoryEntry.getFactory()).getFilters().get(childPosition);
+ }
+
+ /**
+ * Creates the group list with the mapped properties.
+ */
+ private static List<Map<String, String>> createFilterTopLevelGroups() {
+ final ArrayList<Map<String, String>> groups = new ArrayList<>();
+ for (final FactoryEntry factoryEntry : FilterRegistry.getInstance().getFactories()) {
+ final Map<String, String> map = new HashMap<>();
+ map.put(KEY_FILTER_GROUP_NAME, factoryEntry.getName());
+ groups.add(map);
+ }
+ return groups;
+ }
+
+ private static List<List<Map<String, String>>> createFilterChildren() {
+ final List<List<Map<String, String>>> listOfChildGroups = new ArrayList<>();
+
+ for (final FactoryEntry factoryEntry : FilterRegistry.getInstance().getFactories()) {
+ final IFilterFactory factory = createFilterFactory(factoryEntry.getFactory());
+ final List<? extends IFilter> filters = factory.getFilters();
+
+ final List<Map<String, String>> childGroups = new ArrayList<>(filters.size());
+
+ for (final IFilter filter : filters) {
+ final HashMap<String, String> hashMap = new HashMap<>(1);
+ hashMap.put(KEY_FILTER_NAME, filter.getName());
+ hashMap.put("CHILD_NAME", filter.getName());
+ childGroups.add(hashMap);
+ }
+ listOfChildGroups.add(childGroups);
+ }
+ return listOfChildGroups;
+ }
+
+ private static IFilterFactory createFilterFactory(final Class<? extends IFilterFactory> class1) {
+ try {
+ return class1.newInstance();
+ } catch (final InstantiationException e) {
+ Log.e("createFilterFactory", e);
+ } catch (final IllegalAccessException e) {
+ Log.e("createFilterFactory", e);
+ }
+ return null;
+ }
+
+ /**
+ * After calling this method, the calling activity must implement onActivityResult, and check the
+ * {@link #EXTRA_FILTER_RESULT}.
+ */
+ public static void selectFilter(@NonNull final Activity context) {
+ context.startActivityForResult(new Intent(context, FilterActivity_.class), REQUEST_SELECT_FILTER);
+ }
+
+ @OptionsItem(R.id.menu_reset_filter)
+ void resetFilter() {
+ setFilterResult(-1, -1);
+ }
+
+ private void setFilterResult(final int groupPosition, final int childPosition) {
+ final Intent resultIntent = new Intent();
+ resultIntent.putExtra(EXTRA_FILTER_RESULT, new int[] { groupPosition, childPosition });
+ setResult(Activity.RESULT_OK, resultIntent);
+ finish();
+ }
+}
diff --git a/main/src/cgeo/geocaching/filter/FilterRegistry.java b/main/src/cgeo/geocaching/filter/FilterRegistry.java
new file mode 100644
index 0000000..d6d9db9
--- /dev/null
+++ b/main/src/cgeo/geocaching/filter/FilterRegistry.java
@@ -0,0 +1,86 @@
+package cgeo.geocaching.filter;
+
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.R;
+import cgeo.geocaching.filter.SizeFilter.Factory;
+
+import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
+
+import android.content.res.Resources;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * singleton registry of all available filter components
+ *
+ */
+public class FilterRegistry {
+ private final List<FactoryEntry> registry = new ArrayList<>();
+ private static Resources res;
+
+ static class FactoryEntry {
+ private final String name;
+ private final @NonNull Class<? extends IFilterFactory> filterFactory;
+
+ public FactoryEntry(final String name, final @NonNull Class<? extends IFilterFactory> filterFactory) {
+ this.name = name;
+ this.filterFactory = filterFactory;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Class<? extends IFilterFactory> getFactory() {
+ return filterFactory;
+ }
+ }
+
+ private static class SingletonHolder {
+ private static final FilterRegistry INSTANCE = new FilterRegistry();
+ }
+
+ public static FilterRegistry getInstance() {
+ return SingletonHolder.INSTANCE;
+ }
+
+ private FilterRegistry() {
+ res = CgeoApplication.getInstance().getResources();
+ register(R.string.caches_filter_type, TypeFilter.Factory.class);
+ register(R.string.caches_filter_size, SizeFilter.Factory.class);
+ register(R.string.cache_terrain, TerrainFilter.Factory.class);
+ register(R.string.cache_difficulty, DifficultyFilter.Factory.class);
+ register(R.string.cache_attributes, AttributeFilter.Factory.class);
+ register(R.string.cache_status, StateFilterFactory.class);
+ register(R.string.caches_filter_origin, OriginFilter.Factory.class);
+ register(R.string.caches_filter_distance, DistanceFilter.Factory.class);
+ register(R.string.caches_filter_popularity, PopularityFilter.Factory.class);
+ register(R.string.caches_filter_popularity_ratio, PopularityRatioFilter.Factory.class);
+ register(R.string.caches_filter_personal_data, PersonalDataFilterFactory.class);
+ }
+
+ private void register(final int resourceId, final @NonNull Class<? extends IFilterFactory> factoryClass) {
+ registry.add(new FactoryEntry(res.getString(resourceId), factoryClass));
+ }
+
+ public String getFactoryName(final Class<Factory> factoryClass) {
+ for (final FactoryEntry entry : registry) {
+ if (entry.filterFactory == factoryClass) {
+ return entry.name;
+ }
+ }
+ return StringUtils.EMPTY;
+ }
+
+ public List<FactoryEntry> getFactories() {
+ return Collections.unmodifiableList(registry);
+ }
+}
diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java
deleted file mode 100644
index 2d7dafc..0000000
--- a/main/src/cgeo/geocaching/filter/FilterUserInterface.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package cgeo.geocaching.filter;
-
-import cgeo.geocaching.CgeoApplication;
-import cgeo.geocaching.R;
-import cgeo.geocaching.enumerations.CacheType;
-import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.utils.Log;
-import cgeo.geocaching.utils.TextUtils;
-
-import rx.functions.Action1;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.widget.ArrayAdapter;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-public final class FilterUserInterface {
-
- private static class FactoryEntry {
- private final String name;
- private final Class<? extends IFilterFactory> filterFactory;
-
- public FactoryEntry(final String name, final Class<? extends IFilterFactory> filterFactory) {
- this.name = name;
- this.filterFactory = filterFactory;
- }
-
- @Override
- public String toString() {
- return name;
- }
- }
-
- private final Activity activity;
- private final ArrayList<FactoryEntry> registry;
- private final Resources res;
-
- public FilterUserInterface(final Activity activity) {
- this.activity = activity;
- this.res = CgeoApplication.getInstance().getResources();
-
- registry = new ArrayList<>();
- if (Settings.getCacheType() == CacheType.ALL) {
- register(R.string.caches_filter_type, TypeFilter.Factory.class);
- }
- register(R.string.caches_filter_size, SizeFilter.Factory.class);
- register(R.string.cache_terrain, TerrainFilter.Factory.class);
- register(R.string.cache_difficulty, DifficultyFilter.Factory.class);
- register(R.string.cache_attributes, AttributeFilter.Factory.class);
- register(R.string.cache_status, StateFilter.Factory.class);
- register(R.string.caches_filter_track, TrackablesFilter.class);
- register(R.string.caches_filter_origin, OriginFilter.Factory.class);
- register(R.string.caches_filter_distance, DistanceFilter.Factory.class);
- register(R.string.caches_filter_popularity, PopularityFilter.Factory.class);
- register(R.string.caches_filter_popularity_ratio, PopularityRatioFilter.Factory.class);
- register(R.string.caches_filter_personal_data, PersonalDataFilterFactory.class);
- register(R.string.caches_filter_rating, RatingFilter.class);
-
- // sort by localized names
- final Collator collator = TextUtils.getCollator();
- Collections.sort(registry, new Comparator<FactoryEntry>() {
-
- @Override
- public int compare(final FactoryEntry lhs, final FactoryEntry rhs) {
- return collator.compare(lhs.name, rhs.name);
- }
- });
-
- // reset shall be last
- register(R.string.caches_filter_clear, null);
- }
-
- private void register(final int resourceId, final Class<? extends IFilterFactory> factoryClass) {
- registry.add(new FactoryEntry(res.getString(resourceId), factoryClass));
- }
-
- public void selectFilter(final Action1<IFilter> runAfterwards) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
- builder.setTitle(R.string.caches_filter_title);
-
- final ArrayAdapter<FactoryEntry> adapter = new ArrayAdapter<>(activity, android.R.layout.select_dialog_item, registry);
-
- builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(final DialogInterface dialog, final int itemIndex) {
- final FactoryEntry entry = adapter.getItem(itemIndex);
- // reset?
- if (entry.filterFactory == null) {
- runAfterwards.call(null);
- }
- else {
- try {
- final IFilterFactory factoryInstance = entry.filterFactory.newInstance();
- selectFromFactory(factoryInstance, entry.name, runAfterwards);
- } catch (final Exception e) {
- Log.e("selectFilter", e);
- }
- }
- }
- });
-
- builder.create().show();
- }
-
- private void selectFromFactory(final IFilterFactory factory, final String menuTitle, final Action1<IFilter> runAfterwards) {
- final List<IFilter> filters = Collections.unmodifiableList(factory.getFilters());
- if (filters.size() == 1) {
- runAfterwards.call(filters.get(0));
- return;
- }
-
- final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
- builder.setTitle(menuTitle);
-
- final ArrayAdapter<IFilter> adapter = new ArrayAdapter<>(activity, android.R.layout.select_dialog_item, filters);
- builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(final DialogInterface dialog, final int item) {
- runAfterwards.call(filters.get(item));
- }
- });
-
- builder.create().show();
- }
-
-}
diff --git a/main/src/cgeo/geocaching/filter/IFilter.java b/main/src/cgeo/geocaching/filter/IFilter.java
index de39e5a..f590f79 100644
--- a/main/src/cgeo/geocaching/filter/IFilter.java
+++ b/main/src/cgeo/geocaching/filter/IFilter.java
@@ -8,13 +8,15 @@ import java.util.List;
public interface IFilter {
+ @NonNull
String getName();
/**
- * @param cache
- * @return true if the filter accepts the cache, false otherwise
+ * @return {@code true} if the filter accepts the cache, false otherwise
*/
boolean accepts(@NonNull final Geocache cache);
void filter(@NonNull final List<Geocache> list);
+
+ int getImageId();
} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/filter/ModifiedFilter.java b/main/src/cgeo/geocaching/filter/ModifiedFilter.java
index c224cb4..9b5c856 100644
--- a/main/src/cgeo/geocaching/filter/ModifiedFilter.java
+++ b/main/src/cgeo/geocaching/filter/ModifiedFilter.java
@@ -1,6 +1,5 @@
package cgeo.geocaching.filter;
-import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
@@ -12,7 +11,7 @@ import java.util.List;
class ModifiedFilter extends AbstractFilter implements IFilterFactory {
public ModifiedFilter() {
- super(CgeoApplication.getInstance().getString(R.string.caches_filter_modified));
+ super(R.string.caches_filter_modified);
}
@Override
diff --git a/main/src/cgeo/geocaching/filter/OfflineLogFilter.java b/main/src/cgeo/geocaching/filter/OfflineLogFilter.java
new file mode 100644
index 0000000..0ed9618
--- /dev/null
+++ b/main/src/cgeo/geocaching/filter/OfflineLogFilter.java
@@ -0,0 +1,19 @@
+package cgeo.geocaching.filter;
+
+import cgeo.geocaching.Geocache;
+import cgeo.geocaching.R;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+public class OfflineLogFilter extends AbstractFilter {
+
+ protected OfflineLogFilter() {
+ super(R.string.caches_filter_offline_log);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isLogOffline();
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/filter/OriginFilter.java b/main/src/cgeo/geocaching/filter/OriginFilter.java
index 4fb3301..d51b02c 100644
--- a/main/src/cgeo/geocaching/filter/OriginFilter.java
+++ b/main/src/cgeo/geocaching/filter/OriginFilter.java
@@ -15,7 +15,7 @@ public class OriginFilter extends AbstractFilter {
private final IConnector connector;
- public OriginFilter(final IConnector connector) {
+ public OriginFilter(@NonNull final IConnector connector) {
super(connector.getName());
this.connector = connector;
}
diff --git a/main/src/cgeo/geocaching/filter/OwnRatingFilter.java b/main/src/cgeo/geocaching/filter/OwnRatingFilter.java
index 0c468a9..1b86bab 100644
--- a/main/src/cgeo/geocaching/filter/OwnRatingFilter.java
+++ b/main/src/cgeo/geocaching/filter/OwnRatingFilter.java
@@ -1,6 +1,5 @@
package cgeo.geocaching.filter;
-import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.gcvote.GCVote;
@@ -18,7 +17,7 @@ import java.util.List;
public class OwnRatingFilter extends AbstractFilter implements IFilterFactory {
protected OwnRatingFilter() {
- super(CgeoApplication.getInstance().getString(R.string.caches_filter_own_rating));
+ super(R.string.caches_filter_own_rating);
}
@Override
diff --git a/main/src/cgeo/geocaching/filter/PersonalDataFilterFactory.java b/main/src/cgeo/geocaching/filter/PersonalDataFilterFactory.java
index 6c6186b..e9780da 100644
--- a/main/src/cgeo/geocaching/filter/PersonalDataFilterFactory.java
+++ b/main/src/cgeo/geocaching/filter/PersonalDataFilterFactory.java
@@ -10,7 +10,7 @@ public class PersonalDataFilterFactory implements IFilterFactory {
@Override
@NonNull
public List<? extends IFilter> getFilters() {
- return Arrays.asList(new OwnRatingFilter(), new PersonalNoteFilter(), new ModifiedFilter());
+ return Arrays.asList(new OwnRatingFilter(), new PersonalNoteFilter(), new ModifiedFilter(), new OfflineLogFilter());
}
}
diff --git a/main/src/cgeo/geocaching/filter/PersonalNoteFilter.java b/main/src/cgeo/geocaching/filter/PersonalNoteFilter.java
index 978ad6b..11c623e 100644
--- a/main/src/cgeo/geocaching/filter/PersonalNoteFilter.java
+++ b/main/src/cgeo/geocaching/filter/PersonalNoteFilter.java
@@ -1,6 +1,5 @@
package cgeo.geocaching.filter;
-import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
@@ -16,7 +15,7 @@ import java.util.List;
public class PersonalNoteFilter extends AbstractFilter implements IFilterFactory {
protected PersonalNoteFilter() {
- super(CgeoApplication.getInstance().getString(R.string.caches_filter_personal_note));
+ super(R.string.caches_filter_personal_note);
}
@Override
diff --git a/main/src/cgeo/geocaching/filter/PopularityFilter.java b/main/src/cgeo/geocaching/filter/PopularityFilter.java
index bb564e8..eabc533 100644
--- a/main/src/cgeo/geocaching/filter/PopularityFilter.java
+++ b/main/src/cgeo/geocaching/filter/PopularityFilter.java
@@ -13,7 +13,7 @@ class PopularityFilter extends AbstractFilter {
private final int minFavorites;
private final int maxFavorites;
- public PopularityFilter(final String name, final int minFavorites, final int maxFavorites) {
+ public PopularityFilter(@NonNull final String name, final int minFavorites, final int maxFavorites) {
super(name);
this.minFavorites = minFavorites;
this.maxFavorites = maxFavorites;
diff --git a/main/src/cgeo/geocaching/filter/PopularityRatioFilter.java b/main/src/cgeo/geocaching/filter/PopularityRatioFilter.java
index 53904f1..0548345 100644
--- a/main/src/cgeo/geocaching/filter/PopularityRatioFilter.java
+++ b/main/src/cgeo/geocaching/filter/PopularityRatioFilter.java
@@ -18,7 +18,7 @@ class PopularityRatioFilter extends AbstractFilter {
private final int minRatio;
private final int maxRatio;
- public PopularityRatioFilter(final String name, final int minRatio, final int maxRatio) {
+ public PopularityRatioFilter(@NonNull final String name, final int minRatio, final int maxRatio) {
super(name);
this.minRatio = minRatio;
this.maxRatio = maxRatio;
diff --git a/main/src/cgeo/geocaching/filter/RatingFilter.java b/main/src/cgeo/geocaching/filter/RatingFilter.java
index 3edfcb6..16ce16c 100644
--- a/main/src/cgeo/geocaching/filter/RatingFilter.java
+++ b/main/src/cgeo/geocaching/filter/RatingFilter.java
@@ -1,24 +1,20 @@
package cgeo.geocaching.filter;
-import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.gcvote.GCVote;
import org.eclipse.jdt.annotation.NonNull;
-import java.util.Collections;
-import java.util.List;
-
/**
* Filter {@link Geocache}s if they have a locally stored {@link GCVote} rating. This filter will not do any network
* request to find potentially missing local votes.
*
*/
-public class RatingFilter extends AbstractFilter implements IFilterFactory {
+public class RatingFilter extends AbstractFilter {
protected RatingFilter() {
- super(CgeoApplication.getInstance().getString(R.string.caches_filter_rating));
+ super(R.string.caches_filter_rating);
}
@Override
@@ -26,10 +22,4 @@ public class RatingFilter extends AbstractFilter implements IFilterFactory {
return cache.getRating() > 0;
}
- @Override
- @NonNull
- public List<RatingFilter> getFilters() {
- return Collections.singletonList(this);
- }
-
}
diff --git a/main/src/cgeo/geocaching/filter/SizeFilter.java b/main/src/cgeo/geocaching/filter/SizeFilter.java
index 4c7c122..a19d95b 100644
--- a/main/src/cgeo/geocaching/filter/SizeFilter.java
+++ b/main/src/cgeo/geocaching/filter/SizeFilter.java
@@ -11,7 +11,7 @@ import java.util.List;
class SizeFilter extends AbstractFilter {
private final CacheSize cacheSize;
- public SizeFilter(final CacheSize cacheSize) {
+ public SizeFilter(@NonNull final CacheSize cacheSize) {
super(cacheSize.id);
this.cacheSize = cacheSize;
}
@@ -22,6 +22,7 @@ class SizeFilter extends AbstractFilter {
}
@Override
+ @NonNull
public String getName() {
return cacheSize.getL10n();
}
@@ -40,6 +41,6 @@ class SizeFilter extends AbstractFilter {
}
return filters;
}
-
}
+
}
diff --git a/main/src/cgeo/geocaching/filter/StateFilter.java b/main/src/cgeo/geocaching/filter/StateFilter.java
deleted file mode 100644
index f574045..0000000
--- a/main/src/cgeo/geocaching/filter/StateFilter.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package cgeo.geocaching.filter;
-
-import cgeo.geocaching.CgeoApplication;
-import cgeo.geocaching.Geocache;
-import cgeo.geocaching.R;
-
-import org.eclipse.jdt.annotation.NonNull;
-
-import android.content.res.Resources;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-abstract class StateFilter extends AbstractFilter {
-
- static final Resources res = CgeoApplication.getInstance().getResources();
-
- protected StateFilter(final String name) {
- super(name);
- }
-
- static class StateFoundFilter extends StateFilter {
-
- public StateFoundFilter() {
- super(res.getString(R.string.cache_status_found));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return cache.isFound();
- }
-
- }
-
- static class StateNotFoundFilter extends StateFilter {
-
- public StateNotFoundFilter() {
- super(res.getString(R.string.cache_not_status_found));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return !cache.isFound();
- }
-
- }
-
- static class StateArchivedFilter extends StateFilter {
- public StateArchivedFilter() {
- super(res.getString(R.string.cache_status_archived));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return cache.isArchived();
- }
- }
-
- static class StateDisabledFilter extends StateFilter {
- public StateDisabledFilter() {
- super(res.getString(R.string.cache_status_disabled));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return cache.isDisabled();
- }
- }
-
- static class StatePremiumFilter extends StateFilter {
- public StatePremiumFilter() {
- super(res.getString(R.string.cache_status_premium));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return cache.isPremiumMembersOnly();
- }
- }
-
- static class StateNonPremiumFilter extends StateFilter {
- public StateNonPremiumFilter() {
- super(res.getString(R.string.cache_status_not_premium));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return !cache.isPremiumMembersOnly();
- }
- }
-
- private static class StateOfflineLogFilter extends StateFilter {
- public StateOfflineLogFilter() {
- super(res.getString(R.string.cache_status_offline_log));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return cache.isLogOffline();
- }
- }
-
- static class StateStoredFilter extends StateFilter {
- public StateStoredFilter() {
- super(res.getString(R.string.cache_status_stored));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return cache.isOffline();
- }
- }
-
- static class StateNotStoredFilter extends StateFilter {
- public StateNotStoredFilter() {
- super(res.getString(R.string.cache_status_not_stored));
- }
-
- @Override
- public boolean accepts(@NonNull final Geocache cache) {
- return !cache.isOffline();
- }
- }
-
- public static class Factory implements IFilterFactory {
-
- @Override
- @NonNull
- public List<StateFilter> getFilters() {
- final List<StateFilter> filters = new ArrayList<>(6);
- filters.add(new StateFoundFilter());
- filters.add(new StateNotFoundFilter());
- filters.add(new StateArchivedFilter());
- filters.add(new StateDisabledFilter());
- filters.add(new StatePremiumFilter());
- filters.add(new StateNonPremiumFilter());
- filters.add(new StateOfflineLogFilter());
- filters.add(new StateStoredFilter());
- filters.add(new StateNotStoredFilter());
-
- Collections.sort(filters, new Comparator<StateFilter>() {
-
- @Override
- public int compare(final StateFilter filter1, final StateFilter filter2) {
- return String.CASE_INSENSITIVE_ORDER.compare(filter1.getName(), filter2.getName());
- }
- });
-
- return filters;
- }
-
- }
-
-}
diff --git a/main/src/cgeo/geocaching/filter/StateFilterFactory.java b/main/src/cgeo/geocaching/filter/StateFilterFactory.java
new file mode 100644
index 0000000..42de764
--- /dev/null
+++ b/main/src/cgeo/geocaching/filter/StateFilterFactory.java
@@ -0,0 +1,145 @@
+package cgeo.geocaching.filter;
+
+import cgeo.geocaching.Geocache;
+import cgeo.geocaching.R;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+class StateFilterFactory implements IFilterFactory {
+
+ @Override
+ @NonNull
+ public List<? extends IFilter> getFilters() {
+ final List<AbstractFilter> filters = new ArrayList<>(6);
+ filters.add(new StateFoundFilter());
+ filters.add(new StateNotFoundFilter());
+ filters.add(new StateArchivedFilter());
+ filters.add(new StateDisabledFilter());
+ filters.add(new StatePremiumFilter());
+ filters.add(new StateNonPremiumFilter());
+ filters.add(new StateOfflineLogFilter());
+ filters.add(new StateStoredFilter());
+ filters.add(new StateNotStoredFilter());
+ filters.add(new RatingFilter());
+ filters.add(new TrackablesFilter());
+
+ Collections.sort(filters, new Comparator<AbstractFilter>() {
+
+ @Override
+ public int compare(final AbstractFilter filter1, final AbstractFilter filter2) {
+ return String.CASE_INSENSITIVE_ORDER.compare(filter1.getName(), filter2.getName());
+ }
+ });
+
+ return filters;
+ }
+
+ static class StateFoundFilter extends AbstractFilter {
+
+ public StateFoundFilter() {
+ super(R.string.cache_status_found);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isFound();
+ }
+
+ }
+
+ static class StateNotFoundFilter extends AbstractFilter {
+
+ public StateNotFoundFilter() {
+ super(R.string.cache_not_status_found);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return !cache.isFound();
+ }
+
+ }
+
+ static class StateArchivedFilter extends AbstractFilter {
+ public StateArchivedFilter() {
+ super(R.string.cache_status_archived);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isArchived();
+ }
+ }
+
+ static class StateDisabledFilter extends AbstractFilter {
+ public StateDisabledFilter() {
+ super(R.string.cache_status_disabled);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isDisabled();
+ }
+ }
+
+ static class StatePremiumFilter extends AbstractFilter {
+ public StatePremiumFilter() {
+ super(R.string.cache_status_premium);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isPremiumMembersOnly();
+ }
+ }
+
+ static class StateNonPremiumFilter extends AbstractFilter {
+ public StateNonPremiumFilter() {
+ super(R.string.cache_status_not_premium);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return !cache.isPremiumMembersOnly();
+ }
+ }
+
+ private static class StateOfflineLogFilter extends AbstractFilter {
+ public StateOfflineLogFilter() {
+ super(R.string.cache_status_offline_log);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isLogOffline();
+ }
+ }
+
+ static class StateStoredFilter extends AbstractFilter {
+ public StateStoredFilter() {
+ super(R.string.cache_status_stored);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return cache.isOffline();
+ }
+ }
+
+ static class StateNotStoredFilter extends AbstractFilter {
+ public StateNotStoredFilter() {
+ super(R.string.cache_status_not_stored);
+ }
+
+ @Override
+ public boolean accepts(@NonNull final Geocache cache) {
+ return !cache.isOffline();
+ }
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/filter/TrackablesFilter.java b/main/src/cgeo/geocaching/filter/TrackablesFilter.java
index 7ad06a1..debe11f 100644
--- a/main/src/cgeo/geocaching/filter/TrackablesFilter.java
+++ b/main/src/cgeo/geocaching/filter/TrackablesFilter.java
@@ -1,17 +1,13 @@
package cgeo.geocaching.filter;
-import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import org.eclipse.jdt.annotation.NonNull;
-import java.util.Collections;
-import java.util.List;
-
-class TrackablesFilter extends AbstractFilter implements IFilterFactory {
+class TrackablesFilter extends AbstractFilter {
public TrackablesFilter() {
- super(CgeoApplication.getInstance().getString(R.string.caches_filter_track));
+ super(R.string.caches_filter_track);
}
@Override
@@ -19,10 +15,4 @@ class TrackablesFilter extends AbstractFilter implements IFilterFactory {
return cache.hasTrackables();
}
- @Override
- @NonNull
- public List<TrackablesFilter> getFilters() {
- return Collections.singletonList(this);
- }
-
}
diff --git a/main/src/cgeo/geocaching/filter/TypeFilter.java b/main/src/cgeo/geocaching/filter/TypeFilter.java
index 412cbc2..b8c879f 100644
--- a/main/src/cgeo/geocaching/filter/TypeFilter.java
+++ b/main/src/cgeo/geocaching/filter/TypeFilter.java
@@ -11,7 +11,7 @@ import java.util.List;
class TypeFilter extends AbstractFilter {
private final CacheType cacheType;
- public TypeFilter(final CacheType cacheType) {
+ public TypeFilter(@NonNull final CacheType cacheType) {
super(cacheType.id);
this.cacheType = cacheType;
}
@@ -22,6 +22,7 @@ class TypeFilter extends AbstractFilter {
}
@Override
+ @NonNull
public String getName() {
return cacheType.getL10n();
}
@@ -42,4 +43,9 @@ class TypeFilter extends AbstractFilter {
}
}
+
+ @Override
+ public int getImageId() {
+ return cacheType.markerId;
+ }
}