diff --git a/android/app/src/main/java/app/organicmaps/car/screens/MapScreen.java b/android/app/src/main/java/app/organicmaps/car/screens/MapScreen.java index a707c2e399..efdb7f7d8f 100644 --- a/android/app/src/main/java/app/organicmaps/car/screens/MapScreen.java +++ b/android/app/src/main/java/app/organicmaps/car/screens/MapScreen.java @@ -16,6 +16,7 @@ import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.car.screens.search.SearchScreen; +import app.organicmaps.car.util.SuggestionsHelpers; import app.organicmaps.car.util.UiHelpers; public class MapScreen extends BaseMapScreen @@ -29,6 +30,8 @@ public class MapScreen extends BaseMapScreen @Override public Template onGetTemplate() { + SuggestionsHelpers.updateSuggestions(getCarContext()); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); diff --git a/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java b/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java index 1711052ed5..0432423a8f 100644 --- a/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java +++ b/android/app/src/main/java/app/organicmaps/car/util/IntentUtils.java @@ -1,5 +1,7 @@ package app.organicmaps.car.util; +import android.app.PendingIntent; +import android.content.ComponentName; import android.content.Intent; import android.net.Uri; @@ -7,6 +9,7 @@ import androidx.annotation.NonNull; import androidx.car.app.CarContext; import androidx.car.app.Screen; import androidx.car.app.ScreenManager; +import androidx.car.app.notification.CarPendingIntent; import app.organicmaps.Framework; import app.organicmaps.Map; @@ -38,6 +41,15 @@ public final class IntentUtils processViewIntent(carContext, intent); } + @NonNull + public static PendingIntent createSearchIntent(@NonNull CarContext context, @NonNull String query) + { + final String uri = "geo:0,0?q=" + query.replace(" ", "+"); + final ComponentName component = new ComponentName(context, CarAppService.class); + final Intent intent = new Intent().setComponent(component).setData(Uri.parse(uri)); + return CarPendingIntent.getCarApp(context, 0, intent, 0); + } + // https://developer.android.com/reference/androidx/car/app/CarContext#startCarApp(android.content.Intent) private static void processNavigationIntent(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer, @NonNull Intent intent) { diff --git a/android/app/src/main/java/app/organicmaps/car/util/SuggestionsHelpers.java b/android/app/src/main/java/app/organicmaps/car/util/SuggestionsHelpers.java new file mode 100644 index 0000000000..301b337dc0 --- /dev/null +++ b/android/app/src/main/java/app/organicmaps/car/util/SuggestionsHelpers.java @@ -0,0 +1,49 @@ +package app.organicmaps.car.util; + +import androidx.annotation.NonNull; +import androidx.car.app.CarContext; +import androidx.car.app.model.CarIcon; +import androidx.car.app.suggestion.SuggestionManager; +import androidx.car.app.suggestion.model.Suggestion; +import androidx.core.graphics.drawable.IconCompat; + +import app.organicmaps.R; +import app.organicmaps.search.SearchRecents; + +import java.util.ArrayList; +import java.util.List; + +public final class SuggestionsHelpers +{ + private final static int MAX_SUGGESTIONS_SIZE = 5; + + public static void updateSuggestions(@NonNull final CarContext context) + { + context.getCarService(SuggestionManager.class).updateSuggestions(createSuggestionsList(context)); + } + + // TODO: Currently utilizing search history entries; potential future addition to include "Home" and "Work" marks once supported. + @NonNull + private static List createSuggestionsList(@NonNull final CarContext context) + { + final CarIcon iconRecent = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_search_recent)).build(); + final List suggestions = new ArrayList<>(); + + SearchRecents.refresh(); + final int recentsSize = Math.min(SearchRecents.getSize(), MAX_SUGGESTIONS_SIZE); + for (int i = 0; i < recentsSize; ++i) + { + final Suggestion.Builder builder = new Suggestion.Builder(); + builder.setIcon(iconRecent); + builder.setIdentifier(Integer.toString(i)); + builder.setTitle(SearchRecents.get(i)); + builder.setSubtitle(""); + builder.setAction(IntentUtils.createSearchIntent(context, SearchRecents.get(i))); + suggestions.add(builder.build()); + } + + return suggestions; + } + + private SuggestionsHelpers() {} +}