diff --git a/OsmAnd/res/layout/bottom_sheet_item_with_title_and_button.xml b/OsmAnd/res/layout/bottom_sheet_item_with_title_and_button.xml index d022a4f04a..d4d2353655 100644 --- a/OsmAnd/res/layout/bottom_sheet_item_with_title_and_button.xml +++ b/OsmAnd/res/layout/bottom_sheet_item_with_title_and_button.xml @@ -1,11 +1,12 @@ @@ -19,12 +20,13 @@ android:ellipsize="end" android:maxLines="1" android:textAppearance="@style/TextAppearance.ListItemTitle" - osmand:typeface="@string/font_roboto_medium" /> + osmand:typeface="@string/font_roboto_medium" + tools:text="Some Title" /> + osmand:typeface="@string/font_roboto_medium" + tools:drawableRight="@drawable/ic_action_sort_by_name" + tools:text="Some button" /> \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java index 971ef67545..5a3a6ebbd1 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/FavouritesBottomSheetMenuFragment.java @@ -1,10 +1,9 @@ package net.osmand.plus.mapcontextmenu.other; +import android.annotation.SuppressLint; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; -import android.os.Parcelable; -import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; @@ -34,11 +33,9 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag public static final String TARGET = "target"; public static final String INTERMEDIATE = "intermediate"; public static final String TAG = "FavouritesBottomSheetMenuFragment"; - private static final String BUNDLE_RECYCLER_LAYOUT = "FavouritesBottomSheetMenuFragment.recycler"; private static final String IS_SORTED = "sorted"; private static final String SORTED_BY_TYPE = "sortedByType"; - private ProcessFavouritesTask asyncProcessor; private Location location; private Float heading; private List favouritePoints; @@ -48,7 +45,7 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag private boolean isSorted = false; private boolean locationUpdateStarted; private boolean compassUpdateAllowed = true; - private BaseBottomSheetItem title; + private BottomSheetItemWithTitleAndButton title; @Override public void createMenuItems(Bundle savedInstanceState) { @@ -56,7 +53,7 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag recyclerView = new RecyclerView(getContext()); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - title = new BottomSheetItemWithTitleAndButton.Builder() + title = (BottomSheetItemWithTitleAndButton) new BottomSheetItemWithTitleAndButton.Builder() .setButtonIcons(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)) .setButtonTitle(getString(sortByDist ? R.string.sort_by_distance : R.string.sort_by_name)) @@ -66,11 +63,10 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag if (location == null) { return; } - asyncProcessor = new ProcessFavouritesTask(); - asyncProcessor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - ((BottomSheetItemWithTitleAndButton) title).setButtonIcons(null, getIcon(sortByDist ? R.drawable.ic_action_list_sort : R.drawable.ic_action_sort_by_name, + sortFavourites(); + title.setButtonIcons(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)); - ((BottomSheetItemWithTitleAndButton) title).setButtonText(getString(sortByDist ? R.string.sort_by_distance : R.string.sort_by_name)); + title.setButtonText(getString(sortByDist ? R.string.sort_by_distance : R.string.sort_by_name)); } }) .setTitle(getString(R.string.favourites)) @@ -104,8 +100,7 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag if (savedInstanceState != null && savedInstanceState.getBoolean(IS_SORTED)) { location = getMyApplication().getLocationProvider().getLastKnownLocation(); sortByDist = savedInstanceState.getBoolean(SORTED_BY_TYPE); - asyncProcessor = new ProcessFavouritesTask(); - asyncProcessor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + sortFavourites(); } } @@ -113,13 +108,6 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag Bundle args = getArguments(); boolean target = args.getBoolean(TARGET); boolean intermediate = args.getBoolean(INTERMEDIATE); - Activity activity = getActivity(); - MapRouteInfoMenu routeMenu; - if (activity instanceof MapActivity) { - routeMenu = ((MapActivity) activity).getMapLayers().getMapControlsLayer().getMapRouteInfoMenu(); - } else { - return; - } TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper(); LatLon ll = new LatLon(point.getLatitude(), point.getLongitude()); if (intermediate) { @@ -129,10 +117,18 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag } else { targetPointsHelper.setStartPoint(ll, true, point.getPointDescription()); } - if (!intermediate && getActivity() instanceof MapActivity) { - routeMenu.updateFromIcon(); + + Activity activity = getActivity(); + if (activity instanceof MapActivity) { + MapActivity map = ((MapActivity) activity); + MapRouteInfoMenu routeMenu = map.getMapLayers().getMapControlsLayer().getMapRouteInfoMenu(); + routeMenu.setupSpinners(target, intermediate); + if (!intermediate) { + routeMenu.updateFromIcon(); + } + } else { + return; } - routeMenu.setupSpinners(target, intermediate); dismiss(); } @@ -219,19 +215,9 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag } } - @Override - public void onViewStateRestored(@Nullable Bundle savedInstanceState) { - super.onViewStateRestored(savedInstanceState); - if (savedInstanceState != null) { - Parcelable savedRecyclerLayoutState = savedInstanceState.getParcelable(BUNDLE_RECYCLER_LAYOUT); - recyclerView.getLayoutManager().onRestoreInstanceState(savedRecyclerLayoutState); - } - } - @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putParcelable(BUNDLE_RECYCLER_LAYOUT, recyclerView.getLayoutManager().onSaveInstanceState()); outState.putBoolean(IS_SORTED, isSorted); outState.putBoolean(SORTED_BY_TYPE, !sortByDist); } @@ -241,52 +227,38 @@ public class FavouritesBottomSheetMenuFragment extends MenuBottomSheetDialogFrag return false; } - public class ProcessFavouritesTask extends AsyncTask { - - @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() { - @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); + @SuppressLint("StaticFieldLeak") + private void sortFavourites() { + new AsyncTask() { + @Override + protected Void doInBackground(Void... voids) { + final Collator inst = Collator.getInstance(); + Collections.sort(favouritePoints, new Comparator() { + @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()); } - return inst.compare(lhs.getName(), rhs.getName()); + }); + sortByDist = !sortByDist; + isSorted = true; + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + if (adapter != null) { + adapter.notifyDataSetChanged(); } - }); - 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; - } + } + }.execute(); } }