@@ -17,8 +17,11 @@ import com.mapbox.navigation.base.internal.NativeRouteParserWrapper
17
17
import com.mapbox.navigation.base.internal.SDKRouteParser
18
18
import com.mapbox.navigation.base.internal.factory.RoadObjectFactory.toUpcomingRoadObjects
19
19
import com.mapbox.navigation.base.internal.route.RouteCompatibilityCache
20
+ import com.mapbox.navigation.base.internal.route.Waypoint
21
+ import com.mapbox.navigation.base.internal.route.toNavigationRoute
20
22
import com.mapbox.navigation.base.internal.utils.DirectionsRouteMissingConditionsCheck
21
23
import com.mapbox.navigation.base.internal.utils.mapToSdkRouteOrigin
24
+ import com.mapbox.navigation.base.internal.utils.mapToSkd
22
25
import com.mapbox.navigation.base.trip.model.roadobject.UpcomingRoadObject
23
26
import com.mapbox.navigation.utils.internal.ThreadController
24
27
import com.mapbox.navigation.utils.internal.logD
@@ -27,6 +30,7 @@ import com.mapbox.navigation.utils.internal.logI
27
30
import com.mapbox.navigator.RouteInterface
28
31
import kotlinx.coroutines.async
29
32
import kotlinx.coroutines.coroutineScope
33
+ import org.json.JSONArray
30
34
import java.net.URL
31
35
32
36
/* *
@@ -203,6 +207,36 @@ class NavigationRoute internal constructor(
203
207
}
204
208
}
205
209
210
+ internal fun create (
211
+ directionsRoutes : List <DirectionsRoute >,
212
+ routeOptions : RouteOptions ,
213
+ routerOrigin : RouterOrigin ,
214
+ routeParser : SDKRouteParser = NativeRouteParserWrapper
215
+ ): List <NavigationRoute > {
216
+ val directionsRoutesJson = JSONArray (directionsRoutes.map { it.toJson() }).toString()
217
+ return create(
218
+ directionsRoutesJson,
219
+ routeOptions.toUrl(" " ).toString(),
220
+ routerOrigin,
221
+ routeParser
222
+ )
223
+ }
224
+
225
+ private fun create (
226
+ directionsRoutesJson : String ,
227
+ routeOptionsUrlString : String ,
228
+ routerOrigin : RouterOrigin ,
229
+ routeParser : SDKRouteParser = NativeRouteParserWrapper
230
+ ): List <NavigationRoute > {
231
+ return routeParser.parseDirectionsRoutes(
232
+ directionsRoutesJson,
233
+ routeOptionsUrlString,
234
+ routerOrigin
235
+ ).run {
236
+ create(this )
237
+ }
238
+ }
239
+
206
240
internal fun create (
207
241
directionsResponse : DirectionsResponse ,
208
242
routeOptions : RouteOptions ,
@@ -255,6 +289,19 @@ class NavigationRoute internal constructor(
255
289
)
256
290
}.cache()
257
291
}
292
+
293
+ private fun create (
294
+ expected : Expected <String , List <RouteInterface >>
295
+ ): List <NavigationRoute > {
296
+ return expected.fold({ error ->
297
+ logE(" NavigationRoute" , " Failed to parse a route. Reason: $error " )
298
+ listOf ()
299
+ }, { value ->
300
+ value
301
+ }).map { routeInterface ->
302
+ routeInterface.toNavigationRoute()
303
+ }.cache()
304
+ }
258
305
}
259
306
260
307
/* *
@@ -293,6 +340,8 @@ class NavigationRoute internal constructor(
293
340
*/
294
341
val upcomingRoadObjects = nativeRoute.routeInfo.alerts.toUpcomingRoadObjects()
295
342
343
+ internal val waypoints: List <Waypoint > by lazy { nativeRoute.waypoints.mapToSkd() }
344
+
296
345
/* *
297
346
* Indicates whether some other object is "equal to" this one.
298
347
*
0 commit comments