diff options
| -rw-r--r-- | main/res/values-de/strings.xml | 1 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/enumerations/CacheDistance.java | 52 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/filter/DistanceFilter.java | 46 |
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 (< 3 km)</string> - <string name="cache_distance_regular">Regular (3 to 5 km)</string> - <string name="cache_distance_far">Far (> 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; } |
