Skip to content

Commit 496ca3e

Browse files
AhmedVargosgithub-actions[bot]
authored andcommitted
NAVAND-6461 Fixing the issue causing using incorrect vanishing offset for new routes (#11471)
* NAVAND-6461 Fixing the issue causing using incorrect vanishing offset for new routes: - That is accomplished by insuring that `MapboxRouteLineApi.getVanishPointOffset()` returns `0.0` in case if the point was in the `VanishingPointState.DISABLED` state - Update our unit tests to validate for that scenario * Rename changelog files GitOrigin-RevId: d9f95f1cc7cba595226fc1101d7b42a1a0a1071e
1 parent 009ccdf commit 496ca3e

File tree

3 files changed

+79
-5
lines changed

3 files changed

+79
-5
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Fixed an issue when adding a stop point on top of an already traversed route, which could show a carried-over vanishing portion from the previous route. That is accomplished by ensuring that `MapboxRouteLineApi.getVanishPointOffset()` returns `0.0` in case the point was in the `VanishingPointState.DISABLED` state.

ui-maps/src/main/java/com/mapbox/navigation/ui/maps/route/line/api/MapboxRouteLineApi.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ class MapboxRouteLineApi @VisibleForTesting internal constructor(
263263
Int, List<RouteLineExpressionData>, InactiveRouteColors,
264264
List<RouteLineExpressionData>,
265265
>,
266-
List<RouteLineExpressionData>,> by lazy { LruCache(4) }
266+
List<RouteLineExpressionData>,
267+
> by lazy { LruCache(4) }
267268

268269
private var lastLocationPoint: Point? = null
269270

@@ -354,7 +355,7 @@ class MapboxRouteLineApi @VisibleForTesting internal constructor(
354355
* in the [MapboxRouteLineApiOptions]. If not 0.0 is returned.
355356
*/
356357
fun getVanishPointOffset(): Double {
357-
return vanishingRouteLine?.vanishPointOffset ?: 0.0
358+
return getSafeVanishPointOffset()
358359
}
359360

360361
/**
@@ -791,7 +792,7 @@ class MapboxRouteLineApi @VisibleForTesting internal constructor(
791792
activeLegIndex = currentLegIndex
792793

793794
val (maskingLayerData, routeLineData) = if (legChange) {
794-
val vanishingOffset = vanishingRouteLine?.vanishPointOffset ?: 0.0
795+
val vanishingOffset = getSafeVanishPointOffset()
795796
val maskingLayerData = getRouteLineDynamicDataForMaskingLayers(
796797
currentPrimaryRoute,
797798
vanishingOffset,
@@ -1230,7 +1231,7 @@ class MapboxRouteLineApi @VisibleForTesting internal constructor(
12301231
val alternativeRoute1 = partitionedRoutes.second.firstOrNull()
12311232
val alternativeRoute2 = partitionedRoutes.second.getOrNull(1)
12321233

1233-
val vanishingPointOffset = vanishingRouteLine?.vanishPointOffset ?: 0.0
1234+
val vanishingPointOffset = getSafeVanishPointOffset()
12341235

12351236
val routeLineExpressionDataDef = calculationsScope.async {
12361237
primaryRoute.route.run {
@@ -1513,7 +1514,8 @@ class MapboxRouteLineApi @VisibleForTesting internal constructor(
15131514
) -> List<RouteLineExpressionData> = {
15141515
activeLegIndex: Int,
15151516
segments: List<RouteLineExpressionData>,
1516-
colors: InactiveRouteColors, ->
1517+
colors: InactiveRouteColors,
1518+
->
15171519
segments.parallelMap(
15181520
{
15191521
if (it.legIndex != activeLegIndex) {
@@ -1604,4 +1606,22 @@ class MapboxRouteLineApi @VisibleForTesting internal constructor(
16041606
private fun NavigationRoute?.isMultiLeg(): Boolean {
16051607
return (this?.directionsRoute?.legs()?.size ?: 0) >= 2
16061608
}
1609+
1610+
/**
1611+
* Helper method to get vanishing point offset that respects the vanishing point state.
1612+
* Returns 0.0 if vanishing is disabled (e.g., during INITIALIZED state) to prevent rendering
1613+
* stale offset values.
1614+
*
1615+
* @return the vanishing point offset if enabled, otherwise 0.0
1616+
*/
1617+
private fun getSafeVanishPointOffset(): Double {
1618+
val vanishing = vanishingRouteLine
1619+
return if (vanishing == null ||
1620+
vanishing.vanishingPointState == VanishingPointState.DISABLED
1621+
) {
1622+
0.0
1623+
} else {
1624+
vanishing.vanishPointOffset
1625+
}
1626+
}
16071627
}

ui-maps/src/test/java/com/mapbox/navigation/ui/maps/route/line/api/MapboxRouteLineApiTest.kt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import com.mapbox.navigation.ui.maps.route.line.model.RouteLineColorResources
5151
import com.mapbox.navigation.ui.maps.route.line.model.RouteLineError
5252
import com.mapbox.navigation.ui.maps.route.line.model.RouteLineUpdateValue
5353
import com.mapbox.navigation.ui.maps.route.line.model.RouteNotFound
54+
import com.mapbox.navigation.ui.maps.route.line.model.VanishingPointState
5455
import com.mapbox.navigation.ui.maps.testing.TestRoute
5556
import com.mapbox.navigation.ui.maps.testing.TestingUtil.loadNavigationRoute
5657
import com.mapbox.navigation.utils.internal.InternalJobControlFactory
@@ -198,6 +199,58 @@ class MapboxRouteLineApiTest {
198199
)
199200
}
200201

202+
@Test
203+
fun `getVanishPointOffset returns 0 when vanishing point state is DISABLED`() {
204+
val options = MapboxRouteLineApiOptions.Builder()
205+
.vanishingRouteLineEnabled(true)
206+
.build()
207+
every { vanishingRouteLine.vanishPointOffset } returns 0.456
208+
every { vanishingRouteLine.vanishingPointState } returns VanishingPointState.DISABLED
209+
210+
val result = createRouteLineApi(options).getVanishPointOffset()
211+
212+
assertEquals(
213+
0.0,
214+
result,
215+
0.0,
216+
)
217+
}
218+
219+
@Test
220+
fun `getVanishPointOffset returns actual offset when vanishing point state is ENABLED`() {
221+
val options = MapboxRouteLineApiOptions.Builder()
222+
.vanishingRouteLineEnabled(true)
223+
.build()
224+
every { vanishingRouteLine.vanishPointOffset } returns 0.456
225+
every { vanishingRouteLine.vanishingPointState } returns VanishingPointState.ENABLED
226+
227+
val result = createRouteLineApi(options).getVanishPointOffset()
228+
229+
assertEquals(
230+
0.456,
231+
result,
232+
0.0,
233+
)
234+
}
235+
236+
@Test
237+
fun `getVanishPointOffset returns actual offset when vanishing point state is ONLY_INCREASE_PROGRESS`() {
238+
val options = MapboxRouteLineApiOptions.Builder()
239+
.vanishingRouteLineEnabled(true)
240+
.build()
241+
every { vanishingRouteLine.vanishPointOffset } returns 0.789
242+
every { vanishingRouteLine.vanishingPointState } returns
243+
VanishingPointState.ONLY_INCREASE_PROGRESS
244+
245+
val result = createRouteLineApi(options).getVanishPointOffset()
246+
247+
assertEquals(
248+
0.789,
249+
result,
250+
0.0,
251+
)
252+
}
253+
201254
@Test
202255
fun getRoutes() = coroutineRule.runBlockingTest {
203256
val options = MapboxRouteLineApiOptions.Builder().build()

0 commit comments

Comments
 (0)