[android-auto] Refactoring #4989

Merged
root merged 1 commit from android-auto/refactoring into aa 2023-04-17 20:26:00 +00:00
15 changed files with 130 additions and 97 deletions

View file

@ -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;

View file

@ -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()

View file

@ -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<BookmarkCategory> bookmarkCategories = new ArrayList<>(BookmarkManager.INSTANCE.getCategories());
final List<BookmarkCategory> 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);

View file

@ -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<CategoryData> 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();

View file

@ -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();

View file

@ -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());

View file

@ -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);

View file

@ -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;
biodranik commented 2023-04-15 15:43:23 +00:00 (Migrated from github.com)
Review

Is it a good idea to use annotations like NonNull, etc.?

Is it a good idea to use annotations like `NonNull`, etc.?
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();
}
}

View file

@ -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;
}

View file

@ -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);
}
}

View file

@ -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());

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -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();