From 4d83f0204dac808fc07e6597fe4a0e41a1ae06bf Mon Sep 17 00:00:00 2001 From: Roman Tsisyk Date: Fri, 22 Sep 2023 10:22:38 +0300 Subject: [PATCH] [android] Force NavigationService to stop when a route finishes RoutingController::cancel() calls MwmActivity::onNavigationCancelled() only if MwmActivity is attached to RoutingController. Add explicit Service::stopSelf() to NavigationService to dismiss notification when route is finished. Fixes #6084 Signed-off-by: Roman Tsisyk --- .../app/organicmaps/routing/NavigationService.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/app/organicmaps/routing/NavigationService.java b/android/app/src/main/java/app/organicmaps/routing/NavigationService.java index 326914455d..838cf5b9dc 100644 --- a/android/app/src/main/java/app/organicmaps/routing/NavigationService.java +++ b/android/app/src/main/java/app/organicmaps/routing/NavigationService.java @@ -210,16 +210,21 @@ public class NavigationService extends Service implements LocationListener if (!routingController.isNavigating()) return; + final String[] turnNotifications = Framework.nativeGenerateNotifications(); + if (turnNotifications != null) + TtsPlayer.INSTANCE.playTurnNotifications(getApplicationContext(), turnNotifications); + // TODO: consider to create callback mechanism to transfer 'ROUTE_IS_FINISHED' event from // the core to the platform code (https://github.com/organicmaps/organicmaps/issues/3589), // because calling the native method 'nativeIsRouteFinished' // too often can result in poor UI performance. + // This check should be done after playTurnNotifications() to play the last turn notification. if (Framework.nativeIsRouteFinished()) + { routingController.cancel(); - - final String[] turnNotifications = Framework.nativeGenerateNotifications(); - if (turnNotifications != null) - TtsPlayer.INSTANCE.playTurnNotifications(getApplicationContext(), turnNotifications); + stopSelf(); + return; + } final RoutingInfo routingInfo = Framework.nativeGetRouteFollowingInfo(); if (routingInfo == null)