Skip to content

Commit 22c0e5b

Browse files
dzinadgithub-actions[bot]
authored andcommitted
NAVAND-6558: add RerouteStateV2 (#11698)
GitOrigin-RevId: 1207834abf5cbe8b0836828eb980a30f096259e9
1 parent c607ff9 commit 22c0e5b

File tree

18 files changed

+1980
-157
lines changed

18 files changed

+1980
-157
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
- Added new class `RerouteStateV2`: it allows you to observe RerouteStates with additional substates which are not present in the original `RerouteState`.
2+
Current additional states are: `RerouteStateV2.Deviation.ApplyingRoute` and `RerouteStateV2.Deviation.RouteIgnored`. See the corresponding API reference for details.
3+
To observe `RerouteStateV2`, register a new type of observer: `RerouteController#registerRerouteStateV2Observer`.

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/CoreMapMatchingTests.kt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.mapbox.navigation.core.mapmatching.MapMatchingFailure
2424
import com.mapbox.navigation.core.mapmatching.MapMatchingOptions
2525
import com.mapbox.navigation.core.mapmatching.MapMatchingSuccessfulResult
2626
import com.mapbox.navigation.core.reroute.RerouteState
27+
import com.mapbox.navigation.core.reroute.RerouteStateV2
2728
import com.mapbox.navigation.core.routerefresh.RouteRefreshExtra
2829
import com.mapbox.navigation.instrumentation_tests.R
2930
import com.mapbox.navigation.testing.ui.BaseCoreNoCleanUpTest
@@ -33,11 +34,14 @@ import com.mapbox.navigation.testing.ui.utils.coroutines.getSuccessfulResultOrTh
3334
import com.mapbox.navigation.testing.ui.utils.coroutines.requestMapMatching
3435
import com.mapbox.navigation.testing.ui.utils.coroutines.requestRoutes
3536
import com.mapbox.navigation.testing.ui.utils.coroutines.rerouteStates
37+
import com.mapbox.navigation.testing.ui.utils.coroutines.rerouteStatesV2
3638
import com.mapbox.navigation.testing.ui.utils.coroutines.routeProgressUpdates
3739
import com.mapbox.navigation.testing.ui.utils.coroutines.routesUpdates
3840
import com.mapbox.navigation.testing.ui.utils.coroutines.sdkTest
3941
import com.mapbox.navigation.testing.ui.utils.coroutines.setNavigationRoutesAsync
4042
import com.mapbox.navigation.testing.utils.assertions.assertRerouteFailedTransition
43+
import com.mapbox.navigation.testing.utils.assertions.assertRerouteFailedTransitionV2
44+
import com.mapbox.navigation.testing.utils.assertions.assertSuccessfulRouteAppliedRerouteStateTransition
4145
import com.mapbox.navigation.testing.utils.history.MapboxHistoryTestRule
4246
import com.mapbox.navigation.testing.utils.http.MockDirectionsRefreshHandler
4347
import com.mapbox.navigation.testing.utils.http.MockDirectionsRequestHandler
@@ -58,6 +62,7 @@ import kotlinx.coroutines.flow.drop
5862
import kotlinx.coroutines.flow.filter
5963
import kotlinx.coroutines.flow.first
6064
import kotlinx.coroutines.withContext
65+
import kotlinx.coroutines.yield
6166
import okhttp3.mockwebserver.MockResponse
6267
import org.junit.Assert.assertEquals
6368
import org.junit.Assert.assertNull
@@ -190,9 +195,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
190195
historyRecorderRule = mapboxHistoryTestRule,
191196
) { navigation ->
192197
val rerouteStates = mutableListOf<RerouteState>()
198+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
193199
navigation.getRerouteController()!!.registerRerouteStateObserver {
194200
rerouteStates.add(it)
195201
}
202+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
203+
rerouteStatesV2.add(it)
204+
}
196205

197206
val (options, directionOptions) =
198207
setupAlternativeRoutesFromMapMatchingAndDirectionsAPI()
@@ -222,6 +231,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
222231
regularOnlineRerouteFlow,
223232
rerouteStates,
224233
)
234+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
225235
}
226236
}
227237

@@ -231,9 +241,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
231241
historyRecorderRule = mapboxHistoryTestRule,
232242
) { navigation ->
233243
val rerouteStates = mutableListOf<RerouteState>()
244+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
234245
navigation.getRerouteController()!!.registerRerouteStateObserver {
235246
rerouteStates.add(it)
236247
}
248+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
249+
rerouteStatesV2.add(it)
250+
}
237251

