Skip to content

Commit 6dc2c19

Browse files
dzinadgithub-actions[bot]
authored andcommitted
NAVAND-6558: add RerouteStateV2 (#11698)
GitOrigin-RevId: 96cd78985f55e63bb5277a8ca08818ed0336961a
1 parent f183246 commit 6dc2c19

File tree

17 files changed

+1972
-157
lines changed

17 files changed

+1972
-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
@@ -23,6 +23,7 @@ import com.mapbox.navigation.core.mapmatching.MapMatchingFailure
2323
import com.mapbox.navigation.core.mapmatching.MapMatchingOptions
2424
import com.mapbox.navigation.core.mapmatching.MapMatchingSuccessfulResult
2525
import com.mapbox.navigation.core.reroute.RerouteState
26+
import com.mapbox.navigation.core.reroute.RerouteStateV2
2627
import com.mapbox.navigation.core.routerefresh.RouteRefreshExtra
2728
import com.mapbox.navigation.instrumentation_tests.R
2829
import com.mapbox.navigation.testing.ui.BaseCoreNoCleanUpTest
@@ -32,11 +33,14 @@ import com.mapbox.navigation.testing.ui.utils.coroutines.getSuccessfulResultOrTh
3233
import com.mapbox.navigation.testing.ui.utils.coroutines.requestMapMatching
3334
import com.mapbox.navigation.testing.ui.utils.coroutines.requestRoutes
3435
import com.mapbox.navigation.testing.ui.utils.coroutines.rerouteStates
36+
import com.mapbox.navigation.testing.ui.utils.coroutines.rerouteStatesV2
3537
import com.mapbox.navigation.testing.ui.utils.coroutines.routeProgressUpdates
3638
import com.mapbox.navigation.testing.ui.utils.coroutines.routesUpdates
3739
import com.mapbox.navigation.testing.ui.utils.coroutines.sdkTest
3840
import com.mapbox.navigation.testing.ui.utils.coroutines.setNavigationRoutesAsync
3941
import com.mapbox.navigation.testing.utils.assertions.assertRerouteFailedTransition
42+
import com.mapbox.navigation.testing.utils.assertions.assertRerouteFailedTransitionV2
43+
import com.mapbox.navigation.testing.utils.assertions.assertSuccessfulRouteAppliedRerouteStateTransition
4044
import com.mapbox.navigation.testing.utils.history.MapboxHistoryTestRule
4145
import com.mapbox.navigation.testing.utils.http.MockDirectionsRefreshHandler
4246
import com.mapbox.navigation.testing.utils.http.MockDirectionsRequestHandler
@@ -57,6 +61,7 @@ import kotlinx.coroutines.flow.drop
5761
import kotlinx.coroutines.flow.filter
5862
import kotlinx.coroutines.flow.first
5963
import kotlinx.coroutines.withContext
64+
import kotlinx.coroutines.yield
6065
import okhttp3.mockwebserver.MockResponse
6166
import org.junit.Assert.assertEquals
6267
import org.junit.Assert.assertNull
@@ -183,9 +188,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
183188
historyRecorderRule = mapboxHistoryTestRule,
184189
) { navigation ->
185190
val rerouteStates = mutableListOf<RerouteState>()
191+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
186192
navigation.getRerouteController()!!.registerRerouteStateObserver {
187193
rerouteStates.add(it)
188194
}
195+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
196+
rerouteStatesV2.add(it)
197+
}
189198

190199
val (options, directionOptions) =
191200
setupAlternativeRoutesFromMapMatchingAndDirectionsAPI()
@@ -213,6 +222,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
213222
regularOnlineRerouteFlow,
214223
rerouteStates,
215224
)
225+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
216226
}
217227
}
218228

@@ -222,9 +232,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
222232
historyRecorderRule = mapboxHistoryTestRule,
223233
) { navigation ->
224234
val rerouteStates = mutableListOf<RerouteState>()
235+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
225236
navigation.getRerouteController()!!.registerRerouteStateObserver {
226237
rerouteStates.add(it)
227238
}
239+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
240+
rerouteStatesV2.add(it)
241+
}
228242

229243
val (primaryMapMatched, _, mapMatchedAlternativeOptions) =
230244
setupAlternativeRoutesFromMapMatchingAndDirectionsAPI()
@@ -253,6 +267,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
253267
regularOnlineRerouteFlow,
254268
rerouteStates,
255269
)
270+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
256271
}
257272
}
258273

