@@ -11,7 +11,8 @@ import com.mapbox.navigation.base.route.NavigationRoute
1111import com.mapbox.navigation.base.route.NavigationRouterRefreshCallback
1212import com.mapbox.navigation.base.route.NavigationRouterRefreshError
1313import com.mapbox.navigation.base.route.RouteRefreshOptions
14- import com.mapbox.navigation.core.RouteRefreshRequestDataProvider
14+ import com.mapbox.navigation.core.RouteProgressData
15+ import com.mapbox.navigation.core.RouteProgressDataProvider
1516import com.mapbox.navigation.core.directions.session.RouteRefresh
1617import com.mapbox.navigation.utils.internal.logE
1718import com.mapbox.navigation.utils.internal.logI
@@ -35,7 +36,8 @@ import kotlin.coroutines.resume
3536internal class RouteRefreshController (
3637 private val routeRefreshOptions : RouteRefreshOptions ,
3738 private val routeRefresh : RouteRefresh ,
38- private val routeRefreshRequestDataProvider : RouteRefreshRequestDataProvider ,
39+ private val routeProgressDataProvider : RouteProgressDataProvider ,
40+ private val evDataHolder : EVDataHolder ,
3941 private val routeDiffProvider : DirectionsRouteDiffProvider = DirectionsRouteDiffProvider (),
4042 private val localDateProvider : () -> Date ,
4143) {
@@ -152,28 +154,28 @@ internal class RouteRefreshController(
152154 onNewState(RouteRefreshExtra .REFRESH_STATE_STARTED )
153155 }
154156 timeUntilNextAttempt = async { delay(routeRefreshOptions.intervalMillis) }
155- val routeRefreshRequestData = routeRefreshRequestDataProvider
156- .getRouteRefreshRequestDataOrWait(routes.first().routeOptions )
157- val refreshedRoutes = refreshRoutesOrNull(routes, routeRefreshRequestData )
157+ val routeProgressData = routeProgressDataProvider
158+ .getRouteRefreshRequestDataOrWait()
159+ val refreshedRoutes = refreshRoutesOrNull(routes, routeProgressData )
158160 if (refreshedRoutes.any { it != null }) {
159161 onNewState(RouteRefreshExtra .REFRESH_STATE_FINISHED_SUCCESS )
160162 return @coroutineScope RefreshedRouteInfo (
161163 refreshedRoutes.mapIndexed { index, navigationRoute ->
162164 navigationRoute ? : routes[index]
163165 },
164- routeRefreshRequestData
166+ routeProgressData
165167 )
166168 }
167169 }
168170 } finally {
169171 timeUntilNextAttempt.cancel() // otherwise current coroutine will wait for its child
170172 }
171173 onNewState(RouteRefreshExtra .REFRESH_STATE_FINISHED_FAILED )
172- val requestData = routeRefreshRequestDataProvider
173- .getRouteRefreshRequestDataOrWait(routes.first().routeOptions )
174+ val routeProgressData = routeProgressDataProvider
175+ .getRouteRefreshRequestDataOrWait()
174176 RefreshedRouteInfo (
175- routes.map { removeExpiringDataFromRoute(it, requestData .legIndex) },
176- requestData
177+ routes.map { removeExpiringDataFromRoute(it, routeProgressData .legIndex) },
178+ routeProgressData
177179 )
178180 }
179181
@@ -222,13 +224,19 @@ internal class RouteRefreshController(
222224
223225 private suspend fun refreshRouteOrNull (
224226 route : NavigationRoute ,
225- routeRefreshRequestData : RouteRefreshRequestData ,
227+ routeProgressData : RouteProgressData ,
226228 ): NavigationRoute ? {
227229 val validationResult = validateRoute(route)
228230 if (validationResult is RouteValidationResult .Invalid ) {
229231 logI(" route ${route.id} can't be refreshed because ${validationResult.reason} " )
230232 return null
231233 }
234+ val routeRefreshRequestData = RouteRefreshRequestData (
235+ routeProgressData.legIndex,
236+ routeProgressData.routeGeometryIndex,
237+ routeProgressData.legGeometryIndex,
238+ evDataHolder.currentData(route.routeOptions.unrecognizedJsonProperties)
239+ )
232240 return when (val result = requestRouteRefresh(route, routeRefreshRequestData)) {
233241 is RouteRefreshResult .Fail -> {
234242 logE(
@@ -252,13 +260,13 @@ internal class RouteRefreshController(
252260
253261 private suspend fun refreshRoutesOrNull (
254262 routes : List <NavigationRoute >,
255- routeRefreshRequestData : RouteRefreshRequestData ,
263+ routeProgressData : RouteProgressData ,
256264 ): List <NavigationRoute ?> {
257265 return coroutineScope {
258266 routes.map { route ->
259267 async {
260268 withTimeoutOrNull(routeRefreshOptions.intervalMillis) {
261- refreshRouteOrNull(route, routeRefreshRequestData )
269+ refreshRouteOrNull(route, routeProgressData )
262270 }
263271 }
264272 }.awaitAll()
0 commit comments