Skip to content

Commit 94d6193

Browse files
authored
NN: start and stop nav session (#7145)
1 parent 3efdc2c commit 94d6193

File tree

5 files changed

+76
-25
lines changed

5 files changed

+76
-25
lines changed

libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1992,6 +1992,7 @@ class MapboxNavigation @VisibleForTesting internal constructor(
19921992
navigatorConfig,
19931993
)
19941994
historyRecorderHandles = createHistoryRecorderHandles(config)
1995+
19951996
mainJobController.scope.launch {
19961997
navigator.recreate(
19971998
config,

libnavigation-core/src/main/java/com/mapbox/navigation/core/trip/session/MapboxTripSession.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ internal class MapboxTripSession(
325325
override fun start(withTripService: Boolean, withReplayEnabled: Boolean) {
326326
if (state != TripSessionState.STARTED) {
327327
navigator.addNavigatorObserver(navigatorObserver)
328+
navigator.startNavigationSession()
328329
if (withTripService) {
329330
tripService.startService()
330331
}
@@ -364,6 +365,7 @@ internal class MapboxTripSession(
364365
if (state == TripSessionState.STOPPED) {
365366
return
366367
}
368+
navigator.stopNavigationSession()
367369
navigator.removeNavigatorObserver(navigatorObserver)
368370
tripService.stopService()
369371
tripSessionLocationEngine.stopLocationUpdates()

libnavigation-core/src/test/java/com/mapbox/navigation/core/trip/session/MapboxTripSessionTest.kt

Lines changed: 58 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,12 @@ class MapboxTripSessionTest {
220220
tripSession.start(true)
221221

222222
assertTrue(tripSession.isRunningWithForegroundService())
223-
verify { tripService.startService() }
224-
verify { tripSessionLocationEngine.startLocationUpdates(any(), any()) }
223+
224+
verifyOrder {
225+
navigator.startNavigationSession()
226+
tripService.startService()
227+
tripSessionLocationEngine.startLocationUpdates(any(), any())
228+
}
225229

226230
tripSession.stop()
227231
}
@@ -234,7 +238,10 @@ class MapboxTripSessionTest {
234238

235239
assertFalse(tripSession.isRunningWithForegroundService())
236240
verify(exactly = 0) { tripService.startService() }
237-
verify { tripSessionLocationEngine.startLocationUpdates(any(), any()) }
241+
verifyOrder {
242+
navigator.startNavigationSession()
243+
tripSessionLocationEngine.startLocationUpdates(any(), any())
244+
}
238245

239246
tripSession.stop()
240247
}
@@ -249,9 +256,11 @@ class MapboxTripSessionTest {
249256

250257
verifyOrder {
251258
navigator.addNavigatorObserver(any())
259+
navigator.startNavigationSession()
252260
tripService.startService()
253261
tripSessionLocationEngine.startLocationUpdates(any(), any())
254262
tripSessionLocationEngine.startLocationUpdates(any(), any())
263+
navigator.stopNavigationSession()
255264
navigator.removeNavigatorObserver(any())
256265
tripSession.stop()
257266
tripSessionLocationEngine.stopLocationUpdates()
@@ -267,10 +276,12 @@ class MapboxTripSessionTest {
267276

268277
verifyOrder {
269278
navigator.addNavigatorObserver(any())
279+
navigator.startNavigationSession()
270280
tripService.startService()
271281
tripSessionLocationEngine.startLocationUpdates(false, any())
272282
tripSessionLocationEngine.startLocationUpdates(true, any())
273283
tripSessionLocationEngine.startLocationUpdates(false, any())
284+
navigator.stopNavigationSession()
274285
navigator.removeNavigatorObserver(any())
275286
tripSession.stop()
276287
tripSessionLocationEngine.stopLocationUpdates()
@@ -286,6 +297,15 @@ class MapboxTripSessionTest {
286297
verify { tripService.stopService() }
287298
}
288299

300+
@Test
301+
fun stopSessionStoppingNativeNavigationSession() {
302+
tripSession.start(true)
303+
304+
tripSession.stop()
305+
306+
verify(exactly = 1) { navigator.stopNavigationSession() }
307+
}
308+
289309
@Test
290310
fun stopSessionCallsLocationEngineRemoveLocationUpdates() {
291311
tripSession.start(true)
@@ -1444,31 +1464,45 @@ class MapboxTripSessionTest {
14441464
}
14451465

14461466
@Test
1447-
fun `routeProgress updates ignored while primary route is being set`() = coroutineRule.runBlockingTest {
1448-
val primary = mockNavigationRoute()
1449-
val alternative = mockNavigationRoute()
1450-
coEvery { navigator.setRoutes(primary, legIndex, listOf(alternative), any()) } coAnswers {
1451-
delay(100)
1452-
createSetRouteResult()
1453-
}
1467+
fun `routeProgress updates ignored while primary route is being set`() =
1468+
coroutineRule.runBlockingTest {
1469+
val primary = mockNavigationRoute()
1470+
val alternative = mockNavigationRoute()
1471+
coEvery {
1472+
navigator.setRoutes(
1473+
primary,
1474+
legIndex,
1475+
listOf(alternative),
1476+
any()
1477+
)
1478+
} coAnswers {
1479+
delay(100)
1480+
createSetRouteResult()
1481+
}
14541482

1455-
val observer = mockk<RouteProgressObserver>(relaxUnitFun = true)
1483+
val observer = mockk<RouteProgressObserver>(relaxUnitFun = true)
14561484

1457-
val tripSession = buildTripSession()
1458-
tripSession.registerRouteProgressObserver(observer)
1459-
tripSession.start(withTripService = true)
1485+
val tripSession = buildTripSession()
1486+
tripSession.registerRouteProgressObserver(observer)
1487+
tripSession.start(withTripService = true)
14601488

1461-
pauseDispatcher {
1462-
launch { tripSession.setRoutes(listOf(primary, alternative), setRoutesInfo) }
1463-
runCurrent()
1464-
advanceTimeBy(delayTimeMillis = 50)
1465-
navigatorObserverImplSlot.captured.onStatus(navigationStatusOrigin, navigationStatus)
1466-
verify(exactly = 0) { observer.onRouteProgressChanged(any()) }
1467-
advanceTimeBy(delayTimeMillis = 100)
1468-
navigatorObserverImplSlot.captured.onStatus(navigationStatusOrigin, navigationStatus)
1469-
verify(exactly = 1) { observer.onRouteProgressChanged(any()) }
1489+
pauseDispatcher {
1490+
launch { tripSession.setRoutes(listOf(primary, alternative), setRoutesInfo) }
1491+
runCurrent()
1492+
advanceTimeBy(delayTimeMillis = 50)
1493+
navigatorObserverImplSlot.captured.onStatus(
1494+
navigationStatusOrigin,
1495+
navigationStatus
1496+
)
1497+
verify(exactly = 0) { observer.onRouteProgressChanged(any()) }
1498+
advanceTimeBy(delayTimeMillis = 100)
1499+
navigatorObserverImplSlot.captured.onStatus(
1500+
navigationStatusOrigin,
1501+
navigationStatus
1502+
)
1503+
verify(exactly = 1) { observer.onRouteProgressChanged(any()) }
1504+
}
14701505
}
1471-
}
14721506

14731507
@Test
14741508
fun `routeProgress updates not ignored while only alternative route is being set`() =

libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ interface MapboxNativeNavigator {
5858

5959
suspend fun resetRideSession()
6060

61+
fun startNavigationSession()
62+
63+
fun stopNavigationSession()
64+
6165
// Route following
6266

6367
/**

libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,11 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator {
113113
historyRecorderComposite: HistoryRecorderHandle?,
114114
tilesConfig: TilesConfig,
115115
accessToken: String,
116-
router: RouterInterface,
116+
router: RouterInterface
117117
) {
118+
val storeNavSessionState = navigator!!.storeNavigationSession()
118119
create(config, historyRecorderComposite, tilesConfig, accessToken, router)
120+
navigator!!.restoreNavigationSession(storeNavSessionState)
119121
nativeNavigatorRecreationObservers.forEach {
120122
it.onNativeNavigatorRecreated()
121123
}
@@ -127,6 +129,14 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator {
127129
}
128130
}
129131

132+
override fun startNavigationSession() {
133+
navigator!!.startNavigationSession()
134+
}
135+
136+
override fun stopNavigationSession() {
137+
navigator!!.stopNavigationSession()
138+
}
139+
130140
/**
131141
* Passes in the current raw location of the user.
132142
*

0 commit comments

Comments
 (0)