added asyncTask for sorting items
This commit is contained in:
parent
da27d8400e
commit
6605590688
1 changed files with 72 additions and 34 deletions
|
@ -1,5 +1,7 @@
|
||||||
package net.osmand.plus.mapcontextmenu.other;
|
package net.osmand.plus.mapcontextmenu.other;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
@ -36,6 +38,7 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag
|
||||||
private static final String IS_SORTED = "sorted";
|
private static final String IS_SORTED = "sorted";
|
||||||
private static final String SORTED_BY_TYPE = "sortedByType";
|
private static final String SORTED_BY_TYPE = "sortedByType";
|
||||||
|
|
||||||
|
private ProcessFavouritesTask asyncProcessor;
|
||||||
private Location location;
|
private Location location;
|
||||||
private Float heading;
|
private Float heading;
|
||||||
private List<FavouritePoint> favouritePoints;
|
private List<FavouritePoint> favouritePoints;
|
||||||
|
@ -45,19 +48,11 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag
|
||||||
private boolean isSorted = false;
|
private boolean isSorted = false;
|
||||||
private boolean locationUpdateStarted;
|
private boolean locationUpdateStarted;
|
||||||
private boolean compassUpdateAllowed = true;
|
private boolean compassUpdateAllowed = true;
|
||||||
private boolean target;
|
|
||||||
private boolean intermediate;
|
|
||||||
private BaseBottomSheetItem title;
|
private BaseBottomSheetItem title;
|
||||||
private MapRouteInfoMenu routeMenu;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMenuItems(Bundle savedInstanceState) {
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
Bundle args = getArguments();
|
|
||||||
target = args.getBoolean(TARGET);
|
|
||||||
intermediate = args.getBoolean(INTERMEDIATE);
|
|
||||||
|
|
||||||
favouritePoints = getMyApplication().getFavorites().getVisibleFavouritePoints();
|
favouritePoints = getMyApplication().getFavorites().getVisibleFavouritePoints();
|
||||||
routeMenu = ((MapActivity) getActivity()).getMapLayers().getMapControlsLayer().getMapRouteInfoMenu();
|
|
||||||
recyclerView = new RecyclerView(getContext());
|
recyclerView = new RecyclerView(getContext());
|
||||||
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||||
|
|
||||||
|
@ -72,7 +67,8 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sortFavourites();
|
asyncProcessor = new ProcessFavouritesTask();
|
||||||
|
asyncProcessor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
((BottomSheetItemWithTitleAndButton) title).setButtonIcon(null, getIcon(sortByDist ? R.drawable.ic_action_list_sort : R.drawable.ic_action_sort_by_name,
|
((BottomSheetItemWithTitleAndButton) title).setButtonIcon(null, getIcon(sortByDist ? R.drawable.ic_action_list_sort : R.drawable.ic_action_sort_by_name,
|
||||||
nightMode ? R.color.route_info_go_btn_inking_dark : R.color.dash_search_icon_light));
|
nightMode ? R.color.route_info_go_btn_inking_dark : R.color.dash_search_icon_light));
|
||||||
((BottomSheetItemWithTitleAndButton) title).setButtonText(getString(sortByDist ? R.string.sort_by_distance : R.string.sort_by_name));
|
((BottomSheetItemWithTitleAndButton) title).setButtonText(getString(sortByDist ? R.string.sort_by_distance : R.string.sort_by_name));
|
||||||
|
@ -104,38 +100,26 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag
|
||||||
items.add(new BaseBottomSheetItem.Builder()
|
items.add(new BaseBottomSheetItem.Builder()
|
||||||
.setCustomView(recyclerView)
|
.setCustomView(recyclerView)
|
||||||
.create());
|
.create());
|
||||||
|
|
||||||
if (savedInstanceState != null && savedInstanceState.getBoolean(IS_SORTED)) {
|
if (savedInstanceState != null && savedInstanceState.getBoolean(IS_SORTED)) {
|
||||||
location = getMyApplication().getLocationProvider().getLastKnownLocation();
|
location = getMyApplication().getLocationProvider().getLastKnownLocation();
|
||||||
sortByDist = savedInstanceState.getBoolean(SORTED_BY_TYPE);
|
sortByDist = savedInstanceState.getBoolean(SORTED_BY_TYPE);
|
||||||
sortFavourites();
|
asyncProcessor = new ProcessFavouritesTask();
|
||||||
|
asyncProcessor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sortFavourites() {
|
private void selectFavorite(FavouritePoint point) {
|
||||||
final Collator inst = Collator.getInstance();
|
Bundle args = getArguments();
|
||||||
Collections.sort(favouritePoints, new Comparator<FavouritePoint>() {
|
boolean target = args.getBoolean(TARGET);
|
||||||
@Override
|
boolean intermediate = args.getBoolean(INTERMEDIATE);
|
||||||
public int compare(FavouritePoint lhs, FavouritePoint rhs) {
|
Activity activity = getActivity();
|
||||||
LatLon latLon = new LatLon(location.getLatitude(), location.getLongitude());
|
MapRouteInfoMenu routeMenu;
|
||||||
if (sortByDist) {
|
if (activity instanceof MapActivity) {
|
||||||
double ld = MapUtils.getDistance(latLon, lhs.getLatitude(),
|
routeMenu = ((MapActivity) activity).getMapLayers().getMapControlsLayer().getMapRouteInfoMenu();
|
||||||
lhs.getLongitude());
|
} else {
|
||||||
double rd = MapUtils.getDistance(latLon, rhs.getLatitude(),
|
return;
|
||||||
rhs.getLongitude());
|
|
||||||
return Double.compare(ld, rd);
|
|
||||||
}
|
}
|
||||||
return inst.compare(lhs.getName(), rhs.getName());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sortByDist = !sortByDist;
|
|
||||||
isSorted = true;
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void selectFavorite(FavouritePoint point) {
|
|
||||||
TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper();
|
TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper();
|
||||||
|
|
||||||
LatLon ll = new LatLon(point.getLatitude(), point.getLongitude());
|
LatLon ll = new LatLon(point.getLatitude(), point.getLongitude());
|
||||||
if (intermediate) {
|
if (intermediate) {
|
||||||
targetPointsHelper.navigateToPoint(ll, true, targetPointsHelper.getIntermediatePoints().size(), point.getPointDescription());
|
targetPointsHelper.navigateToPoint(ll, true, targetPointsHelper.getIntermediatePoints().size(), point.getPointDescription());
|
||||||
|
@ -250,4 +234,58 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag
|
||||||
outState.putBoolean(IS_SORTED, isSorted);
|
outState.putBoolean(IS_SORTED, isSorted);
|
||||||
outState.putBoolean(SORTED_BY_TYPE, !sortByDist);
|
outState.putBoolean(SORTED_BY_TYPE, !sortByDist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean useScrollableItemsContainer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ProcessFavouritesTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... params) {
|
||||||
|
sortFavourites();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sortFavourites() {
|
||||||
|
final Collator inst = Collator.getInstance();
|
||||||
|
Collections.sort(favouritePoints, new Comparator<FavouritePoint>() {
|
||||||
|
@Override
|
||||||
|
public int compare(FavouritePoint lhs, FavouritePoint rhs) {
|
||||||
|
LatLon latLon = new LatLon(location.getLatitude(), location.getLongitude());
|
||||||
|
if (sortByDist) {
|
||||||
|
double ld = MapUtils.getDistance(latLon, lhs.getLatitude(),
|
||||||
|
lhs.getLongitude());
|
||||||
|
double rd = MapUtils.getDistance(latLon, rhs.getLatitude(),
|
||||||
|
rhs.getLongitude());
|
||||||
|
return Double.compare(ld, rd);
|
||||||
|
}
|
||||||
|
return inst.compare(lhs.getName(), rhs.getName());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sortByDist = !sortByDist;
|
||||||
|
isSorted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void aVoid) {
|
||||||
|
asyncProcessor = null;
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
if (asyncProcessor != null) {
|
||||||
|
asyncProcessor.cancel(false);
|
||||||
|
asyncProcessor = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue