@@ -10,7 +10,6 @@ import com.mapbox.navigation.base.ExperimentalMapboxNavigationAPI
1010import com.mapbox.navigation.base.internal.factory.RoadFactory
1111import com.mapbox.navigation.base.internal.factory.TripNotificationStateFactory.buildTripNotificationState
1212import com.mapbox.navigation.base.internal.route.refreshNativePeer
13- import com.mapbox.navigation.base.internal.utils.internalWaypoints
1413import com.mapbox.navigation.base.route.NavigationRoute
1514import com.mapbox.navigation.base.trip.model.RouteLegProgress
1615import com.mapbox.navigation.base.trip.model.RouteProgress
@@ -31,7 +30,7 @@ import com.mapbox.navigation.core.trip.session.eh.EHorizonObserver
3130import com.mapbox.navigation.core.trip.session.eh.EHorizonSubscriptionManager
3231import com.mapbox.navigation.navigator.internal.MapboxNativeNavigator
3332import com.mapbox.navigation.navigator.internal.MapboxNativeNavigatorImpl
34- import com.mapbox.navigation.navigator.internal.TripStatus
33+ import com.mapbox.navigation.navigator.internal.utils.calculateRemainingWaypoints
3534import com.mapbox.navigation.utils.internal.JobControl
3635import com.mapbox.navigation.utils.internal.ThreadController
3736import com.mapbox.navigation.utils.internal.ifNonNull
@@ -48,7 +47,6 @@ import kotlinx.coroutines.Job
4847import kotlinx.coroutines.cancelChildren
4948import kotlinx.coroutines.launch
5049import java.util.concurrent.CopyOnWriteArraySet
51- import kotlin.math.max
5250
5351/* *
5452 * Default implementation of [TripSession]
@@ -75,7 +73,6 @@ internal class MapboxTripSession(
7573
7674 private companion object {
7775 private const val LOG_CATEGORY = " MapboxTripSession"
78- private const val INDEX_OF_INITIAL_LEG_TARGET = 1
7976 }
8077
8178 override suspend fun setRoutes (
@@ -356,7 +353,7 @@ internal class MapboxTripSession(
356353 nativeBannerInstruction?.index
357354 )
358355 }
359- val remainingWaypoints = calculateRemainingWaypoints(tripStatus )
356+ val remainingWaypoints = tripStatus. calculateRemainingWaypoints()
360357 val routeProgress = getRouteProgressFrom(
361358 tripStatus.route,
362359 tripStatus.navigationStatus,
@@ -378,33 +375,6 @@ internal class MapboxTripSession(
378375 triggerVoiceInstructionEvent(routeProgress, status)
379376 isOffRoute = tripStatus.navigationStatus.routeState == RouteState .OFF_ROUTE
380377 }
381-
382- private fun calculateRemainingWaypoints (tripStatus : TripStatus ): Int {
383- val routeCoordinates = tripStatus.route?.internalWaypoints()
384- return if (routeCoordinates != null ) {
385- val waypointsCount = routeCoordinates.size
386- val nextWaypointIndex = normalizeNextWaypointIndex(
387- tripStatus.navigationStatus.nextWaypointIndex
388- )
389- return waypointsCount - nextWaypointIndex
390- } else {
391- 0
392- }
393- }
394-
395- /* *
396- * On the Android side, we always start navigation from the current position.
397- * So we expect that the next waypoint index will not be less than 1.
398- * But the native part considers the origin as a usual waypoint.
399- * It can return the next waypoint index 0. Be careful, this case isn't easy to reproduce.
400- *
401- * For example, nextWaypointIndex=0 leads to an incorrect rerouting.
402- * We don't want to get to an initial position even it hasn't been reached yet.
403- */
404- private fun normalizeNextWaypointIndex (nextWaypointIndex : Int ) = max(
405- INDEX_OF_INITIAL_LEG_TARGET ,
406- nextWaypointIndex
407- )
408378 }
409379
410380 /* *
0 commit comments