aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCosMars89 <cosmars89@yahoo.com>2013-06-20 21:28:09 +0200
committerCosMars89 <cosmars89@yahoo.com>2013-06-20 21:28:09 +0200
commit83c246ff6b53b72b2320bfc81d07e9d31e49ef9c (patch)
treec6d0b8de11b0fcb99c52c4eebb35e72efe969fea
parenta9d1353b00c24f8163ad02b9ecb7daf2f5893c12 (diff)
downloadcgeo-83c246ff6b53b72b2320bfc81d07e9d31e49ef9c.zip
cgeo-83c246ff6b53b72b2320bfc81d07e9d31e49ef9c.tar.gz
cgeo-83c246ff6b53b72b2320bfc81d07e9d31e49ef9c.tar.bz2
created the DistanceFilter and CacheDistance classes
modified the FilterUserInterface class in order to incorporate the new filter added the required information in the strings.xml file
-rw-r--r--main/res/values/strings.xml6
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheDistance.java52
-rw-r--r--main/src/cgeo/geocaching/filter/DistanceFilter.java48
-rw-r--r--main/src/cgeo/geocaching/filter/FilterUserInterface.java1
4 files changed, 107 insertions, 0 deletions
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 4a96646..c2195d8 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -47,6 +47,11 @@
<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>
@@ -326,6 +331,7 @@
<string name="caches_filter_clear">Clear filters</string>
<string name="caches_filter_modified">With modified coordinates</string>
<string name="caches_filter_origin">Origin</string>
+ <string name="caches_filter_distance">Distance</string>
<string name="caches_removing_from_history">Removing from History…</string>
<string name="caches_clear_offlinelogs">Clear offline logs</string>
<string name="caches_clear_offlinelogs_progress">Clearing offline logs</string>
diff --git a/main/src/cgeo/geocaching/enumerations/CacheDistance.java b/main/src/cgeo/geocaching/enumerations/CacheDistance.java
new file mode 100644
index 0000000..4529592
--- /dev/null
+++ b/main/src/cgeo/geocaching/enumerations/CacheDistance.java
@@ -0,0 +1,52 @@
+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
new file mode 100644
index 0000000..bf09362
--- /dev/null
+++ b/main/src/cgeo/geocaching/filter/DistanceFilter.java
@@ -0,0 +1,48 @@
+package cgeo.geocaching.filter;
+
+import cgeo.geocaching.Geocache;
+import cgeo.geocaching.IGeoData;
+import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.enumerations.CacheDistance;
+import cgeo.geocaching.geopoint.Geopoint;
+
+import java.util.LinkedList;
+import java.util.List;
+
+class DistanceFilter extends AbstractFilter {
+ private final CacheDistance cacheDistance;
+ private final IGeoData geo;
+
+ public DistanceFilter(final CacheDistance cacheDistance) {
+ super(cacheDistance.id);
+ this.cacheDistance = cacheDistance;
+ geo = cgeoapplication.getInstance().currentGeo();
+ }
+
+ @Override
+ public boolean accepts(Geocache cache) {
+ Geopoint temp = new Geopoint(geo.getLocation());
+ double distance = temp.distanceTo(cache.getCoords());
+
+ return (distance > cacheDistance.minDistance) && (distance <= cacheDistance.maxDistance);
+ }
+
+ @Override
+ public String getName() {
+ return cacheDistance.getL10n();
+ }
+
+ public static class Factory implements IFilterFactory {
+
+ @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));
+ }
+ return filters;
+ }
+
+ }
+}
diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java
index a1d42cc..a31415d 100644
--- a/main/src/cgeo/geocaching/filter/FilterUserInterface.java
+++ b/main/src/cgeo/geocaching/filter/FilterUserInterface.java
@@ -55,6 +55,7 @@ public final class FilterUserInterface {
register(R.string.caches_filter_track, TrackablesFilter.class);
register(R.string.caches_filter_modified, ModifiedFilter.class);
register(R.string.caches_filter_origin, OriginFilter.Factory.class);
+ register(R.string.caches_filter_distance, DistanceFilter.Factory.class);
// sort by localized names
Collections.sort(registry, new Comparator<FactoryEntry>() {