[android-auto] Refactoring #4989
15 changed files with 130 additions and 97 deletions
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
15
android/src/app/organicmaps/car/screens/base/BaseScreen.java
Normal file
15
android/src/app/organicmaps/car/screens/base/BaseScreen.java
Normal 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);
|
||||
}
|
||||
}
|
|
@ -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());
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
Reference in a new issue
Is it a good idea to use annotations like
NonNull
, etc.?