diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-07-21 19:33:07 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-07-21 19:33:07 +0200 |
| commit | 74902bbcb7f48ad8f534e9baac090bc561232a1c (patch) | |
| tree | bd82042a0fdd962574c9f5130a559d9f8354ad3f | |
| parent | 7e73b5bb1bb34c57708398cca586c08c6bfa3b77 (diff) | |
| parent | 83c246ff6b53b72b2320bfc81d07e9d31e49ef9c (diff) | |
| download | cgeo-74902bbcb7f48ad8f534e9baac090bc561232a1c.zip cgeo-74902bbcb7f48ad8f534e9baac090bc561232a1c.tar.gz cgeo-74902bbcb7f48ad8f534e9baac090bc561232a1c.tar.bz2 | |
Merge remote-tracking branch 'CosMars89/master'
| -rw-r--r-- | main/res/values/strings.xml | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/enumerations/CacheDistance.java | 52 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/filter/DistanceFilter.java | 48 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/filter/FilterUserInterface.java | 1 |
4 files changed, 107 insertions, 0 deletions
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 81e5d11..6bb17fd 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -46,6 +46,11 @@ <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> @@ -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 3556eef..2404f44 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>() { |
