Skip to content

Commit a43c3a4

Browse files
committed
make reroute controller in MapboxNavigation#setRerouteController nullable
1 parent 817b4fe commit a43c3a4

File tree

5 files changed

+79
-16
lines changed

5 files changed

+79
-16
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Mapbox welcomes participation and contributions from everyone.
66
#### Features
77

88
#### Bug fixes and improvements
9+
- Made `rerouteController` argument in `MapboxNavigation#setRerouteController` nullable. Null can be passed to disable automatic rerouting. [#5977](https://github.com/mapbox/mapbox-navigation-android/pull/5977)
910

1011
## Mapbox Navigation SDK 2.7.0-alpha.2 - July 1, 2022
1112
### Changelog

libnavigation-core/api/current.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ package com.mapbox.navigation.core {
5353
method public void setArrivalController();
5454
method public void setNavigationRoutes(java.util.List<com.mapbox.navigation.base.route.NavigationRoute> routes, int initialLegIndex = 0);
5555
method public void setNavigationRoutes(java.util.List<com.mapbox.navigation.base.route.NavigationRoute> routes);
56-
method public void setRerouteController(com.mapbox.navigation.core.reroute.RerouteController rerouteController);
56+
method public void setRerouteController(com.mapbox.navigation.core.reroute.RerouteController? rerouteController);
5757
method public void setRerouteController(com.mapbox.navigation.core.reroute.NavigationRerouteController? rerouteController = com.mapbox.navigation.core.MapboxNavigation.defaultRerouteController);
5858
method public void setRerouteController();
5959
method public void setRerouteOptionsAdapter(com.mapbox.navigation.core.reroute.RerouteOptionsAdapter? rerouteOptionsAdapter);

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,11 +1114,13 @@ class MapboxNavigation @VisibleForTesting internal constructor(
11141114
/**
11151115
* Set [RerouteController] that's automatically invoked when user is off-route.
11161116
*
1117-
* By default uses [MapboxRerouteController].
1117+
* By default [MapboxRerouteController] is used.
1118+
* Pass `null` to disable automatic reroute.
1119+
* A user will stay in `OFF_ROUTE` state until a new route is set or the user gets back to the route.
11181120
*/
1119-
fun setRerouteController(rerouteController: RerouteController) {
1121+
fun setRerouteController(rerouteController: RerouteController?) {
11201122
setRerouteController(
1121-
LegacyRerouteControllerAdapter(rerouteController) as NavigationRerouteController?
1123+
rerouteController?.let { LegacyRerouteControllerAdapter(it) }
11221124
)
11231125
}
11241126

libnavigation-core/src/test/java/com/mapbox/navigation/core/MapboxNavigationRerouteInterruptionTest.kt

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ internal class MapboxNavigationRerouteInterruptionTest(
5555
}
5656
} else null
5757
val newController = mockk<RerouteController>(relaxed = true)
58-
5958
oldController?.let { mapboxNavigation.setRerouteController(it) }
59+
6060
mapboxNavigation.setRerouteController(newController)
6161

6262
if (oldController != null) {
@@ -65,6 +65,23 @@ internal class MapboxNavigationRerouteInterruptionTest(
6565
verify(exactly = expectedNumberOfInterruptions) { newController.reroute(any()) }
6666
}
6767

68+
@Test
69+
fun setNullRerouteController() {
70+
val oldController = if (previousState != null) {
71+
mockk<RerouteController>(relaxed = true) {
72+
every { state } returns previousState
73+
}
74+
} else null
75+
val newController: RerouteController? = null
76+
oldController?.let { mapboxNavigation.setRerouteController(it) }
77+
78+
mapboxNavigation.setRerouteController(newController)
79+
80+
if (oldController != null) {
81+
verify(exactly = expectedNumberOfInterruptions) { oldController.interrupt() }
82+
}
83+
}
84+
6885
@Test
6986
fun setNavigationRerouteController() {
7087
val oldController = if (previousState != null) {
@@ -73,11 +90,11 @@ internal class MapboxNavigationRerouteInterruptionTest(
7390
}
7491
} else null
7592
val newController = mockk<NavigationRerouteController>(relaxed = true)
76-
7793
oldController?.let {
78-
mapboxNavigation.setRerouteController(it as NavigationRerouteController?)
94+
mapboxNavigation.setRerouteController(it)
7995
}
80-
mapboxNavigation.setRerouteController(newController as NavigationRerouteController?)
96+
97+
mapboxNavigation.setRerouteController(newController)
8198

8299
if (oldController != null) {
83100
verify(exactly = expectedNumberOfInterruptions) { oldController.interrupt() }
@@ -86,4 +103,23 @@ internal class MapboxNavigationRerouteInterruptionTest(
86103
newController.reroute(any<NavigationRerouteController.RoutesCallback>())
87104
}
88105
}
106+
107+
@Test
108+
fun setNullNavigationRerouteController() {
109+
val oldController = if (previousState != null) {
110+
mockk<NavigationRerouteController>(relaxed = true) {
111+
every { state } returns previousState
112+
}
113+
} else null
114+
val newController: NavigationRerouteController? = null
115+
oldController?.let {
116+
mapboxNavigation.setRerouteController(it)
117+
}
118+
119+
mapboxNavigation.setRerouteController(newController)
120+
121+
if (oldController != null) {
122+
verify(exactly = expectedNumberOfInterruptions) { oldController.interrupt() }
123+
}
124+
}
89125
}

libnavigation-core/src/test/java/com/mapbox/navigation/core/MapboxNavigationTest.kt

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,6 +1198,38 @@ internal class MapboxNavigationTest : MapboxNavigationBaseTest() {
11981198
assertFalse(mapboxNavigation.getRerouteController() === oldRerouteController)
11991199
}
12001200

1201+
@Test
1202+
fun `set null reroute controller`() = coroutineRule.runBlockingTest {
1203+
val oldController: RerouteController = mockk(relaxed = true)
1204+
val newController: RerouteController? = null
1205+
createMapboxNavigation()
1206+
mapboxNavigation.setRerouteController(oldController)
1207+
1208+
mapboxNavigation.setRerouteController(newController)
1209+
1210+
assertNull(mapboxNavigation.getRerouteController())
1211+
}
1212+
1213+
@Test
1214+
fun `set navigation reroute controller`() = coroutineRule.runBlockingTest {
1215+
val navigationRerouteController: NavigationRerouteController = mockk(relaxed = true)
1216+
createMapboxNavigation()
1217+
mapboxNavigation.setRerouteController(navigationRerouteController)
1218+
assertEquals(navigationRerouteController, mapboxNavigation.getRerouteController())
1219+
}
1220+
1221+
@Test
1222+
fun `set null navigation reroute controller`() = coroutineRule.runBlockingTest {
1223+
val oldController: NavigationRerouteController = mockk(relaxed = true)
1224+
val newController: NavigationRerouteController? = null
1225+
createMapboxNavigation()
1226+
mapboxNavigation.setRerouteController(oldController)
1227+
1228+
mapboxNavigation.setRerouteController(newController)
1229+
1230+
assertNull(mapboxNavigation.getRerouteController())
1231+
}
1232+
12011233
@Test
12021234
fun `when telemetry is enabled custom event is posted`() = coroutineRule.runBlockingTest {
12031235
createMapboxNavigation()
@@ -1231,12 +1263,4 @@ internal class MapboxNavigationTest : MapboxNavigationBaseTest() {
12311263

12321264
unmockkStatic(TelemetryEnabler::class)
12331265
}
1234-
1235-
@Test
1236-
fun `set navigation reroute controller`() = coroutineRule.runBlockingTest {
1237-
val navigationRerouteController: NavigationRerouteController? = mockk(relaxed = true)
1238-
createMapboxNavigation()
1239-
mapboxNavigation.setRerouteController(navigationRerouteController)
1240-
assertEquals(navigationRerouteController, mapboxNavigation.getRerouteController())
1241-
}
12421266
}

0 commit comments

Comments
 (0)