diff --git a/android/app/src/main/java/app/organicmaps/car/CarAppSession.java b/android/app/src/main/java/app/organicmaps/car/CarAppSession.java index 2f692567f..ab97f90ed 100644 --- a/android/app/src/main/java/app/organicmaps/car/CarAppSession.java +++ b/android/app/src/main/java/app/organicmaps/car/CarAppSession.java @@ -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; + } } diff --git a/android/app/src/main/java/app/organicmaps/car/screens/NavigationScreen.java b/android/app/src/main/java/app/organicmaps/car/screens/NavigationScreen.java index b9100cca2..eb6125b7f 100644 --- a/android/app/src/main/java/app/organicmaps/car/screens/NavigationScreen.java +++ b/android/app/src/main/java/app/organicmaps/car/screens/NavigationScreen.java @@ -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(); } diff --git a/android/app/src/main/java/app/organicmaps/car/screens/PlaceScreen.java b/android/app/src/main/java/app/organicmaps/car/screens/PlaceScreen.java index b51506ac9..47e9b7d42 100644 --- a/android/app/src/main/java/app/organicmaps/car/screens/PlaceScreen.java +++ b/android/app/src/main/java/app/organicmaps/car/screens/PlaceScreen.java @@ -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;