@@ -2,12 +2,14 @@ package com.mapbox.navigation.ui.app.internal
22
33import com.mapbox.geojson.Point
44import com.mapbox.navigation.base.route.NavigationRoute
5+ import com.mapbox.navigation.core.MapboxNavigation
56import com.mapbox.navigation.ui.app.internal.destination.Destination
67import com.mapbox.navigation.ui.app.internal.destination.DestinationAction
78import com.mapbox.navigation.ui.app.internal.extension.ThunkAction
89import com.mapbox.navigation.ui.app.internal.extension.dispatch
910import com.mapbox.navigation.ui.app.internal.navigation.NavigationState
1011import com.mapbox.navigation.ui.app.internal.navigation.NavigationStateAction
12+ import com.mapbox.navigation.ui.app.internal.routefetch.RouteOptionsProvider
1113import com.mapbox.navigation.ui.app.internal.routefetch.RoutePreviewAction
1214import com.mapbox.navigation.ui.app.internal.routefetch.RoutePreviewState
1315import com.mapbox.navigation.ui.app.internal.routefetch.RoutesAction
@@ -76,28 +78,38 @@ fun startArrival(point: Point, routes: List<NavigationRoute>) = ThunkAction { st
7678/* *
7779 * Fetch Route and Show Route Preview ThunkAction creator.
7880 */
79- fun CoroutineScope.fetchRouteAndShowRoutePreview () = fetchRouteAndContinue { store ->
81+ fun CoroutineScope.fetchRouteAndShowRoutePreview (
82+ routeOptionsProvider : RouteOptionsProvider ,
83+ mapboxNavigation : MapboxNavigation ,
84+ ) = fetchRouteAndContinue(routeOptionsProvider, mapboxNavigation) { store ->
8085 store.dispatch(NavigationStateAction .Update (NavigationState .RoutePreview ))
8186}
8287
8388/* *
8489 * Fetch Route and Start Active Navigation ThunkAction creator.
8590 */
86- fun CoroutineScope.fetchRouteAndStartActiveNavigation () = fetchRouteAndContinue { store ->
91+ fun CoroutineScope.fetchRouteAndStartActiveNavigation (
92+ routeOptionsProvider : RouteOptionsProvider ,
93+ mapboxNavigation : MapboxNavigation ,
94+ ) = fetchRouteAndContinue(routeOptionsProvider, mapboxNavigation) { store ->
8795 val previewRoutes = store.state.value.previewRoutes
8896 if (previewRoutes is RoutePreviewState .Ready ) {
8997 store.dispatch(startActiveNavigation(previewRoutes.routes))
9098 }
9199}
92100
93- private fun CoroutineScope.fetchRouteAndContinue (continuation : (Store ) -> Unit ) =
94- ThunkAction { store ->
95- launch {
96- if (fetchRouteIfNeeded(store)) {
97- continuation(store)
98- }
101+ // TODO: simplify after :libnavui-app module is merged with :libnavui-dropin
102+ private fun CoroutineScope.fetchRouteAndContinue (
103+ routeOptionsProvider : RouteOptionsProvider ,
104+ mapboxNavigation : MapboxNavigation ,
105+ continuation : (Store ) -> Unit ,
106+ ) = ThunkAction { store ->
107+ launch {
108+ if (fetchRouteIfNeeded(store, routeOptionsProvider, mapboxNavigation)) {
109+ continuation(store)
99110 }
100111 }
112+ }
101113
102114/* *
103115 * Dispatch FetchPoints action and wait for RoutePreviewState.Ready.
@@ -106,16 +118,21 @@ private fun CoroutineScope.fetchRouteAndContinue(continuation: (Store) -> Unit)
106118 *
107119 * @return `true` once in RoutePreviewState.Ready state, otherwise `false`
108120 */
109- private suspend fun fetchRouteIfNeeded (store : Store ): Boolean {
121+ private suspend fun fetchRouteIfNeeded (
122+ store : Store ,
123+ routeOptionsProvider : RouteOptionsProvider ,
124+ mapboxNavigation : MapboxNavigation ,
125+ ): Boolean {
110126 val storeState = store.state.value
111127 if (storeState.previewRoutes is RoutePreviewState .Ready ) return true
112128 if (storeState.previewRoutes is RoutePreviewState .Fetching ) return false
113129
114130 return ifNonNull(
115131 storeState.location?.enhancedLocation?.toPoint(),
116- storeState.destination
132+ storeState.destination?.point
117133 ) { lastPoint, destination ->
118- store.dispatch(RoutePreviewAction .FetchPoints (listOf (lastPoint, destination.point)))
134+ val options = routeOptionsProvider.getOptions(mapboxNavigation, lastPoint, destination)
135+ store.dispatch(RoutePreviewAction .FetchOptions (options))
119136 store.waitWhileFetching()
120137 store.state.value.previewRoutes is RoutePreviewState .Ready
121138 } ? : false
0 commit comments