From c2fa874798b923d318d3e36f058fcaaf129e0ca0 Mon Sep 17 00:00:00 2001 From: Andrew Shkrob Date: Mon, 11 Mar 2024 19:34:21 +0100 Subject: [PATCH] [android-auto] FreeDrive Screen Signed-off-by: Andrew Shkrob --- .../car/screens/FreeDriveScreen.java | 47 +++++++++++++++++++ .../organicmaps/car/screens/MapScreen.java | 16 ++++++- .../main/res/drawable/ic_steering_wheel.xml | 5 ++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 android/app/src/main/java/app/organicmaps/car/screens/FreeDriveScreen.java create mode 100644 android/app/src/main/res/drawable/ic_steering_wheel.xml diff --git a/android/app/src/main/java/app/organicmaps/car/screens/FreeDriveScreen.java b/android/app/src/main/java/app/organicmaps/car/screens/FreeDriveScreen.java new file mode 100644 index 0000000000..50549831bd --- /dev/null +++ b/android/app/src/main/java/app/organicmaps/car/screens/FreeDriveScreen.java @@ -0,0 +1,47 @@ +package app.organicmaps.car.screens; + +import androidx.annotation.NonNull; +import androidx.car.app.CarContext; +import androidx.car.app.model.Action; +import androidx.car.app.model.ActionStrip; +import androidx.car.app.model.CarIcon; +import androidx.car.app.model.Template; +import androidx.car.app.navigation.model.NavigationTemplate; +import androidx.core.graphics.drawable.IconCompat; + +import app.organicmaps.R; +import app.organicmaps.car.SurfaceRenderer; +import app.organicmaps.car.screens.base.BaseMapScreen; +import app.organicmaps.car.util.UiHelpers; + +public class FreeDriveScreen extends BaseMapScreen +{ + public FreeDriveScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer) + { + super(carContext, surfaceRenderer); + } + + @NonNull + @Override + public Template onGetTemplate() + { + final NavigationTemplate.Builder builder = new NavigationTemplate.Builder(); + builder.setMapActionStrip(UiHelpers.createMapActionStrip(getCarContext(), getSurfaceRenderer())); + builder.setActionStrip(createActionStrip()); + + return builder.build(); + } + + @NonNull + private ActionStrip createActionStrip() + { + final Action.Builder finishActionBuilder = new Action.Builder(); + finishActionBuilder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_close)).build()); + finishActionBuilder.setOnClickListener(this::finish); + + final ActionStrip.Builder builder = new ActionStrip.Builder(); + builder.addAction(finishActionBuilder.build()); + builder.addAction(UiHelpers.createSettingsAction(this, getSurfaceRenderer())); + return builder.build(); + } +} 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 efdb7f7d8f..efdfb266ef 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 @@ -3,6 +3,7 @@ package app.organicmaps.car.screens; import androidx.annotation.NonNull; import androidx.car.app.CarContext; import androidx.car.app.model.Action; +import androidx.car.app.model.ActionStrip; import androidx.car.app.model.CarIcon; import androidx.car.app.model.Header; import androidx.car.app.model.Item; @@ -35,7 +36,7 @@ public class MapScreen extends BaseMapScreen final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); - builder.setActionStrip(UiHelpers.createSettingsActionStrip(this, getSurfaceRenderer())); + builder.setActionStrip(createActionStrip()); builder.setItemList(createList()); return builder.build(); } @@ -49,6 +50,19 @@ public class MapScreen extends BaseMapScreen return builder.build(); } + @NonNull + private ActionStrip createActionStrip() + { + final Action.Builder freeDriveScreenBuilder = new Action.Builder(); + freeDriveScreenBuilder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_steering_wheel)).build()); + freeDriveScreenBuilder.setOnClickListener(() -> getScreenManager().push(new FreeDriveScreen(getCarContext(), getSurfaceRenderer()))); + + final ActionStrip.Builder builder = new ActionStrip.Builder(); + builder.addAction(freeDriveScreenBuilder.build()); + builder.addAction(UiHelpers.createSettingsAction(this, getSurfaceRenderer())); + return builder.build(); + } + @NonNull private ItemList createList() { diff --git a/android/app/src/main/res/drawable/ic_steering_wheel.xml b/android/app/src/main/res/drawable/ic_steering_wheel.xml new file mode 100644 index 0000000000..c26809e204 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_steering_wheel.xml @@ -0,0 +1,5 @@ + + + + +