aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-07-21 23:18:20 +0200
committerBananeweizen <bananeweizen@gmx.de>2013-07-21 23:18:20 +0200
commit6e4a8d4ba8a705be3d1e3b2714fe3590c49092e0 (patch)
tree0c382deda5993717922941d51f6565aee7fff7d8
parent74902bbcb7f48ad8f534e9baac090bc561232a1c (diff)
downloadcgeo-6e4a8d4ba8a705be3d1e3b2714fe3590c49092e0.zip
cgeo-6e4a8d4ba8a705be3d1e3b2714fe3590c49092e0.tar.gz
cgeo-6e4a8d4ba8a705be3d1e3b2714fe3590c49092e0.tar.bz2
refactoring: simplify distance filter
-rw-r--r--main/res/values-de/strings.xml1
-rw-r--r--main/res/values/strings.xml5
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheDistance.java52
-rw-r--r--main/src/cgeo/geocaching/filter/DistanceFilter.java46
4 files changed, 28 insertions, 76 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index c675f4c..746576f 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -324,6 +324,7 @@
<string name="caches_filter_clear">Filter zurücksetzen</string>
<string name="caches_filter_modified">Mit geänderten Koordinaten</string>
<string name="caches_filter_origin">Herkunft</string>
+ <string name="caches_filter_distance">Entfernung</string>
<string name="caches_removing_from_history">Lösche aus Verlauf…</string>
<string name="caches_clear_offlinelogs">Offline-Logs löschen</string>
<string name="caches_clear_offlinelogs_progress">Lösche Offline-Logs</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 6bb17fd..6dd8064 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -46,11 +46,6 @@
<string name="cache_size_notchosen">Not chosen</string>
<string name="cache_size_unknown">Unknown</string>
- <!-- cache distances -->
- <string name="cache_distance_near">Near (&lt; 3 km)</string>
- <string name="cache_distance_regular">Regular (3 to 5 km)</string>
- <string name="cache_distance_far">Far (&gt; 5 km)</string>
-
<!-- waypoints -->
<string name="wp_final">Final Location</string>
<string name="wp_stage">Stage of a Multicache</string>
diff --git a/main/src/cgeo/geocaching/enumerations/CacheDistance.java b/main/src/cgeo/geocaching/enumerations/CacheDistance.java
deleted file mode 100644
index 4529592..0000000
--- a/main/src/cgeo/geocaching/enumerations/CacheDistance.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package cgeo.geocaching.enumerations;
-
-import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-public enum CacheDistance {
- NEAR("Near", 0, 3, R.string.cache_distance_near),
- REGULAR("Regular", 3, 5, R.string.cache_distance_regular),
- FAR("Far", 5, 10, R.string.cache_distance_far);
-
- public final String id;
- public final int minDistance;
- public final int maxDistance;
- private final int stringId;
-
- CacheDistance(String id, int minDistance, int maxDistance, int stringId) {
- this.id = id;
- this.minDistance = minDistance;
- this.maxDistance = maxDistance;
- this.stringId = stringId;
- }
-
- final private static Map<String, CacheDistance> FIND_BY_ID;
- static {
- final HashMap<String, CacheDistance> mapping = new HashMap<String, CacheDistance>();
- for (CacheDistance cd : values()) {
- mapping.put(cd.id.toLowerCase(Locale.US), cd);
- }
- FIND_BY_ID = Collections.unmodifiableMap(mapping);
- }
-
- public static CacheDistance getById(final String id) {
- final CacheDistance result = CacheDistance.FIND_BY_ID.get(id);
- if (result != null) {
- return result;
- }
- final CacheDistance resultNormalized = CacheDistance.FIND_BY_ID.get(id.toLowerCase(Locale.US).trim());
- if (resultNormalized != null) {
- return resultNormalized;
- }
- return FAR; //put default if needed
- }
-
- public final String getL10n() {
- return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
- }
-}
diff --git a/main/src/cgeo/geocaching/filter/DistanceFilter.java b/main/src/cgeo/geocaching/filter/DistanceFilter.java
index bf09362..86b09c7 100644
--- a/main/src/cgeo/geocaching/filter/DistanceFilter.java
+++ b/main/src/cgeo/geocaching/filter/DistanceFilter.java
@@ -2,44 +2,52 @@ package cgeo.geocaching.filter;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IGeoData;
+import cgeo.geocaching.R;
import cgeo.geocaching.cgeoapplication;
-import cgeo.geocaching.enumerations.CacheDistance;
import cgeo.geocaching.geopoint.Geopoint;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
class DistanceFilter extends AbstractFilter {
- private final CacheDistance cacheDistance;
private final IGeoData geo;
+ private final int minDistance;
+ private final int maxDistance;
- public DistanceFilter(final CacheDistance cacheDistance) {
- super(cacheDistance.id);
- this.cacheDistance = cacheDistance;
+ public DistanceFilter(String name, final int minDistance, final int maxDistance) {
+ super(name);
+ this.minDistance = minDistance;
+ this.maxDistance = maxDistance;
geo = cgeoapplication.getInstance().currentGeo();
}
@Override
- public boolean accepts(Geocache cache) {
- Geopoint temp = new Geopoint(geo.getLocation());
- double distance = temp.distanceTo(cache.getCoords());
+ public boolean accepts(final Geocache cache) {
+ final Geopoint currentPos = new Geopoint(geo.getLocation());
+ final float distance = currentPos.distanceTo(cache.getCoords());
- return (distance > cacheDistance.minDistance) && (distance <= cacheDistance.maxDistance);
- }
-
- @Override
- public String getName() {
- return cacheDistance.getL10n();
+ return (distance >= minDistance) && (distance <= maxDistance);
}
public static class Factory implements IFilterFactory {
+ private static final int[] KILOMETERS = { 0, 2, 5, 10, 20, 50 };
+
@Override
public List<IFilter> getFilters() {
- final CacheDistance[] cacheDistances = CacheDistance.values();
- final List<IFilter> filters = new LinkedList<IFilter>();
- for (CacheDistance cacheDistance : cacheDistances) {
- filters.add(new DistanceFilter(cacheDistance));
+ final List<IFilter> filters = new ArrayList<IFilter>(KILOMETERS.length);
+ for (int i = 0; i < KILOMETERS.length; i++) {
+ final int minRange = KILOMETERS[i];
+ final int maxRange;
+ if (i < KILOMETERS.length - 1) {
+ maxRange = KILOMETERS[i + 1];
+ }
+ else {
+ maxRange = Integer.MAX_VALUE;
+ }
+ final String range = maxRange == Integer.MAX_VALUE ? "> " + String.valueOf(minRange) : String.valueOf(minRange) + " - " + String.valueOf(maxRange);
+ final String name = cgeoapplication.getInstance().getResources().getQuantityString(R.plurals.tts_kilometers, maxRange, range);
+ filters.add(new DistanceFilter(name, minRange, maxRange));
}
return filters;
}