diff options
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheListAdapter.java | 54 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgBase.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeoapplication.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeocaches.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/DistanceComparator.java | 4 |
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; |
