From 83c246ff6b53b72b2320bfc81d07e9d31e49ef9c Mon Sep 17 00:00:00 2001 From: CosMars89 Date: Thu, 20 Jun 2013 21:28:09 +0200 Subject: 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 --- .../geocaching/enumerations/CacheDistance.java | 52 ++++++++++++++++++++++ .../src/cgeo/geocaching/filter/DistanceFilter.java | 48 ++++++++++++++++++++ .../geocaching/filter/FilterUserInterface.java | 1 + 3 files changed, 101 insertions(+) create mode 100644 main/src/cgeo/geocaching/enumerations/CacheDistance.java create mode 100644 main/src/cgeo/geocaching/filter/DistanceFilter.java (limited to 'main/src') 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 FIND_BY_ID; + static { + final HashMap mapping = new HashMap(); + 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 getFilters() { + final CacheDistance[] cacheDistances = CacheDistance.values(); + final List filters = new LinkedList(); + 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() { -- cgit v1.1