mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[android-auto] Fix display switching in navigation mode
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
@@ -17,6 +17,7 @@ import app.organicmaps.car.renderer.RendererFactory;
|
||||
import app.organicmaps.car.screens.ErrorScreen;
|
||||
import app.organicmaps.car.screens.MapPlaceholderScreen;
|
||||
import app.organicmaps.car.screens.MapScreen;
|
||||
import app.organicmaps.car.screens.NavigationScreen;
|
||||
import app.organicmaps.car.screens.PlaceScreen;
|
||||
import app.organicmaps.car.screens.base.BaseMapScreen;
|
||||
import app.organicmaps.car.screens.download.DownloadMapsScreen;
|
||||
@@ -285,7 +286,19 @@ public final class CarAppSession extends Session implements DefaultLifecycleObse
|
||||
private void restoreRoute()
|
||||
{
|
||||
final RoutingController routingController = RoutingController.get();
|
||||
if (routingController.isPlanning() || routingController.isNavigating() || routingController.hasSavedRoute())
|
||||
final boolean isNavigating = routingController.isNavigating();
|
||||
final boolean hasNavigatingScreen = hasNavigationScreenInStack();
|
||||
|
||||
if (!isNavigating && hasNavigatingScreen)
|
||||
mScreenManager.popToRoot();
|
||||
|
||||
if (isNavigating && routingController.getLastRouterType() == PlaceScreen.ROUTER && hasNavigatingScreen)
|
||||
{
|
||||
mScreenManager.popTo(NavigationScreen.MARKER);
|
||||
return;
|
||||
}
|
||||
|
||||
if (routingController.isPlanning() || isNavigating || routingController.hasSavedRoute())
|
||||
{
|
||||
final PlaceScreen placeScreen = new PlaceScreen.Builder(getCarContext(), mSurfaceRenderer)
|
||||
.setMapObject(routingController.getEndPoint())
|
||||
@@ -294,4 +307,14 @@ public final class CarAppSession extends Session implements DefaultLifecycleObse
|
||||
mScreenManager.push(placeScreen);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasNavigationScreenInStack()
|
||||
{
|
||||
for (final Screen screen : mScreenManager.getScreenStack())
|
||||
{
|
||||
if (NavigationScreen.MARKER.equals(screen.getMarker()))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,6 +125,8 @@ public class NavigationScreen extends BaseMapScreen implements RoutingController
|
||||
if (!mNavigationCancelled)
|
||||
CarToast.makeText(getCarContext(), getCarContext().getString(R.string.trip_finished), CarToast.LENGTH_LONG)
|
||||
.show();
|
||||
NavigationService.stopService(getCarContext());
|
||||
ThemeUtils.update(getCarContext());
|
||||
finish();
|
||||
getScreenManager().popToRoot();
|
||||
}
|
||||
@@ -156,13 +158,11 @@ public class NavigationScreen extends BaseMapScreen implements RoutingController
|
||||
public void onDestroy(@NonNull LifecycleOwner owner)
|
||||
{
|
||||
super.onDestroy(owner);
|
||||
NavigationService.stopService(getCarContext());
|
||||
MwmApplication.from(getCarContext()).getLocationHelper().removeListener(mLocationListener);
|
||||
|
||||
if (mRoutingController.isNavigating())
|
||||
mRoutingController.onSaveState();
|
||||
mRoutingController.detach();
|
||||
ThemeUtils.update(getCarContext());
|
||||
mNavigationManager.navigationEnded();
|
||||
mNavigationManager.clearNavigationManagerCallback();
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ import java.util.Objects;
|
||||
|
||||
public class PlaceScreen extends BaseMapScreen implements OnBackPressedCallback.Callback, RoutingController.Container
|
||||
{
|
||||
private static final Router ROUTER = Router.Vehicle;
|
||||
public static final Router ROUTER = Router.Vehicle;
|
||||
|
||||
@Nullable
|
||||
private MapObject mMapObject;
|
||||
|
||||
Reference in New Issue
Block a user