[android-auto] Fix display switching in navigation mode

Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
Andrei Shkrob
2025-09-26 11:24:43 +02:00
committed by x7z4w
parent 034098f5ef
commit 1c8eeeeee2
3 changed files with 27 additions and 4 deletions

View File

@@ -17,6 +17,7 @@ import app.organicmaps.car.renderer.RendererFactory;
import app.organicmaps.car.screens.ErrorScreen; import app.organicmaps.car.screens.ErrorScreen;
import app.organicmaps.car.screens.MapPlaceholderScreen; import app.organicmaps.car.screens.MapPlaceholderScreen;
import app.organicmaps.car.screens.MapScreen; import app.organicmaps.car.screens.MapScreen;
import app.organicmaps.car.screens.NavigationScreen;
import app.organicmaps.car.screens.PlaceScreen; import app.organicmaps.car.screens.PlaceScreen;
import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.car.screens.base.BaseMapScreen;
import app.organicmaps.car.screens.download.DownloadMapsScreen; import app.organicmaps.car.screens.download.DownloadMapsScreen;
@@ -285,7 +286,19 @@ public final class CarAppSession extends Session implements DefaultLifecycleObse
private void restoreRoute() private void restoreRoute()
{ {
final RoutingController routingController = RoutingController.get(); 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) final PlaceScreen placeScreen = new PlaceScreen.Builder(getCarContext(), mSurfaceRenderer)
.setMapObject(routingController.getEndPoint()) .setMapObject(routingController.getEndPoint())
@@ -294,4 +307,14 @@ public final class CarAppSession extends Session implements DefaultLifecycleObse
mScreenManager.push(placeScreen); mScreenManager.push(placeScreen);
} }
} }
private boolean hasNavigationScreenInStack()
{
for (final Screen screen : mScreenManager.getScreenStack())
{
if (NavigationScreen.MARKER.equals(screen.getMarker()))
return true;
}
return false;
}
} }

View File

@@ -125,6 +125,8 @@ public class NavigationScreen extends BaseMapScreen implements RoutingController
if (!mNavigationCancelled) if (!mNavigationCancelled)
CarToast.makeText(getCarContext(), getCarContext().getString(R.string.trip_finished), CarToast.LENGTH_LONG) CarToast.makeText(getCarContext(), getCarContext().getString(R.string.trip_finished), CarToast.LENGTH_LONG)
.show(); .show();
NavigationService.stopService(getCarContext());
ThemeUtils.update(getCarContext());
finish(); finish();
getScreenManager().popToRoot(); getScreenManager().popToRoot();
} }
@@ -156,13 +158,11 @@ public class NavigationScreen extends BaseMapScreen implements RoutingController
public void onDestroy(@NonNull LifecycleOwner owner) public void onDestroy(@NonNull LifecycleOwner owner)
{ {
super.onDestroy(owner); super.onDestroy(owner);
NavigationService.stopService(getCarContext());
MwmApplication.from(getCarContext()).getLocationHelper().removeListener(mLocationListener); MwmApplication.from(getCarContext()).getLocationHelper().removeListener(mLocationListener);
if (mRoutingController.isNavigating()) if (mRoutingController.isNavigating())
mRoutingController.onSaveState(); mRoutingController.onSaveState();
mRoutingController.detach(); mRoutingController.detach();
ThemeUtils.update(getCarContext());
mNavigationManager.navigationEnded(); mNavigationManager.navigationEnded();
mNavigationManager.clearNavigationManagerCallback(); mNavigationManager.clearNavigationManagerCallback();
} }

View File

@@ -46,7 +46,7 @@ import java.util.Objects;
public class PlaceScreen extends BaseMapScreen implements OnBackPressedCallback.Callback, RoutingController.Container 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 @Nullable
private MapObject mMapObject; private MapObject mMapObject;