@@ -3,6 +3,7 @@ package com.mapbox.androidauto.car.preview
33import com.mapbox.androidauto.car.search.PlaceRecord
44import com.mapbox.androidauto.internal.logAndroidAuto
55import com.mapbox.androidauto.internal.logAndroidAutoFailure
6+ import com.mapbox.androidauto.navigation.location.CarAppLocation
67import com.mapbox.api.directions.v5.DirectionsCriteria
78import com.mapbox.api.directions.v5.models.RouteOptions
89import com.mapbox.geojson.Point
@@ -14,6 +15,8 @@ import com.mapbox.navigation.base.route.RouterCallback
1415import com.mapbox.navigation.base.route.RouterFailure
1516import com.mapbox.navigation.base.route.RouterOrigin
1617import com.mapbox.navigation.core.MapboxNavigation
18+ import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
19+ import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
1720import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider
1821import kotlinx.coroutines.suspendCancellableCoroutine
1922import kotlin.coroutines.resume
@@ -33,51 +36,29 @@ interface CarRouteRequestCallback {
3336 * Service class that requests routes for the preview screen.
3437 */
3538class CarRouteRequest (
36- val mapboxNavigation : MapboxNavigation ,
3739 private val routeOptionsInterceptor : CarRouteOptionsInterceptor ,
38- private val navigationLocationProvider : NavigationLocationProvider ,
39- ) {
40- internal var currentRequestId: Long? = null
41-
42- suspend fun requestSync (placeRecord : PlaceRecord ): List <NavigationRoute >? {
43- return suspendCancellableCoroutine { continuation ->
44- continuation.invokeOnCancellation { cancelRequest() }
45- request(
46- placeRecord,
47- object : CarRouteRequestCallback {
48-
49- override fun onRoutesReady (
50- placeRecord : PlaceRecord ,
51- routes : List <NavigationRoute >
52- ) {
53- continuation.resume(routes)
54- }
55-
56- override fun onUnknownCurrentLocation () {
57- continuation.resume(value = null )
58- }
59-
60- override fun onDestinationLocationUnknown () {
61- continuation.resume(value = null )
62- }
63-
64- override fun onNoRoutesFound () {
65- continuation.resume(value = null )
66- }
67- }
68- )
69- }
40+ ) : MapboxNavigationObserver {
41+ private var currentRequestId: Long? = null
42+ private var mapboxNavigation: MapboxNavigation ? = null
43+
44+ override fun onAttached (mapboxNavigation : MapboxNavigation ) {
45+ this .mapboxNavigation = mapboxNavigation
46+ }
47+
48+ override fun onDetached (mapboxNavigation : MapboxNavigation ) {
49+ cancelRequest()
50+ this .mapboxNavigation = null
7051 }
7152
7253 /* *
7354 * When a search result was selected, request a route.
74- *
75- * @param searchResults potential destinations for directions
7655 */
7756 fun request (placeRecord : PlaceRecord , callback : CarRouteRequestCallback ) {
78- currentRequestId?.let { mapboxNavigation.cancelRouteRequest(it) }
57+ val mapboxNavigation = this .mapboxNavigation ? : return
58+ cancelRequest()
7959
80- val location = navigationLocationProvider.lastLocation
60+ val carAppLocation = MapboxNavigationApp .getObserver(CarAppLocation ::class )
61+ val location = carAppLocation.navigationLocationProvider.lastLocation
8162 if (location == null ) {
8263 logAndroidAutoFailure(" CarRouteRequest.onUnknownCurrentLocation" )
8364 callback.onUnknownCurrentLocation()
@@ -92,33 +73,33 @@ class CarRouteRequest(
9273 }
9374 else -> {
9475 currentRequestId = mapboxNavigation.requestRoutes(
95- carRouteOptions(origin, placeRecord.coordinate),
76+ mapboxNavigation. carRouteOptions(origin, placeRecord.coordinate),
9677 carCallbackTransformer(placeRecord, callback)
9778 )
9879 }
9980 }
10081 }
10182
10283 fun cancelRequest () {
103- currentRequestId?.let { mapboxNavigation.cancelRouteRequest(it) }
84+ currentRequestId?.let { mapboxNavigation? .cancelRouteRequest(it) }
10485 }
10586
10687 /* *
10788 * Default [RouteOptions] for the car.
10889 */
109- private fun carRouteOptions (origin : Point , destination : Point ) = RouteOptions .builder()
90+ private fun MapboxNavigation. carRouteOptions (origin : Point , destination : Point ) = RouteOptions .builder()
11091 .applyDefaultNavigationOptions()
111- .language(mapboxNavigation. navigationOptions.distanceFormatterOptions.locale.language)
92+ .language(navigationOptions.distanceFormatterOptions.locale.language)
11293 .voiceUnits(
113- when (mapboxNavigation. navigationOptions.distanceFormatterOptions.unitType) {
94+ when (navigationOptions.distanceFormatterOptions.unitType) {
11495 UnitType .IMPERIAL -> DirectionsCriteria .IMPERIAL
11596 UnitType .METRIC -> DirectionsCriteria .METRIC
11697 },
11798 )
11899 .alternatives(true )
119100 .profile(DirectionsCriteria .PROFILE_DRIVING_TRAFFIC )
120101 .coordinatesList(listOf (origin, destination))
121- .layersList(listOf (mapboxNavigation. getZLevel(), null ))
102+ .layersList(listOf (getZLevel(), null ))
122103 .metadata(true )
123104 .let { routeOptionsInterceptor.intercept(it) }
124105 .build()
0 commit comments