diff --git a/android/src/app/organicmaps/car/NavigationSession.java b/android/src/app/organicmaps/car/NavigationSession.java index 2f268d4d93..f670ea0bf2 100644 --- a/android/src/app/organicmaps/car/NavigationSession.java +++ b/android/src/app/organicmaps/car/NavigationSession.java @@ -22,7 +22,7 @@ import app.organicmaps.display.DisplayType; import app.organicmaps.MwmApplication; import app.organicmaps.car.screens.ErrorScreen; import app.organicmaps.car.screens.MapPlaceholderScreen; -import app.organicmaps.car.screens.BaseMapScreen; +import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.car.screens.MapScreen; import app.organicmaps.location.LocationHelper; import app.organicmaps.location.LocationListener; diff --git a/android/src/app/organicmaps/car/SurfaceRenderer.java b/android/src/app/organicmaps/car/SurfaceRenderer.java index 9bb6b5ce1b..fd9493d136 100644 --- a/android/src/app/organicmaps/car/SurfaceRenderer.java +++ b/android/src/app/organicmaps/car/SurfaceRenderer.java @@ -28,8 +28,6 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @NonNull private Rect mVisibleArea = new Rect(); - @NonNull - private Rect mStableArea = new Rect(); private boolean mIsRunning; @@ -67,10 +65,9 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac public void onStableAreaChanged(@NonNull Rect stableArea) { Logger.d(TAG, "Stable area changed. stableArea: " + stableArea); - mStableArea = stableArea; - if (!mStableArea.isEmpty()) - Framework.nativeSetVisibleRect(mStableArea.left, mStableArea.top, mStableArea.right, mStableArea.bottom); + if (!stableArea.isEmpty()) + Framework.nativeSetVisibleRect(stableArea.left, stableArea.top, stableArea.right, stableArea.bottom); else if (!mVisibleArea.isEmpty()) Framework.nativeSetVisibleRect(mVisibleArea.left, mVisibleArea.top, mVisibleArea.right, mVisibleArea.bottom); } @@ -85,10 +82,10 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onCreate(@NonNull LifecycleOwner owner) { - Logger.d(TAG, "onCreate"); + Logger.d(TAG); mCarContext.getCarService(AppManager.class).setSurfaceCallback(this); - // TODO: Properly process deep links from other apps on AA. + // TODO (AndrewShkrob): Properly process deep links from other apps on AA. boolean launchByDeepLink = false; mMap.onCreate(launchByDeepLink); } @@ -96,7 +93,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onStart(@NonNull LifecycleOwner owner) { - Logger.d(TAG, "onStart"); + Logger.d(TAG); mMap.onStart(); mMap.setCallbackUnsupported(this::reportUnsupported); } @@ -104,7 +101,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onStop(@NonNull LifecycleOwner owner) { - Logger.d(TAG, "onStop"); + Logger.d(TAG); mMap.onStop(); mMap.setCallbackUnsupported(null); } @@ -112,14 +109,14 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onPause(@NonNull LifecycleOwner owner) { - Logger.d(TAG, "onPause"); + Logger.d(TAG); mMap.onPause(mCarContext); } @Override public void onResume(@NonNull LifecycleOwner owner) { - Logger.d(TAG, "onResume"); + Logger.d(TAG); mMap.onResume(); } @@ -171,7 +168,8 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac public void onClick(float x, float y) { Logger.d(TAG, "x: " + x + ", y: " + y); -// Map.onClick(x, y); + // TODO (AndrewShkrob): Will be implemented together with PlaceScreen + // Map.onClick(x, y); } public void disable() diff --git a/android/src/app/organicmaps/car/screens/BookmarksScreen.java b/android/src/app/organicmaps/car/screens/BookmarksScreen.java index 6fb1ade7bb..f7ba08171d 100644 --- a/android/src/app/organicmaps/car/screens/BookmarksScreen.java +++ b/android/src/app/organicmaps/car/screens/BookmarksScreen.java @@ -20,7 +20,8 @@ import app.organicmaps.bookmarks.data.BookmarkCategory; import app.organicmaps.bookmarks.data.BookmarkInfo; import app.organicmaps.bookmarks.data.BookmarkManager; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.util.Graphics; import java.util.ArrayList; @@ -50,7 +51,7 @@ public class BookmarksScreen extends BaseMapScreen @Override public Template onGetTemplate() { - MapTemplate.Builder builder = new MapTemplate.Builder(); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer())); @@ -61,7 +62,7 @@ public class BookmarksScreen extends BaseMapScreen @NonNull private Header createHeader() { - Header.Builder builder = new Header.Builder(); + final Header.Builder builder = new Header.Builder(); builder.setStartHeaderAction(Action.BACK); builder.setTitle(mBookmarkCategory == null ? getCarContext().getString(R.string.bookmarks) : mBookmarkCategory.getName()); return builder.build(); @@ -91,6 +92,7 @@ public class BookmarksScreen extends BaseMapScreen @NonNull private ItemList createBookmarksList() { + assert mBookmarkCategory != null; final long bookmarkCategoryId = mBookmarkCategory.getId(); final int bookmarkCategoriesSize = Math.min(mBookmarkCategory.getBookmarksCount(), MAX_CATEGORIES_SIZE); @@ -112,6 +114,7 @@ public class BookmarksScreen extends BaseMapScreen R.dimen.bookmark_icon_size, getCarContext()); itemBuilder.setImage(new CarIcon.Builder(IconCompat.createWithBitmap(Graphics.drawableToBitmap(icon))).build()); + itemBuilder.setOnClickListener(() -> { /* TODO (AndrewShkrob): Will be implemented together with PlaceScreen */ }); builder.addItem(itemBuilder.build()); } return builder.build(); @@ -123,9 +126,9 @@ public class BookmarksScreen extends BaseMapScreen final List bookmarkCategories = new ArrayList<>(BookmarkManager.INSTANCE.getCategories()); final List toRemove = new ArrayList<>(); - for (BookmarkCategory bookmarkCategory : bookmarkCategories) + for (final BookmarkCategory bookmarkCategory : bookmarkCategories) { - if (bookmarkCategory.getBookmarksCount() == 0) + if (bookmarkCategory.getBookmarksCount() == 0 || !bookmarkCategory.isVisible()) toRemove.add(bookmarkCategory); } bookmarkCategories.removeAll(toRemove); diff --git a/android/src/app/organicmaps/car/screens/CategoriesScreen.java b/android/src/app/organicmaps/car/screens/CategoriesScreen.java index 6915d60f66..3e3ee5d45a 100644 --- a/android/src/app/organicmaps/car/screens/CategoriesScreen.java +++ b/android/src/app/organicmaps/car/screens/CategoriesScreen.java @@ -16,7 +16,8 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; import java.util.Arrays; import java.util.List; @@ -38,6 +39,7 @@ public class CategoriesScreen extends BaseMapScreen } } + // TODO (AndrewShkrob): discuss categories and their priority for this list private static final List CATEGORIES = Arrays.asList( new CategoryData(R.string.fuel, R.drawable.ic_category_fuel), new CategoryData(R.string.parking, R.drawable.ic_category_parking), @@ -61,7 +63,7 @@ public class CategoriesScreen extends BaseMapScreen @Override public Template onGetTemplate() { - MapTemplate.Builder builder = new MapTemplate.Builder(); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer())); @@ -72,7 +74,7 @@ public class CategoriesScreen extends BaseMapScreen @NonNull private Header createHeader() { - Header.Builder builder = new Header.Builder(); + final Header.Builder builder = new Header.Builder(); builder.setStartHeaderAction(Action.BACK); builder.setTitle(getCarContext().getString(R.string.categories)); return builder.build(); @@ -81,13 +83,15 @@ public class CategoriesScreen extends BaseMapScreen @NonNull private ItemList createCategoriesList() { - ItemList.Builder builder = new ItemList.Builder(); - int categoriesSize = Math.min(CATEGORIES.size(), MAX_CATEGORIES_SIZE); + final ItemList.Builder builder = new ItemList.Builder(); + final int categoriesSize = Math.min(CATEGORIES.size(), MAX_CATEGORIES_SIZE); for (int i = 0; i < categoriesSize; ++i) { - Row.Builder itemBuilder = new Row.Builder(); - itemBuilder.setTitle(getCarContext().getString(CATEGORIES.get(i).nameResId)); + final Row.Builder itemBuilder = new Row.Builder(); + final String title = getCarContext().getString(CATEGORIES.get(i).nameResId); + itemBuilder.setTitle(title); itemBuilder.setImage(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), CATEGORIES.get(i).iconResId)).build()); + itemBuilder.setOnClickListener(() -> { /* TODO (AndrewShkrob): Will be implemented together with SearchScreen */ }); builder.addItem(itemBuilder.build()); } return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/ErrorScreen.java b/android/src/app/organicmaps/car/screens/ErrorScreen.java index bcdaf8525f..ff2eecefa0 100644 --- a/android/src/app/organicmaps/car/screens/ErrorScreen.java +++ b/android/src/app/organicmaps/car/screens/ErrorScreen.java @@ -1,19 +1,15 @@ package app.organicmaps.car.screens; -import android.util.Log; - import androidx.annotation.NonNull; import androidx.car.app.CarContext; -import androidx.car.app.Screen; import androidx.car.app.model.LongMessageTemplate; import androidx.car.app.model.Template; import app.organicmaps.R; +import app.organicmaps.car.screens.base.BaseScreen; -public class ErrorScreen extends Screen +public class ErrorScreen extends BaseScreen { - private static final String TAG = ErrorScreen.class.getSimpleName(); - public ErrorScreen(@NonNull CarContext carContext) { super(carContext); @@ -23,8 +19,7 @@ public class ErrorScreen extends Screen @Override public Template onGetTemplate() { - Log.d(TAG, "onGetTemplate"); - LongMessageTemplate.Builder builder = new LongMessageTemplate.Builder(getCarContext().getString(R.string.dialog_error_storage_message)); + final LongMessageTemplate.Builder builder = new LongMessageTemplate.Builder(getCarContext().getString(R.string.dialog_error_storage_message)); builder.setTitle(getCarContext().getString(R.string.dialog_error_storage_title)); return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java b/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java index cce5b9f63a..827c92fbe5 100644 --- a/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java +++ b/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java @@ -2,22 +2,19 @@ package app.organicmaps.car.screens; import androidx.annotation.NonNull; import androidx.car.app.CarContext; -import androidx.car.app.Screen; import androidx.car.app.model.Action; import androidx.car.app.model.CarIcon; import androidx.car.app.model.MessageTemplate; import androidx.car.app.model.Template; import androidx.core.graphics.drawable.IconCompat; +import app.organicmaps.car.screens.base.BaseScreen; import app.organicmaps.display.DisplayManager; import app.organicmaps.display.DisplayType; import app.organicmaps.R; -import app.organicmaps.util.log.Logger; -public class MapPlaceholderScreen extends Screen +public class MapPlaceholderScreen extends BaseScreen { - private static final String TAG = MapPlaceholderScreen.class.getSimpleName(); - public MapPlaceholderScreen(@NonNull CarContext carContext) { super(carContext); @@ -27,8 +24,7 @@ public class MapPlaceholderScreen extends Screen @Override public Template onGetTemplate() { - Logger.d(TAG, "onGetTemplate"); - MessageTemplate.Builder builder = new MessageTemplate.Builder(getCarContext().getString(R.string.aa_used_on_phone_screen)); + final MessageTemplate.Builder builder = new MessageTemplate.Builder(getCarContext().getString(R.string.aa_used_on_phone_screen)); builder.setHeaderAction(Action.APP_ICON); builder.setTitle(getCarContext().getString(R.string.app_name)); builder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_phone_android)).build()); diff --git a/android/src/app/organicmaps/car/screens/MapScreen.java b/android/src/app/organicmaps/car/screens/MapScreen.java index a01552fce6..aa0ca23dbc 100644 --- a/android/src/app/organicmaps/car/screens/MapScreen.java +++ b/android/src/app/organicmaps/car/screens/MapScreen.java @@ -14,7 +14,9 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; +import app.organicmaps.car.screens.search.SearchScreen; public class MapScreen extends BaseMapScreen { @@ -27,7 +29,7 @@ public class MapScreen extends BaseMapScreen @Override public Template onGetTemplate() { - MapTemplate.Builder builder = new MapTemplate.Builder(); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer())); @@ -38,7 +40,7 @@ public class MapScreen extends BaseMapScreen @NonNull private Header createHeader() { - Header.Builder builder = new Header.Builder(); + final Header.Builder builder = new Header.Builder(); builder.setStartHeaderAction(new Action.Builder(Action.APP_ICON).build()); builder.setTitle(getCarContext().getString(R.string.app_name)); return builder.build(); @@ -47,7 +49,7 @@ public class MapScreen extends BaseMapScreen @NonNull private ItemList createList() { - ItemList.Builder builder = new ItemList.Builder(); + final ItemList.Builder builder = new ItemList.Builder(); builder.addItem(createSearchItem()); builder.addItem(createCategoriesItem()); builder.addItem(createBookmarksItem()); @@ -59,7 +61,7 @@ public class MapScreen extends BaseMapScreen { final CarIcon iconSearch = new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_search)).build(); - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(R.string.search)); builder.setImage(iconSearch); builder.setBrowsable(true); @@ -70,7 +72,7 @@ public class MapScreen extends BaseMapScreen @NonNull private Item createCategoriesItem() { - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(R.string.categories)); builder.setBrowsable(true); builder.setOnClickListener(this::openCategories); @@ -80,7 +82,7 @@ public class MapScreen extends BaseMapScreen @NonNull private Item createBookmarksItem() { - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(R.string.bookmarks)); builder.setBrowsable(true); builder.setOnClickListener(this::openBookmarks); diff --git a/android/src/app/organicmaps/car/screens/NavigationScreen.java b/android/src/app/organicmaps/car/screens/NavigationScreen.java index 97beb01fec..1f123c3d1d 100644 --- a/android/src/app/organicmaps/car/screens/NavigationScreen.java +++ b/android/src/app/organicmaps/car/screens/NavigationScreen.java @@ -2,26 +2,53 @@ 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.Template; import androidx.car.app.navigation.model.NavigationTemplate; +import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; +import app.organicmaps.routing.RoutingController; public class NavigationScreen extends BaseMapScreen { + @NonNull + private final RoutingController mRoutingController; + public NavigationScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer) { super(carContext, surfaceRenderer); + mRoutingController = RoutingController.get(); } @NonNull @Override public Template onGetTemplate() { - NavigationTemplate.Builder builder = new NavigationTemplate.Builder(); - builder.setActionStrip(UiHelpers.createNavigationActionStrip(getCarContext(), getSurfaceRenderer())); + final NavigationTemplate.Builder builder = new NavigationTemplate.Builder(); + builder.setActionStrip(createActionStrip()); builder.setMapActionStrip(UiHelpers.createMapActionStrip(getCarContext(), getSurfaceRenderer())); return builder.build(); } + + @NonNull + private ActionStrip createActionStrip() + { + final Action.Builder stopActionBuilder = new Action.Builder(); + stopActionBuilder.setTitle(getCarContext().getString(R.string.current_location_unknown_stop_button)); + stopActionBuilder.setOnClickListener(this::stop); + final ActionStrip.Builder builder = new ActionStrip.Builder(); + builder.addAction(UiHelpers.createSettingsAction(getCarContext(), getSurfaceRenderer())); + builder.addAction(stopActionBuilder.build()); + return builder.build(); + } + + private void stop() + { + mRoutingController.cancel(); + getScreenManager().popToRoot(); + } } diff --git a/android/src/app/organicmaps/car/screens/BaseMapScreen.java b/android/src/app/organicmaps/car/screens/base/BaseMapScreen.java similarity index 70% rename from android/src/app/organicmaps/car/screens/BaseMapScreen.java rename to android/src/app/organicmaps/car/screens/base/BaseMapScreen.java index 031b6c3d88..f97f5cb8bb 100644 --- a/android/src/app/organicmaps/car/screens/BaseMapScreen.java +++ b/android/src/app/organicmaps/car/screens/base/BaseMapScreen.java @@ -1,12 +1,11 @@ -package app.organicmaps.car.screens; +package app.organicmaps.car.screens.base; import androidx.annotation.NonNull; import androidx.car.app.CarContext; -import androidx.car.app.Screen; import app.organicmaps.car.SurfaceRenderer; -public abstract class BaseMapScreen extends Screen +public abstract class BaseMapScreen extends BaseScreen { @NonNull private final SurfaceRenderer mSurfaceRenderer; @@ -18,7 +17,7 @@ public abstract class BaseMapScreen extends Screen } @NonNull - public SurfaceRenderer getSurfaceRenderer() + protected SurfaceRenderer getSurfaceRenderer() { return mSurfaceRenderer; } diff --git a/android/src/app/organicmaps/car/screens/base/BaseScreen.java b/android/src/app/organicmaps/car/screens/base/BaseScreen.java new file mode 100644 index 0000000000..a54fd570b8 --- /dev/null +++ b/android/src/app/organicmaps/car/screens/base/BaseScreen.java @@ -0,0 +1,15 @@ +package app.organicmaps.car.screens.base; + +import androidx.annotation.NonNull; +import androidx.car.app.CarContext; +import androidx.car.app.Screen; +import androidx.lifecycle.DefaultLifecycleObserver; + +public abstract class BaseScreen extends Screen implements DefaultLifecycleObserver +{ + public BaseScreen(@NonNull CarContext carContext) + { + super(carContext); + getLifecycle().addObserver(this); + } +} diff --git a/android/src/app/organicmaps/car/screens/SearchScreen.java b/android/src/app/organicmaps/car/screens/search/SearchScreen.java similarity index 79% rename from android/src/app/organicmaps/car/screens/SearchScreen.java rename to android/src/app/organicmaps/car/screens/search/SearchScreen.java index f6464aa869..2b5dd4a8eb 100644 --- a/android/src/app/organicmaps/car/screens/SearchScreen.java +++ b/android/src/app/organicmaps/car/screens/search/SearchScreen.java @@ -1,8 +1,7 @@ -package app.organicmaps.car.screens; +package app.organicmaps.car.screens.search; import androidx.annotation.NonNull; import androidx.car.app.CarContext; -import androidx.car.app.Screen; import androidx.car.app.constraints.ConstraintManager; import androidx.car.app.model.Action; import androidx.car.app.model.CarIcon; @@ -13,9 +12,10 @@ import androidx.car.app.model.Template; import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; +import app.organicmaps.car.screens.base.BaseScreen; import app.organicmaps.search.SearchRecents; -public class SearchScreen extends Screen implements SearchTemplate.SearchCallback +public class SearchScreen extends BaseScreen implements SearchTemplate.SearchCallback { private final int MAX_RESULTS_SIZE; private ItemList mResults; @@ -32,7 +32,7 @@ public class SearchScreen extends Screen implements SearchTemplate.SearchCallbac @Override public Template onGetTemplate() { - SearchTemplate.Builder builder = new SearchTemplate.Builder(this); + final SearchTemplate.Builder builder = new SearchTemplate.Builder(this); builder.setHeaderAction(Action.BACK); builder.setShowKeyboardByDefault(false); if (mSearchText.isEmpty() || mResults == null) @@ -46,13 +46,13 @@ public class SearchScreen extends Screen implements SearchTemplate.SearchCallbac { final CarIcon iconRecent = new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_search_recent)).build(); - ItemList.Builder builder = new ItemList.Builder(); + final ItemList.Builder builder = new ItemList.Builder(); builder.setNoItemsMessage(getCarContext().getString(R.string.search_history_text)); SearchRecents.refresh(); - int recentsSize = Math.min(SearchRecents.getSize(), MAX_RESULTS_SIZE); + final int recentsSize = Math.min(SearchRecents.getSize(), MAX_RESULTS_SIZE); for (int i = 0; i < recentsSize; ++i) { - Row.Builder itemBuilder = new Row.Builder(); + final Row.Builder itemBuilder = new Row.Builder(); itemBuilder.setTitle(SearchRecents.get(i)); itemBuilder.setImage(iconRecent); builder.addItem(itemBuilder.build()); diff --git a/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java b/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java index e049c8d2a1..c0c63f767a 100644 --- a/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java +++ b/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java @@ -14,8 +14,8 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; -import app.organicmaps.car.screens.BaseMapScreen; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.routing.RoutingOptions; import app.organicmaps.settings.RoadType; @@ -37,7 +37,7 @@ public class DrivingOptionsScreen extends BaseMapScreen @Override public Template onGetTemplate() { - MapTemplate.Builder builder = new MapTemplate.Builder(); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); builder.setItemList(createDrivingOptionsList()); @@ -47,7 +47,7 @@ public class DrivingOptionsScreen extends BaseMapScreen @NonNull private Header createHeader() { - Header.Builder builder = new Header.Builder(); + final Header.Builder builder = new Header.Builder(); builder.setStartHeaderAction(Action.BACK); builder.setTitle(getCarContext().getString(R.string.driving_options_subheader)); return builder.build(); @@ -56,7 +56,7 @@ public class DrivingOptionsScreen extends BaseMapScreen @NonNull private ItemList createDrivingOptionsList() { - ItemList.Builder builder = new ItemList.Builder(); + final ItemList.Builder builder = new ItemList.Builder(); builder.addItem(createDrivingOptionCheckbox(RoadType.Toll, R.string.avoid_tolls)); builder.addItem(createDrivingOptionCheckbox(RoadType.Dirty, R.string.avoid_unpaved)); builder.addItem(createDrivingOptionCheckbox(RoadType.Ferry, R.string.avoid_ferry)); @@ -67,14 +67,14 @@ public class DrivingOptionsScreen extends BaseMapScreen @NonNull private Row createDrivingOptionCheckbox(RoadType roadType, @StringRes int titleRes) { - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(titleRes)); builder.setOnClickListener(() -> { if (RoutingOptions.hasOption(roadType)) RoutingOptions.removeOption(roadType); else RoutingOptions.addOption(roadType); - DrivingOptionsScreen.this.invalidate(); + invalidate(); }); builder.setImage(RoutingOptions.hasOption(roadType) ? mCheckboxSelectedIcon : mCheckboxIcon); return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/settings/HelpScreen.java b/android/src/app/organicmaps/car/screens/settings/HelpScreen.java index d7e5b2f68f..68c290c721 100644 --- a/android/src/app/organicmaps/car/screens/settings/HelpScreen.java +++ b/android/src/app/organicmaps/car/screens/settings/HelpScreen.java @@ -14,8 +14,8 @@ import app.organicmaps.BuildConfig; import app.organicmaps.Framework; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; -import app.organicmaps.car.screens.BaseMapScreen; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.util.DateUtils; public class HelpScreen extends BaseMapScreen @@ -29,7 +29,7 @@ public class HelpScreen extends BaseMapScreen @Override public Template onGetTemplate() { - MapTemplate.Builder builder = new MapTemplate.Builder(); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); builder.setItemList(createSettingsList()); @@ -39,7 +39,7 @@ public class HelpScreen extends BaseMapScreen @NonNull private Header createHeader() { - Header.Builder builder = new Header.Builder(); + final Header.Builder builder = new Header.Builder(); builder.setStartHeaderAction(Action.BACK); builder.setTitle(getCarContext().getString(R.string.help)); return builder.build(); @@ -48,7 +48,7 @@ public class HelpScreen extends BaseMapScreen @NonNull private ItemList createSettingsList() { - ItemList.Builder builder = new ItemList.Builder(); + final ItemList.Builder builder = new ItemList.Builder(); builder.addItem(createVersionInfo()); builder.addItem(createDataVersionInfo()); return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java b/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java index 6e1018c0b2..a09320962e 100644 --- a/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java +++ b/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java @@ -15,8 +15,8 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.UiHelpers; -import app.organicmaps.car.screens.BaseMapScreen; +import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.util.Config; public class SettingsScreen extends BaseMapScreen @@ -47,7 +47,7 @@ public class SettingsScreen extends BaseMapScreen @Override public Template onGetTemplate() { - MapTemplate.Builder builder = new MapTemplate.Builder(); + final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); builder.setItemList(createSettingsList()); @@ -57,7 +57,7 @@ public class SettingsScreen extends BaseMapScreen @NonNull private Header createHeader() { - Header.Builder builder = new Header.Builder(); + final Header.Builder builder = new Header.Builder(); builder.setStartHeaderAction(Action.BACK); builder.setTitle(getCarContext().getString(R.string.settings)); return builder.build(); @@ -66,7 +66,7 @@ public class SettingsScreen extends BaseMapScreen @NonNull private ItemList createSettingsList() { - ItemList.Builder builder = new ItemList.Builder(); + final ItemList.Builder builder = new ItemList.Builder(); builder.addItem(createRoutingOptionsItem()); builder.addItem(createSharedPrefsCheckbox(R.string.big_font, Config::isLargeFontsSize, Config::setLargeFontsSize)); builder.addItem(createSharedPrefsCheckbox(R.string.transliteration_title, Config::isTransliteration, Config::setTransliteration)); @@ -77,7 +77,7 @@ public class SettingsScreen extends BaseMapScreen @NonNull private Item createRoutingOptionsItem() { - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(R.string.driving_options_title)); builder.setOnClickListener(() -> getScreenManager().push(new DrivingOptionsScreen(getCarContext(), getSurfaceRenderer()))); builder.setBrowsable(true); @@ -87,7 +87,7 @@ public class SettingsScreen extends BaseMapScreen @NonNull private Item createHelpItem() { - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(R.string.help)); builder.setOnClickListener(() -> getScreenManager().push(new HelpScreen(getCarContext(), getSurfaceRenderer()))); builder.setBrowsable(true); @@ -99,11 +99,11 @@ public class SettingsScreen extends BaseMapScreen { final boolean getterValue = getter.get(); - Row.Builder builder = new Row.Builder(); + final Row.Builder builder = new Row.Builder(); builder.setTitle(getCarContext().getString(titleRes)); builder.setOnClickListener(() -> { setter.set(!getterValue); - SettingsScreen.this.invalidate(); + invalidate(); }); builder.setImage(getterValue ? mCheckboxSelectedIcon : mCheckboxIcon); return builder.build(); diff --git a/android/src/app/organicmaps/car/UiHelpers.java b/android/src/app/organicmaps/car/util/UiHelpers.java similarity index 79% rename from android/src/app/organicmaps/car/UiHelpers.java rename to android/src/app/organicmaps/car/util/UiHelpers.java index b575521060..f75e1e89fb 100644 --- a/android/src/app/organicmaps/car/UiHelpers.java +++ b/android/src/app/organicmaps/car/util/UiHelpers.java @@ -1,4 +1,4 @@ -package app.organicmaps.car; +package app.organicmaps.car.util; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -12,29 +12,20 @@ import androidx.car.app.navigation.model.MapController; import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; +import app.organicmaps.car.SurfaceRenderer; import app.organicmaps.car.screens.settings.SettingsScreen; import app.organicmaps.location.LocationHelper; import app.organicmaps.location.LocationState; -import app.organicmaps.routing.RoutingController; public final class UiHelpers { + @NonNull public static ActionStrip createSettingsActionStrip(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) { - return new ActionStrip.Builder().addAction(createSettingsButton(context, surfaceRenderer)).build(); - } - - public static ActionStrip createNavigationActionStrip(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) - { - Action.Builder stopButtonBuilder = new Action.Builder(); - stopButtonBuilder.setTitle(context.getString(R.string.current_location_unknown_stop_button)); - stopButtonBuilder.setOnClickListener(() -> { - RoutingController.get().cancel(); - context.getCarService(ScreenManager.class).popToRoot(); - }); - return new ActionStrip.Builder().addAction(createSettingsButton(context, surfaceRenderer)).addAction(stopButtonBuilder.build()).build(); + return new ActionStrip.Builder().addAction(createSettingsAction(context, surfaceRenderer)).build(); } + @NonNull public static ActionStrip createMapActionStrip(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) { final CarIcon iconPlus = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_plus)).build(); @@ -52,12 +43,14 @@ public final class UiHelpers .build(); } + @NonNull public static MapController createMapController(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) { return new MapController.Builder().setMapActionStrip(createMapActionStrip(context, surfaceRenderer)).build(); } - private static Action createSettingsButton(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) + @NonNull + public static Action createSettingsAction(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) { final CarIcon iconSettings = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_settings)).build(); @@ -66,6 +59,7 @@ public final class UiHelpers ).build(); } + @NonNull private static Action createLocationButton(@NonNull CarContext context) { final Action.Builder builder = new Action.Builder();