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(