From 5f15e55d7dcb9649b96c3e1790a46b1f52cbbc31 Mon Sep 17 00:00:00 2001 From: Mathieu Alorent Date: Thu, 4 Sep 2014 12:58:20 +0200 Subject: fix #4260 & #3194: sort and resort problems This fixes: - #4260: sort by distance doesn't work - #3914: resorting of event lists doesn't work --- main/src/cgeo/geocaching/CacheListActivity.java | 3 ++- main/src/cgeo/geocaching/sorting/DistanceComparator.java | 13 ++++++++++++- main/src/cgeo/geocaching/sorting/SortActionProvider.java | 2 +- main/src/cgeo/geocaching/ui/CacheListAdapter.java | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java index a817aa5..522004e 100644 --- a/main/src/cgeo/geocaching/CacheListActivity.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -975,8 +975,9 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA private void updateAdapter() { adapter.notifyDataSetChanged(); - adapter.forceSort(); adapter.reFilter(); + adapter.checkEvents(); + adapter.forceSort(); } private void showFooterLoadingCaches() { diff --git a/main/src/cgeo/geocaching/sorting/DistanceComparator.java b/main/src/cgeo/geocaching/sorting/DistanceComparator.java index 541ce48..b3b751b 100644 --- a/main/src/cgeo/geocaching/sorting/DistanceComparator.java +++ b/main/src/cgeo/geocaching/sorting/DistanceComparator.java @@ -3,6 +3,7 @@ package cgeo.geocaching.sorting; import cgeo.geocaching.Geocache; import cgeo.geocaching.geopoint.Geopoint; +import java.util.ArrayList; import java.util.List; /** @@ -15,7 +16,17 @@ public class DistanceComparator extends AbstractCacheComparator { final private List list; private boolean cachedDistances; - public DistanceComparator(final Geopoint coords, List list) { + final static public DistanceComparator singleton = new DistanceComparator(); + + public DistanceComparator() { + // This constructor should not be used as a comparator as distances will not be updated. + // It is needed in order to really know we are sorting by Distances in the sort menu. + // If you need it for sorting, please use the second constructor. + coords = null; + list = new ArrayList<>(); + } + + public DistanceComparator(final Geopoint coords, final List list) { this.coords = coords; this.list = list; } diff --git a/main/src/cgeo/geocaching/sorting/SortActionProvider.java b/main/src/cgeo/geocaching/sorting/SortActionProvider.java index e9e65a0..6251984 100644 --- a/main/src/cgeo/geocaching/sorting/SortActionProvider.java +++ b/main/src/cgeo/geocaching/sorting/SortActionProvider.java @@ -62,7 +62,7 @@ public class SortActionProvider extends ActionProvider implements OnMenuItemClic } private void registerComparators() { - register(R.string.caches_sort_distance, null); + register(R.string.caches_sort_distance, DistanceComparator.class); register(R.string.caches_sort_date_hidden, DateComparator.class); register(R.string.caches_sort_difficulty, DifficultyComparator.class); register(R.string.caches_sort_finds, FindsComparator.class); diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java index b879e54..eaede2a 100644 --- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java @@ -179,6 +179,9 @@ public class CacheListAdapter extends ArrayAdapter { if (cacheComparator == null && eventsOnly) { return EventDateComparator.singleton; } + if (cacheComparator == null) { + return DistanceComparator.singleton; + } return cacheComparator; } -- cgit v1.1