diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 0880b515df7..fc93dbea458 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -5618,7 +5618,6 @@ Schlüsselwörter Zusätzlich Aktivität - Nach Entfernung sortieren Unterordner sortieren Unterordner in „%1$s“ werden sortiert nach: „%2$s“ Spezieller Navigationstyp diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 73ba0e6b8d0..b3374140ca0 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -5524,5 +5524,4 @@ Download tile maps directly, or copy them as SQLite database files to OsmAnd\'s Off-piste \'Freeride\' and \'Off-piste\' are unofficial routes and passages. Typically ungroomed, unmaintained and not checked in the evening. Enter at your own risk. Voice prompts times - Sort by distance diff --git a/OsmAnd/src/net/osmand/plus/auto/screens/FavoritesScreen.java b/OsmAnd/src/net/osmand/plus/auto/screens/FavoritesScreen.java index a8fa1de1b9d..6633ca52ce2 100644 --- a/OsmAnd/src/net/osmand/plus/auto/screens/FavoritesScreen.java +++ b/OsmAnd/src/net/osmand/plus/auto/screens/FavoritesScreen.java @@ -13,6 +13,7 @@ import androidx.car.app.model.CarIcon; import androidx.car.app.model.CarLocation; import androidx.car.app.model.DistanceSpan; +import androidx.car.app.model.Header; import androidx.car.app.model.ItemList; import androidx.car.app.model.Metadata; import androidx.car.app.model.Place; @@ -59,7 +60,7 @@ public final class FavoritesScreen extends BaseAndroidAutoScreen { @Nullable private FavoriteGroup selectedGroup; private CompassMode initialCompassMode; - private boolean isSortableByDistance; + private boolean isLeastRecentyUsedGroup; public FavoritesScreen( @NonNull CarContext carContext, @@ -68,7 +69,7 @@ public FavoritesScreen( super(carContext); this.settingsAction = settingsAction; selectedGroup = group; - isSortableByDistance = group != null; + isLeastRecentyUsedGroup = selectedGroup == null; getLifecycle().addObserver(new DefaultLifecycleObserver() { @Override public void onDestroy(@NonNull LifecycleOwner owner) { @@ -96,13 +97,26 @@ private FavouritesLayer getFavouritesLayer() { @NonNull @Override public Template onGetTemplate() { + boolean sortFavByDistance = getApp().getSettings().SORT_FAV_BY_DISTANCE.get(); ItemList.Builder listBuilder = new ItemList.Builder(); - setupFavorites(listBuilder); + setupFavorites(listBuilder, sortFavByDistance); return new PlaceListNavigationTemplate.Builder() .setItemList(listBuilder.build()) - .setTitle(getApp().getString(R.string.shared_string_favorites)) + .setHeader(new Header.Builder() + .setTitle(getApp().getString(R.string.shared_string_favorites)) + .setStartHeaderAction(Action.BACK) + .addEndHeaderAction(new Action.Builder() + .setIcon(new CarIcon.Builder( + IconCompat.createWithResource(getCarContext(), sortFavByDistance ? R.drawable.ic_action_sort_short_to_long : R.drawable.ic_action_sort_date_31)) + .build()) + .setOnClickListener(() -> { + getApp().getSettings().SORT_FAV_BY_DISTANCE.set(!sortFavByDistance); + invalidate(); + }) + .build()) + .build() + ) .setActionStrip(new ActionStrip.Builder().addAction(createSearchAction()).build()) - .setHeaderAction(Action.BACK) .build(); } @@ -111,12 +125,12 @@ protected int getConstraintLimitType() { return ConstraintManager.CONTENT_LIMIT_TYPE_PLACE_LIST; } - private void setupFavorites(ItemList.Builder listBuilder) { + private void setupFavorites(ItemList.Builder listBuilder, boolean sortFavByDistance) { OsmandSettings settings = getApp().getSettings(); List favoritePoints = getFavorites(); int limitedSize = Math.min(favoritePoints.size(), getContentLimit() -1); LatLon location = getApp().getMapViewTrackingUtilities().getDefaultLocation(); - List limitedFavoritePointDistances = toLimitedSortedPointDistanceList(favoritePoints, location, isSortableByDistance && settings.SORT_FAV_BY_DISTANCE.get(), limitedSize); + List limitedFavoritePointDistances = toLimitedSortedPointDistanceList(favoritePoints, location, sortFavByDistance, limitedSize); List limitedFavoritePoints = new ArrayList<>(limitedSize); QuadRect mapRect = new QuadRect(); if (!Algorithms.isEmpty(limitedFavoritePointDistances)) { @@ -167,14 +181,18 @@ private static List toPointDistanceList(List toLimitedSortedPointDistanceList(List points, LatLon location, boolean sortByDistance, int limitedSize) { - if (sortByDistance) { + private List toLimitedSortedPointDistanceList(List points, LatLon location, boolean sortByDistance, int limitedSize) { + if (sortByDistance && !isLeastRecentyUsedGroup) { List pointDistances = toPointDistanceList(points, location); Collections.sort(pointDistances, Comparator.comparingDouble(pointDistance -> pointDistance.distance)); return pointDistances.subList(0, limitedSize); } else { Collections.sort(points, (left, right) -> Long.compare(right.getTimestamp(), left.getTimestamp())); - return toPointDistanceList(points.subList(0, limitedSize), location); + List pointDistances = toPointDistanceList(points.subList(0, limitedSize), location); + if (sortByDistance) { + Collections.sort(pointDistances, Comparator.comparingDouble(pointDistance -> pointDistance.distance)); + } + return pointDistances; } }; diff --git a/OsmAnd/src/net/osmand/plus/auto/screens/SettingsScreen.java b/OsmAnd/src/net/osmand/plus/auto/screens/SettingsScreen.java index 6179e8deaaf..d0e453a5273 100644 --- a/OsmAnd/src/net/osmand/plus/auto/screens/SettingsScreen.java +++ b/OsmAnd/src/net/osmand/plus/auto/screens/SettingsScreen.java @@ -51,22 +51,6 @@ public Template onGetTemplate() { sectionABuilder.build(), getCarContext().getString(R.string.voice_pref_title))); - ItemList.Builder sectionBBuilder = new ItemList.Builder(); - sectionBBuilder.addItem(new Row.Builder() - .setTitle(getCarContext().getString(R.string.settings_favorites_sortorder)) - .setToggle( - new Toggle.Builder( - (value) -> osmandSettings.SORT_FAV_BY_DISTANCE.set(value)) - .setChecked(osmandSettings.SORT_FAV_BY_DISTANCE.get()) - .build()) - .build() - ); - - templateBuilder.addSectionedList( - SectionedItemList.create( - sectionBBuilder.build(), - getCarContext().getString(R.string.shared_string_favorites))); - /* ItemList.Builder sectionBBuilder = new ItemList.Builder(); sectionBBuilder.addItem(