@@ -303,9 +318,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
303318
historyRecorderRule = mapboxHistoryTestRule,
304319
) { navigation ->
305320
val rerouteStates = mutableListOf<RerouteState>()
321+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
306322
navigation.getRerouteController()!!.registerRerouteStateObserver {
307323
rerouteStates.add(it)
308324
}
325+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
326+
rerouteStatesV2.add(it)
327+
}
309328
val options = setupTestMapMatchingRoute()
310329
val result = navigation.requestMapMatching(options).getSuccessfulOrThrowException()
311330
navigation.setNavigationRoutes(result.navigationRoutes)
@@ -324,10 +343,21 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
324343
navigation.getRerouteController()?.rerouteStates()?.first {
325344
it !is RerouteState.Idle
326345
}
346+
navigation.getRerouteController()?.rerouteStatesV2()?.first {
347+
it !is RerouteStateV2.Idle
348+
}
327349
navigation.getRerouteController()?.rerouteStates()?.first {
328350
it is RerouteState.Idle
329351
}
352+
navigation.getRerouteController()?.rerouteStatesV2()?.first {
353+
it is RerouteStateV2.Idle
354+
}
355+
356+
// let the rerouteStatesV2Observer be notified
357+
yield()
358+
330359
assertRerouteFailedTransition(rerouteStates)
360+
assertRerouteFailedTransitionV2(rerouteStatesV2)
331361
}
332362
}
333363
}
@@ -338,9 +368,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
338368
historyRecorderRule = mapboxHistoryTestRule,
339369
) { navigation ->
340370
val rerouteStates = mutableListOf<RerouteState>()
371+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
341372
navigation.getRerouteController()!!.registerRerouteStateObserver {
342373
rerouteStates.add(it)
343374
}
375+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
376+
rerouteStatesV2.add(it)
377+
}
344378
val options = setupTestMapMatchingRoute()
345379
val result = navigation.requestMapMatching(options).getSuccessfulOrThrowException()
346380

@@ -373,6 +407,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
373407
.drop(3)
374408
.first()
375409
assertRerouteFailedTransition(rerouteStates)
410+
assertRerouteFailedTransitionV2(rerouteStatesV2)
376411
}
377412
}
378413
}
@@ -386,9 +421,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
386421
val geometryToDeviate = setupMockRouteAfterDeviation()
387422

388423
val rerouteStates = mutableListOf<RerouteState>()
424+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
389425
navigation.getRerouteController()!!.registerRerouteStateObserver {
390426
rerouteStates.add(it)
391427
}
428+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
429+
rerouteStatesV2.add(it)
430+
}
392431

393432
val options = setupAlternativeRoutesFromMapMatchingAndDirectionsAPI()
394433
.primaryMapMatchedRouteOptions
@@ -427,6 +466,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
427466
)
428467

429468
assertEquals(regularOnlineRerouteFlow, rerouteStates)
469+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
430470
}
431471
}
432472

@@ -439,9 +479,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
439479
val geometryToDeviate = setupMockRouteAfterDeviation()
440480

441481
val rerouteStates = mutableListOf<RerouteState>()
482+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
442483
navigation.getRerouteController()!!.registerRerouteStateObserver {
443484
rerouteStates.add(it)
444485
}
486+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
487+
rerouteStatesV2.add(it)
488+
}
445489

446490
val options = setupTwoLegsMapMatchingRoute()
447491
val mapMatchingResult =
@@ -491,6 +535,7 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
491535
)
492536

493537
assertEquals(regularOnlineRerouteFlow, rerouteStates)
538+
assertSuccessfulRouteAppliedRerouteStateTransition(rerouteStatesV2)
494539
}
495540
}
496541

@@ -501,9 +546,13 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
501546
rerouteStrategyForMapMatchedRoutes = RerouteDisabled,
502547
) { navigation ->
503548
val rerouteStates = mutableListOf<RerouteState>()
549+
val rerouteStatesV2 = mutableListOf<RerouteStateV2>()
504550
navigation.getRerouteController()!!.registerRerouteStateObserver {
505551
rerouteStates.add(it)
506552
}
553+
navigation.getRerouteController()!!.registerRerouteStateV2Observer {
554+
rerouteStatesV2.add(it)
555+
}
507556

508557
val waitForReroute = CompletableDeferred<Unit>()
509558
navigation.registerOffRouteObserver { offRoute ->
@@ -536,6 +585,8 @@ class CoreMapMatchingTests : BaseCoreNoCleanUpTest() {
536585
)
537586

538587
assertEquals(expectedStates, rerouteStates)
588+
assertRerouteFailedTransitionV2(rerouteStatesV2)
589+
assertEquals(message, (rerouteStatesV2[2] as RerouteStateV2.Failed).message)
539590
}
540591
}
541592

0 commit comments

Comments
 (0)