aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorblafoo <github@blafoo.de>2012-01-06 23:14:39 +0100
committerblafoo <github@blafoo.de>2012-01-06 23:14:39 +0100
commitcc6e80e8c2f040dffdb442cd8e08f5699d71d938 (patch)
tree766c8c6e183386f21d0e26b1dd75afef072b73a7 /main
parent1f187b21cc989986a5f82cac24ffa2d57c75788a (diff)
downloadcgeo-cc6e80e8c2f040dffdb442cd8e08f5699d71d938.zip
cgeo-cc6e80e8c2f040dffdb442cd8e08f5699d71d938.tar.gz
cgeo-cc6e80e8c2f040dffdb442cd8e08f5699d71d938.tar.bz2
Set instead of List to avoid caches multiple times in search results
Diffstat (limited to 'main')
-rw-r--r--main/src/cgeo/geocaching/ParseResult.java8
-rw-r--r--main/src/cgeo/geocaching/SearchResult.java32
-rw-r--r--main/src/cgeo/geocaching/cgData.java17
-rw-r--r--main/src/cgeo/geocaching/cgeoapplication.java22
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java4
5 files changed, 46 insertions, 37 deletions
diff --git a/main/src/cgeo/geocaching/ParseResult.java b/main/src/cgeo/geocaching/ParseResult.java
index 976a014..ee5bfe5 100644
--- a/main/src/cgeo/geocaching/ParseResult.java
+++ b/main/src/cgeo/geocaching/ParseResult.java
@@ -5,6 +5,7 @@ import cgeo.geocaching.enumerations.LoadFlags;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* Search result including list of caches
@@ -26,7 +27,7 @@ public class ParseResult extends SearchResult {
cacheList.addAll(parseResult.cacheList);
}
- public ParseResult(final List<String> geocodes) {
+ public ParseResult(final Set<String> geocodes) {
super(geocodes);
cgeoapplication app = cgeoapplication.getInstance();
for (String geocode : geocodes) {
@@ -47,8 +48,9 @@ public class ParseResult extends SearchResult {
(excludeMine && (cache.isOwn() || cache.isFound())) ||
(cacheType != CacheType.ALL && cacheType != cache.getType());
if (!excludeCache) {
- result.addGeocode(cache.getGeocode());
- result.cacheList.add(cache);
+ if (result.addGeocode(cache.getGeocode())) {
+ result.cacheList.add(cache);
+ }
}
}
}
diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java
index 54120ef..fdb50a1 100644
--- a/main/src/cgeo/geocaching/SearchResult.java
+++ b/main/src/cgeo/geocaching/SearchResult.java
@@ -7,11 +7,12 @@ import android.os.Parcelable;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
public class SearchResult implements Parcelable {
- final protected List<String> geocodes;
+ final protected Set<String> geocodes;
public StatusCode error = null;
public String url = "";
public String[] viewstates = null;
@@ -28,33 +29,34 @@ public class SearchResult implements Parcelable {
};
public SearchResult() {
- this((List<String>) null);
+ this((Set<String>) null);
}
public SearchResult(SearchResult searchResult) {
if (searchResult != null) {
- this.geocodes = new ArrayList<String>(searchResult.geocodes);
+ this.geocodes = new HashSet<String>(searchResult.geocodes);
this.error = searchResult.error;
this.url = searchResult.url;
this.viewstates = searchResult.viewstates;
this.totalCnt = searchResult.totalCnt;
} else {
- this.geocodes = new ArrayList<String>();
+ this.geocodes = new HashSet<String>();
}
}
- public SearchResult(final List<String> geocodes) {
+ public SearchResult(final Set<String> geocodes) {
if (geocodes == null) {
- this.geocodes = new ArrayList<String>();
+ this.geocodes = new HashSet<String>();
} else {
- this.geocodes = new ArrayList<String>(geocodes.size());
+ this.geocodes = new HashSet<String>(geocodes.size());
this.geocodes.addAll(geocodes);
}
}
public SearchResult(final Parcel in) {
- geocodes = new ArrayList<String>();
- in.readStringList(geocodes);
+ ArrayList<String> list = new ArrayList<String>();
+ in.readStringList(list);
+ geocodes = new HashSet<String>(list);
error = (StatusCode) in.readSerializable();
url = in.readString();
final int length = in.readInt();
@@ -67,7 +69,7 @@ public class SearchResult implements Parcelable {
@Override
public void writeToParcel(final Parcel out, final int flags) {
- out.writeStringList(geocodes);
+ out.writeStringArray(geocodes.toArray(new String[geocodes.size()]));
out.writeSerializable(error);
out.writeString(url);
if (viewstates == null) {
@@ -84,16 +86,16 @@ public class SearchResult implements Parcelable {
return 0;
}
- public List<String> getGeocodes() {
- return Collections.unmodifiableList(geocodes);
+ public Set<String> getGeocodes() {
+ return Collections.unmodifiableSet(geocodes);
}
public int getCount() {
return geocodes.size();
}
- public void addGeocode(final String geocode) {
- geocodes.add(geocode);
+ public boolean addGeocode(final String geocode) {
+ return geocodes.add(geocode);
}
public static StatusCode getError(final SearchResult search) {
diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java
index b095da2..7562104 100644
--- a/main/src/cgeo/geocaching/cgData.java
+++ b/main/src/cgeo/geocaching/cgData.java
@@ -29,6 +29,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.EnumSet;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
@@ -2584,10 +2585,10 @@ public class cgData {
return count;
}
- public List<String> loadBatchOfStoredGeocodes(final boolean detailedOnly, final Geopoint coords, final CacheType cacheType, final int list) {
+ public Set<String> loadBatchOfStoredGeocodes(final boolean detailedOnly, final Geopoint coords, final CacheType cacheType, final int list) {
init();
- List<String> geocodes = new ArrayList<String>();
+ Set<String> geocodes = new HashSet<String>();
StringBuilder specifySql = new StringBuilder();
@@ -2636,10 +2637,10 @@ public class cgData {
return geocodes;
}
- public List<String> loadBatchOfHistoricGeocodes(final boolean detailedOnly, final CacheType cacheType) {
+ public Set<String> loadBatchOfHistoricGeocodes(final boolean detailedOnly, final CacheType cacheType) {
init();
- List<String> geocodes = new ArrayList<String>();
+ Set<String> geocodes = new HashSet<String>();
StringBuilder specifySql = new StringBuilder();
specifySql.append("visiteddate > 0");
@@ -2686,22 +2687,22 @@ public class cgData {
return geocodes;
}
- public List<String> getCachedInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
+ public Set<String> getCachedInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
return getInViewport(false, centerLat, centerLon, spanLat, spanLon, cacheType);
}
- public List<String> getStoredInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
+ public Set<String> getStoredInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
return getInViewport(true, centerLat, centerLon, spanLat, spanLon, cacheType);
}
- public List<String> getInViewport(final boolean stored, final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
+ public Set<String> getInViewport(final boolean stored, final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
if (centerLat == null || centerLon == null || spanLat == null || spanLon == null) {
return null;
}
init();
- List<String> geocodes = new ArrayList<String>();
+ Set<String> geocodes = new HashSet<String>();
// viewport limitation
double latMin = (centerLat / 1e6) - ((spanLat / 1e6) / 2) - ((spanLat / 1e6) / 4);
diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/cgeoapplication.java
index 856a51c..3bfe69a 100644
--- a/main/src/cgeo/geocaching/cgeoapplication.java
+++ b/main/src/cgeo/geocaching/cgeoapplication.java
@@ -23,8 +23,10 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.EnumSet;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
public class cgeoapplication extends Application {
@@ -303,7 +305,7 @@ public class cgeoapplication extends Application {
return null;
}
- List<String> geocodeList = new ArrayList<String>();
+ Set<String> geocodeList = new HashSet<String>();
geocodeList.add(geocode);
return getBounds(geocodeList);
@@ -317,7 +319,7 @@ public class cgeoapplication extends Application {
return getBounds(search.getGeocodes());
}
- public List<Number> getBounds(final List<String> geocodes) {
+ public List<Number> getBounds(final Set<String> geocodes) {
if (CollectionUtils.isEmpty(geocodes)) {
return null;
}
@@ -326,13 +328,13 @@ public class cgeoapplication extends Application {
}
public cgCache getCache(final SearchResult search) {
- if (search == null) {
+ if (search == null || search.getCount() < 1) {
return null;
}
- final List<String> geocodeList = search.getGeocodes();
+ final Set<String> geocodeList = search.getGeocodes();
- return getCacheByGeocode(geocodeList.get(0), LoadFlags.LOADALL);
+ return getCacheByGeocode(geocodeList.toArray(new String[geocodeList.size()])[0], LoadFlags.LOADALL);
}
/**
@@ -363,7 +365,7 @@ public class cgeoapplication extends Application {
List<cgCache> cachesOut = new ArrayList<cgCache>();
- final List<String> geocodeList = search.getGeocodes();
+ final Set<String> geocodeList = search.getGeocodes();
// The list of geocodes is sufficient. more parameters generate an overly complex select.
final List<cgCache> cachesPre = storage.loadCaches(geocodeList.toArray(), null, null, null, null, loadFlags);
@@ -375,7 +377,7 @@ public class cgeoapplication extends Application {
}
public SearchResult getBatchOfStoredCaches(final boolean detailedOnly, final Geopoint coords, final CacheType cacheType, final int list) {
- final List<String> geocodes = storage.loadBatchOfStoredGeocodes(detailedOnly, coords, cacheType, list);
+ final Set<String> geocodes = storage.loadBatchOfStoredGeocodes(detailedOnly, coords, cacheType, list);
final SearchResult search = new SearchResult(geocodes);
search.totalCnt = getAllStoredCachesCount(true, cacheType, list);
return search;
@@ -386,19 +388,19 @@ public class cgeoapplication extends Application {
}
public SearchResult getHistoryOfCaches(final boolean detailedOnly, final CacheType cacheType) {
- final List<String> geocodes = storage.loadBatchOfHistoricGeocodes(detailedOnly, cacheType);
+ final Set<String> geocodes = storage.loadBatchOfHistoricGeocodes(detailedOnly, cacheType);
final SearchResult search = new SearchResult(geocodes);
search.totalCnt = getAllHistoricCachesCount();
return search;
}
public SearchResult getCachedInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
- final List<String> geocodes = storage.getCachedInViewport(centerLat, centerLon, spanLat, spanLon, cacheType);
+ final Set<String> geocodes = storage.getCachedInViewport(centerLat, centerLon, spanLat, spanLon, cacheType);
return new SearchResult(geocodes);
}
public SearchResult getStoredInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
- final List<String> geocodes = storage.getStoredInViewport(centerLat, centerLon, spanLat, spanLon, cacheType);
+ final Set<String> geocodes = storage.getStoredInViewport(centerLat, centerLon, spanLat, spanLon, cacheType);
return new SearchResult(geocodes);
}
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index dba64e0..29d2093 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -75,8 +75,10 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
public class cgeocaches extends AbstractListActivity {
@@ -2528,7 +2530,7 @@ public class cgeocaches extends AbstractListActivity {
// apply filter settings (if there's a filter)
if (adapter != null) {
- List<String> geocodes = new ArrayList<String>();
+ Set<String> geocodes = new HashSet<String>();
for (cgCache cache : adapter.getFilteredList()) {
geocodes.add(cache.getGeocode());
}