238252
val (primaryMapMatched, _, mapMatchedAlternativeOptions) =
239253
setupAlternativeRoutesFromMapMatchingAndDirectionsAPI()
@@ -263,6 +277,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
263277
regularOnlineRerouteFlow,
264278
rerouteStates,
265279
)
280+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
266281
}
267282
}
268283

@@ -315,9 +330,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
315330
historyRecorderRule = mapboxHistoryTestRule,
316331
) { navigation ->
317332
val rerouteStates = mutableListOf<RerouteState>()
333+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
318334
navigation.getRerouteController()!!.registerRerouteStateObserver {
319335
rerouteStates.add(it)
320336
}
337+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
338+
rerouteStatesV2.add(it)
339+
}
321340
val options = setupTestMapMatchingRoute()
322341
val result = navigation.requestMapMatching(options).getSuccessfulOrThrowException()
323342
navigation.setNavigationRoutes(listOf(result.matches.first().navigationRoute))
@@ -336,10 +355,21 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
336355
navigation.getRerouteController()?.rerouteStates()?.first {
337356
it !is RerouteState.Idle
338357
}
358+
navigation.getRerouteController()?.rerouteStatesV2()?.first {
359+
it !is RerouteStateV2.Idle
360+
}
339361
navigation.getRerouteController()?.rerouteStates()?.first {
340362
it is RerouteState.Idle
341363
}
364+
navigation.getRerouteController()?.rerouteStatesV2()?.first {
365+
it is RerouteStateV2.Idle
366+
}
367+
368+
// let the rerouteStatesV2Observer be notified
369+
yield()
370+
342371
assertRerouteFailedTransition(rerouteStates)
372+
assertRerouteFailedTransitionV2(rerouteStatesV2)
343373
}
344374
}
345375
}
@@ -350,9 +380,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
350380
historyRecorderRule = mapboxHistoryTestRule,
351381
) { navigation ->
352382
val rerouteStates = mutableListOf<RerouteState>()
383+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
353384
navigation.getRerouteController()!!.registerRerouteStateObserver {
354385
rerouteStates.add(it)
355386
}
387+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
388+
rerouteStatesV2.add(it)
389+
}
356390
val options = setupTestMapMatchingRoute()
357391
val result = navigation.requestMapMatching(options).getSuccessfulOrThrowException()
358392

@@ -385,6 +419,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
385419
.drop(3)
386420
.first()
387421
assertRerouteFailedTransition(rerouteStates)
422+
assertRerouteFailedTransitionV2(rerouteStatesV2)
388423
}
389424
}
390425
}
@@ -398,9 +433,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
398433
val geometryToDeviate = setupMockRouteAfterDeviation()
399434

400435
val rerouteStates = mutableListOf<RerouteState>()
436+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
401437
navigation.getRerouteController()!!.registerRerouteStateObserver {
402438
rerouteStates.add(it)
403439
}
440+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
441+
rerouteStatesV2.add(it)
442+
}
404443

405444
val options = setupAlternativeRoutesFromMapMatchingAndDirectionsAPI()
406445
.primaryMapMatchedRouteOptions
@@ -442,6 +481,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
442481
)
443482

444483
assertEquals(regularOnlineRerouteFlow, rerouteStates)
484+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
445485
}
446486
}
447487

@@ -454,9 +494,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
454494
val geometryToDeviate = setupMockRouteAfterDeviation()
455495

456496
val rerouteStates = mutableListOf<RerouteState>()
497+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
457498
navigation.getRerouteController()!!.registerRerouteStateObserver {
458499
rerouteStates.add(it)
459500
}
501+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
502+
rerouteStatesV2.add(it)
503+
}
460504

461505
val options = setupTwoLegsMapMatchingRoute()
462506
val mapMatchingResult =
@@ -509,6 +553,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
509553
)
510554

511555
assertEquals(regularOnlineRerouteFlow, rerouteStates)
556+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
512557
}
513558
}
514559

@@ -519,9 +564,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
519564
rerouteStrategyForMapMatchedRoutes = RerouteDisabled,
520565
) { navigation ->
521566
val rerouteStates = mutableListOf<RerouteState>()
567+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
522568
navigation.getRerouteController()!!.registerRerouteStateObserver {
523569
rerouteStates.add(it)
524570
}
571+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
572+
rerouteStatesV2.add(it)
573+
}
525574

526575
val waitForReroute = CompletableDeferred<Unit>()
527576
navigation.registerOffRouteObserver { offRoute ->
@@ -555,6 +604,8 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
555604
)
556605

557606
assertEquals(expectedStates, rerouteStates)
607+
assertRerouteFailedTransitionV2(rerouteStatesV2)
608+
assertEquals(message, (rerouteStatesV2[2] as RerouteStateV2.Failed).message)
558609
}
559610
}
560611

0 commit comments

Comments
 (0)