aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/src/cgeo/geocaching/CacheListAdapter.java54
-rw-r--r--main/src/cgeo/geocaching/cgBase.java1
-rw-r--r--main/src/cgeo/geocaching/cgeoapplication.java8
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java4
-rw-r--r--main/src/cgeo/geocaching/sorting/DistanceComparator.java4
5 files changed, 32 insertions, 39 deletions
diff --git a/main/src/cgeo/geocaching/CacheListAdapter.java b/main/src/cgeo/geocaching/CacheListAdapter.java
index 5d53d72..eed8799 100644
--- a/main/src/cgeo/geocaching/CacheListAdapter.java
+++ b/main/src/cgeo/geocaching/CacheListAdapter.java
@@ -49,14 +49,12 @@ import java.util.Set;
public class CacheListAdapter extends ArrayAdapter<cgCache> {
- private static final String SEPARATOR = " · ";
final private Resources res;
/** Resulting list of caches */
final private List<cgCache> list;
private cgCacheView holder = null;
private LayoutInflater inflater = null;
- private CacheComparator statComparator = null;
- private boolean historic = false;
+ private CacheComparator cacheComparator = null;
private Geopoint coords = null;
private float azimuth = 0;
private long lastSort = 0L;
@@ -72,6 +70,11 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
private static final int SWIPE_MAX_OFF_PATH = 100;
private static final int SWIPE_DISTANCE = 80;
private static final float SWIPE_OPACITY = 0.5f;
+ /**
+ * time in milliseconds after which the list may be resorted due to position updates
+ */
+ private static final int PAUSE_BETWEEN_LIST_SORT = 1000;
+ private static final String SEPARATOR = " · ";
private IFilter currentFilter = null;
private List<cgCache> originalList = null;
private final CacheListType cacheListType;
@@ -82,6 +85,9 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
this.res = activity.getResources();
this.list = list;
this.cacheListType = cacheListType;
+ if (cacheListType == CacheListType.HISTORY) {
+ cacheComparator = new VisitComparator();
+ }
final DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
@@ -102,9 +108,13 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
}
}
- public void setComparator(CacheComparator comparator) {
- statComparator = comparator;
-
+ /**
+ * change the sort order
+ *
+ * @param comparator
+ */
+ public void setComparator(final CacheComparator comparator) {
+ cacheComparator = comparator;
forceSort(coords);
}
@@ -164,16 +174,6 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
return currentFilter.getName();
}
- public void setHistoric(boolean historicIn) {
- historic = historicIn;
-
- if (historic) {
- statComparator = new VisitComparator();
- } else {
- statComparator = null;
- }
- }
-
public int getChecked() {
return checked;
}
@@ -246,16 +246,16 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
return;
}
- if (statComparator != null) {
- Collections.sort(list, statComparator);
- } else {
+ if (isSortedByDistance()) {
if (coordsIn == null) {
return;
}
-
- final DistanceComparator dstComparator = new DistanceComparator(coordsIn);
- Collections.sort(list, dstComparator);
+ Collections.sort(list, new DistanceComparator(coordsIn));
+ }
+ else {
+ Collections.sort(list, cacheComparator);
}
+
notifyDataSetChanged();
}
@@ -266,8 +266,8 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
coords = coordsIn;
- if (CollectionUtils.isNotEmpty(list) && (System.currentTimeMillis() - lastSort) > 1000 && sort) {
- Collections.sort(list, statComparator != null ? statComparator : new DistanceComparator(coordsIn));
+ if (CollectionUtils.isNotEmpty(list) && (System.currentTimeMillis() - lastSort) > PAUSE_BETWEEN_LIST_SORT && sort && isSortedByDistance()) {
+ Collections.sort(list, new DistanceComparator(coordsIn));
notifyDataSetChanged();
lastSort = System.currentTimeMillis();
}
@@ -281,6 +281,10 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
}
}
+ private boolean isSortedByDistance() {
+ return cacheComparator == null || cacheComparator instanceof DistanceComparator;
+ }
+
public void setActualHeading(Float directionNow) {
if (directionNow == null) {
return;
@@ -547,7 +551,7 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> {
}
holder.favourite.setBackgroundResource(favoriteBack);
- if (historic && cache.getVisitedDate() > 0) {
+ if (cacheListType == CacheListType.HISTORY && cache.getVisitedDate() > 0) {
StringBuilder cacheInfo = new StringBuilder(50);
cacheInfo.append(cgBase.formatTime(cache.getVisitedDate()));
cacheInfo.append("; ");
diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java
index a34821b..9a67672 100644
--- a/main/src/cgeo/geocaching/cgBase.java
+++ b/main/src/cgeo/geocaching/cgBase.java
@@ -614,7 +614,6 @@ public class cgBase {
if (Settings.isExcludeDisabledCaches() && (cache.isDisabled() || cache.isArchived())) {
// skip disabled and archived caches
- cache = null;
continue;
}
diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/cgeoapplication.java
index f75d51d..529695c 100644
--- a/main/src/cgeo/geocaching/cgeoapplication.java
+++ b/main/src/cgeo/geocaching/cgeoapplication.java
@@ -392,13 +392,7 @@ public class cgeoapplication extends Application {
return null;
}
- if (storage == null) {
- storage = new cgData(this);
- }
-
- final List<String> geocodeList = search.getGeocodes();
-
- return getBounds(geocodeList);
+ return getBounds(search.getGeocodes());
}
public List<Number> getBounds(final List<String> geocodes) {
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 0dfda1c..a380731 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -569,10 +569,6 @@ public class cgeocaches extends AbstractListActivity {
break;
case HISTORY:
- if (adapter != null) {
- adapter.setHistoric(true);
- }
-
title = res.getString(R.string.caches_history);
setTitle(title);
showProgress(true);
diff --git a/main/src/cgeo/geocaching/sorting/DistanceComparator.java b/main/src/cgeo/geocaching/sorting/DistanceComparator.java
index 920d965..4aeba33 100644
--- a/main/src/cgeo/geocaching/sorting/DistanceComparator.java
+++ b/main/src/cgeo/geocaching/sorting/DistanceComparator.java
@@ -4,8 +4,8 @@ import cgeo.geocaching.cgCache;
import cgeo.geocaching.geopoint.Geopoint;
/**
- * sorts caches by distance to current position
- *
+ * sorts caches by distance to given position
+ *
*/
public class DistanceComparator extends AbstractCacheComparator {
private final Geopoint coords;