From 4e30f50476dcc2ad50d48fa74d0083e561bda46b Mon Sep 17 00:00:00 2001 From: Kyle Madsen Date: Wed, 24 Aug 2022 15:37:47 -0700 Subject: [PATCH 1/3] Remove mapbox navigation from route preview --- .../car/preview/CarRoutePreviewScreen.kt | 13 ++++++++----- .../car/preview/RoutePreviewCarContext.kt | 1 - 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt index 5c3bc120ace..a5bb35d2472 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt @@ -34,6 +34,7 @@ import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.maps.plugin.delegates.listeners.OnStyleLoadedListener import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp /** * After a destination has been selected. This view previews the route and lets @@ -62,7 +63,7 @@ class CarRoutePreviewScreen( override fun handleOnBackPressed() { logAndroidAuto("CarRoutePreviewScreen OnBackPressedCallback") - routePreviewCarContext.mapboxNavigation.setNavigationRoutes(emptyList()) + MapboxNavigationApp.current()?.setNavigationRoutes(emptyList()) screenManager.pop() } } @@ -181,10 +182,12 @@ class CarRoutePreviewScreen( Action.Builder() .setTitle(carContext.getString(R.string.car_action_preview_navigate_button)) .setOnClickListener { - routePreviewCarContext.mapboxNavigation.setNavigationRoutes( - carRoutesProvider.navigationRoutes.value - ) - MapboxCarApp.updateCarAppState(ActiveGuidanceState) + MapboxNavigationApp.current()?.let { mapboxNavigation -> + mapboxNavigation.setNavigationRoutes( + carRoutesProvider.navigationRoutes.value + ) + MapboxCarApp.updateCarAppState(ActiveGuidanceState) + } } .build(), ) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/RoutePreviewCarContext.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/RoutePreviewCarContext.kt index 4fe0f1ee0fb..506b332e771 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/RoutePreviewCarContext.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/RoutePreviewCarContext.kt @@ -9,6 +9,5 @@ data class RoutePreviewCarContext internal constructor( val carContext = mainCarContext.carContext val mapboxCarMap = mainCarContext.mapboxCarMap val distanceFormatter = mainCarContext.distanceFormatter - val mapboxNavigation = mainCarContext.mapboxNavigation val feedbackPollProvider = mainCarContext.feedbackPollProvider } From 95b18be7ce965beb9d1e436c0500f02c1bd79e29 Mon Sep 17 00:00:00 2001 From: Kyle Madsen Date: Wed, 24 Aug 2022 17:51:49 -0700 Subject: [PATCH 2/3] Remove a couple more MapboxNavigation instances --- libnavui-androidauto/api/current.txt | 2 -- .../speedlimit/CarSpeedLimitRenderer.kt | 17 +++++++++++++++-- .../deeplink/GeoDeeplinkNavigateAction.kt | 17 +++++++++++------ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/libnavui-androidauto/api/current.txt b/libnavui-androidauto/api/current.txt index 9309ccb8640..80dcc3a898a 100644 --- a/libnavui-androidauto/api/current.txt +++ b/libnavui-androidauto/api/current.txt @@ -668,13 +668,11 @@ package com.mapbox.androidauto.car.preview { method public com.mapbox.androidauto.car.feedback.core.CarFeedbackPollProvider getFeedbackPollProvider(); method public com.mapbox.androidauto.car.MainCarContext getMainCarContext(); method public com.mapbox.maps.extension.androidauto.MapboxCarMap getMapboxCarMap(); - method public com.mapbox.navigation.core.MapboxNavigation getMapboxNavigation(); property public final androidx.car.app.CarContext carContext; property public final com.mapbox.navigation.base.formatter.DistanceFormatter distanceFormatter; property public final com.mapbox.androidauto.car.feedback.core.CarFeedbackPollProvider feedbackPollProvider; property public final com.mapbox.androidauto.car.MainCarContext mainCarContext; property public final com.mapbox.maps.extension.androidauto.MapboxCarMap mapboxCarMap; - property public final com.mapbox.navigation.core.MapboxNavigation mapboxNavigation; } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/navigation/speedlimit/CarSpeedLimitRenderer.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/navigation/speedlimit/CarSpeedLimitRenderer.kt index b9a56e692de..f084304fbc7 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/navigation/speedlimit/CarSpeedLimitRenderer.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/navigation/speedlimit/CarSpeedLimitRenderer.kt @@ -9,6 +9,9 @@ import com.mapbox.maps.MapboxExperimental import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.navigation.base.formatter.UnitType +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.LocationMatcherResult import com.mapbox.navigation.core.trip.session.LocationObserver import kotlin.math.roundToInt @@ -33,6 +36,16 @@ class CarSpeedLimitRenderer( } } + private val navigationObserver = object : MapboxNavigationObserver { + override fun onAttached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.registerLocationObserver(locationObserver) + } + + override fun onDetached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.unregisterLocationObserver(locationObserver) + } + } + private fun updateSpeed(locationMatcherResult: LocationMatcherResult) { val speedKmph = locationMatcherResult.enhancedLocation.speed / METERS_IN_KILOMETER * SECONDS_IN_HOUR @@ -58,12 +71,12 @@ class CarSpeedLimitRenderer( logAndroidAuto("CarSpeedLimitRenderer carMapSurface loaded") val speedLimitWidget = SpeedLimitWidget().also { speedLimitWidget = it } mapboxCarMapSurface.mapSurface.addWidget(speedLimitWidget) - mainCarContext.mapboxNavigation.registerLocationObserver(locationObserver) + MapboxNavigationApp.registerObserver(navigationObserver) } override fun onDetached(mapboxCarMapSurface: MapboxCarMapSurface) { logAndroidAuto("CarSpeedLimitRenderer carMapSurface detached") - mainCarContext.mapboxNavigation.unregisterLocationObserver(locationObserver) + MapboxNavigationApp.unregisterObserver(navigationObserver) speedLimitWidget?.let { mapboxCarMapSurface.mapSurface.removeWidget(it) } speedLimitWidget = null } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkNavigateAction.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkNavigateAction.kt index 696e95d6e44..349daf198d9 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkNavigateAction.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkNavigateAction.kt @@ -10,22 +10,29 @@ import com.mapbox.androidauto.car.placeslistonmap.PlaceMarkerRenderer import com.mapbox.androidauto.car.placeslistonmap.PlacesListItemMapper import com.mapbox.androidauto.car.placeslistonmap.PlacesListOnMapScreen import com.mapbox.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.geodeeplink.GeoDeeplink import com.mapbox.navigation.core.geodeeplink.GeoDeeplinkParser +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp class GeoDeeplinkNavigateAction( val mainCarContext: MainCarContext, val lifecycle: Lifecycle ) { fun onNewIntent(intent: Intent): Screen? { + val mapboxNavigation = MapboxNavigationApp.current() + ?: return null val geoDeeplink = GeoDeeplinkParser.parse(intent.dataString) ?: return null - return preparePlacesListOnMapScreen(geoDeeplink) + return preparePlacesListOnMapScreen(mapboxNavigation, geoDeeplink) } - private fun preparePlacesListOnMapScreen(geoDeeplink: GeoDeeplink): Screen { + private fun preparePlacesListOnMapScreen( + mapboxNavigation: MapboxNavigation, + geoDeeplink: GeoDeeplink + ): Screen { logAndroidAuto("GeoDeeplinkNavigateAction preparePlacesListOnMapScreen") - val accessToken = mainCarContext.mapboxNavigation.navigationOptions.accessToken + val accessToken = mapboxNavigation.navigationOptions.accessToken checkNotNull(accessToken) { "GeoDeeplinkGeocoding requires an access token" } @@ -35,14 +42,12 @@ class GeoDeeplinkNavigateAction( ) val feedbackPoll = mainCarContext.feedbackPollProvider .getSearchFeedbackPoll(mainCarContext.carContext) - return PlacesListOnMapScreen( mainCarContext, placesProvider, PlacesListItemMapper( PlaceMarkerRenderer(mainCarContext.carContext), - mainCarContext - .mapboxNavigation + mapboxNavigation .navigationOptions .distanceFormatterOptions .unitType From edb9dfcb116e1f5ead8fc12765513e062ca273ec Mon Sep 17 00:00:00 2001 From: Kyle Madsen Date: Thu, 25 Aug 2022 09:00:03 -0700 Subject: [PATCH 3/3] go with !! --- .../car/preview/CarRoutePreviewScreen.kt | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt index a5bb35d2472..a3e63c45236 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt @@ -63,7 +63,7 @@ class CarRoutePreviewScreen( override fun handleOnBackPressed() { logAndroidAuto("CarRoutePreviewScreen OnBackPressedCallback") - MapboxNavigationApp.current()?.setNavigationRoutes(emptyList()) + MapboxNavigationApp.current()!!.setNavigationRoutes(emptyList()) screenManager.pop() } } @@ -182,12 +182,11 @@ class CarRoutePreviewScreen( Action.Builder() .setTitle(carContext.getString(R.string.car_action_preview_navigate_button)) .setOnClickListener { - MapboxNavigationApp.current()?.let { mapboxNavigation -> - mapboxNavigation.setNavigationRoutes( - carRoutesProvider.navigationRoutes.value - ) - MapboxCarApp.updateCarAppState(ActiveGuidanceState) - } + val mapboxNavigation = MapboxNavigationApp.current()!! + mapboxNavigation.setNavigationRoutes( + carRoutesProvider.navigationRoutes.value + ) + MapboxCarApp.updateCarAppState(ActiveGuidanceState) } .build(), )