Skip to content

Commit 1af170b

Browse files
committed
Integrate mapbox car map installer
1 parent da31154 commit 1af170b

File tree

8 files changed

+68
-130
lines changed

8 files changed

+68
-130
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ allprojects {
5757
// we allow access to snapshots repo if ALLOW_SNAPSHOT_REPOSITORY is set, what means we are running on CI
5858
// with Navigation Native forced to be some snapshot version
5959
// if you need to use snapshots while development, just set `addSnapshotsRepo` to true manually
60-
def addSnapshotsRepo = project.hasProperty('ALLOW_SNAPSHOT_REPOSITORY') ? project.property('ALLOW_SNAPSHOT_REPOSITORY') : (System.getenv("ALLOW_SNAPSHOT_REPOSITORY")?.toBoolean() ?: false)
60+
// def addSnapshotsRepo = project.hasProperty('ALLOW_SNAPSHOT_REPOSITORY') ? project.property('ALLOW_SNAPSHOT_REPOSITORY') : (System.getenv("ALLOW_SNAPSHOT_REPOSITORY")?.toBoolean() ?: false)
61+
def addSnapshotsRepo = true
6162
if (addSnapshotsRepo) {
6263
println("Snapshot repository reference added.")
6364
maven {

gradle/dependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ext {
2828
mapboxCrashMonitor : '2.0.0',
2929
mapboxAnnotationPlugin : '0.8.0',
3030
mapboxBaseAndroid : '0.8.0',
31-
mapboxMapsAndroidAuto : '0.2.0',
31+
mapboxMapsAndroidAuto : '0.3.0-SNAPSHOT',
3232
androidXLifecycle : '2.4.0',
3333
androidXCoreVersion : '1.6.0',
3434
androidXArchCoreVersion : '2.1.0',

libnavui-androidauto/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Mapbox welcomes participation and contributions from everyone.
55
## Unreleased
66
#### Features
77
#### Bug fixes and improvements
8+
- Removed `MapboxNavigation` from `CarNavigationCamera` and `CarRouteLine` constructors. [#6219](https://github.com/mapbox/mapbox-navigation-android/pull/6219)
89

910
## androidauto-v0.8.0 - Aug 18, 2022
1011
### Changelog

libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/MainCarScreen.kt

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import androidx.car.app.Screen
44
import androidx.car.app.model.CarColor
55
import androidx.car.app.model.Template
66
import androidx.car.app.navigation.model.NavigationTemplate
7-
import androidx.lifecycle.DefaultLifecycleObserver
8-
import androidx.lifecycle.LifecycleOwner
97
import com.mapbox.androidauto.car.location.CarLocationRenderer
108
import com.mapbox.androidauto.car.navigation.CarCameraMode
119
import com.mapbox.androidauto.car.navigation.CarNavigationCamera
@@ -14,54 +12,37 @@ import com.mapbox.androidauto.car.navigation.speedlimit.CarSpeedLimitRenderer
1412
import com.mapbox.androidauto.car.preview.CarRouteLine
1513
import com.mapbox.androidauto.internal.logAndroidAuto
1614
import com.mapbox.maps.MapboxExperimental
15+
import com.mapbox.maps.extension.androidauto.mapboxMapInstaller
1716

1817
/**
1918
* When the app is launched from Android Auto
2019
*/
2120
@OptIn(MapboxExperimental::class)
2221
class MainCarScreen(
23-
private val mainCarContext: MainCarContext
22+
mainCarContext: MainCarContext
2423
) : Screen(mainCarContext.carContext) {
2524

26-
val carRouteLine = CarRouteLine(mainCarContext)
27-
val carLocationRenderer = CarLocationRenderer(mainCarContext)
28-
val carSpeedLimitRenderer = CarSpeedLimitRenderer(mainCarContext)
29-
val carNavigationCamera = CarNavigationCamera(
25+
private val carNavigationCamera = CarNavigationCamera(
3026
mainCarContext.mapboxNavigation,
3127
CarCameraMode.FOLLOWING,
3228
alternativeCarCameraMode = null,
3329
)
34-
private val roadLabelSurfaceLayer = RoadLabelSurfaceLayer(
35-
mainCarContext.carContext,
36-
mainCarContext.mapboxNavigation,
37-
)
3830

3931
private val mainActionStrip = MainActionStrip(this, mainCarContext)
4032
private val mapActionStripBuilder = MainMapActionStrip(this, carNavigationCamera)
4133

4234
init {
4335
logAndroidAuto("MainCarScreen constructor")
44-
lifecycle.addObserver(object : DefaultLifecycleObserver {
45-
override fun onResume(owner: LifecycleOwner) {
46-
logAndroidAuto("MainCarScreen onResume")
47-
mainCarContext.mapboxCarMap.registerObserver(carRouteLine)
48-
mainCarContext.mapboxCarMap.registerObserver(carLocationRenderer)
49-
mainCarContext.mapboxCarMap.registerObserver(roadLabelSurfaceLayer)
50-
mainCarContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer)
51-
mainCarContext.mapboxCarMap.registerObserver(carNavigationCamera)
52-
mainCarContext.mapboxCarMap.setGestureHandler(carNavigationCamera.gestureHandler)
53-
}
54-
55-
override fun onPause(owner: LifecycleOwner) {
56-
logAndroidAuto("MainCarScreen onPause")
57-
mainCarContext.mapboxCarMap.unregisterObserver(carRouteLine)
58-
mainCarContext.mapboxCarMap.unregisterObserver(carLocationRenderer)
59-
mainCarContext.mapboxCarMap.unregisterObserver(roadLabelSurfaceLayer)
60-
mainCarContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer)
61-
mainCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera)
62-
mainCarContext.mapboxCarMap.setGestureHandler(null)
63-
}
64-
})
36+
mapboxMapInstaller(mainCarContext.mapboxCarMap)
37+
.onResumed(
38+
CarRouteLine(mainCarContext),
39+
CarLocationRenderer(mainCarContext),
40+
RoadLabelSurfaceLayer(carContext, mainCarContext.mapboxNavigation),
41+
CarSpeedLimitRenderer(mainCarContext),
42+
carNavigationCamera,
43+
)
44+
.gestureHandler(carNavigationCamera.gestureHandler)
45+
.install()
6546
}
6647

6748
override fun onGetTemplate(): Template {

libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/navigation/ActiveGuidanceScreen.kt

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import com.mapbox.geojson.FeatureCollection
2727
import com.mapbox.maps.MapboxExperimental
2828
import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver
2929
import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface
30+
import com.mapbox.maps.extension.androidauto.mapboxMapInstaller
3031
import com.mapbox.maps.plugin.delegates.listeners.OnStyleLoadedListener
3132
import com.mapbox.navigation.base.trip.model.RouteLegProgress
3233
import com.mapbox.navigation.base.trip.model.RouteProgress
@@ -44,20 +45,12 @@ class ActiveGuidanceScreen(
4445
private val placesLayerUtil: PlacesListOnMapLayerUtil = PlacesListOnMapLayerUtil(),
4546
) : Screen(carActiveGuidanceContext.carContext) {
4647

47-
val carRouteLine = CarRouteLine(carActiveGuidanceContext.mainCarContext)
48-
val carLocationRenderer = CarLocationRenderer(carActiveGuidanceContext.mainCarContext)
49-
val carSpeedLimitRenderer = CarSpeedLimitRenderer(carActiveGuidanceContext.mainCarContext)
50-
val carNavigationCamera = CarNavigationCamera(
48+
private val carRouteProgressObserver = CarNavigationInfoObserver(carActiveGuidanceContext)
49+
private val carNavigationCamera = CarNavigationCamera(
5150
carActiveGuidanceContext.mapboxNavigation,
5251
CarCameraMode.FOLLOWING,
5352
CarCameraMode.OVERVIEW,
5453
)
55-
private val roadLabelSurfaceLayer = RoadLabelSurfaceLayer(
56-
carActiveGuidanceContext.carContext,
57-
carActiveGuidanceContext.mapboxNavigation,
58-
)
59-
60-
private val carRouteProgressObserver = CarNavigationInfoObserver(carActiveGuidanceContext)
6154
private val mapActionStripBuilder = MainMapActionStrip(this, carNavigationCamera)
6255

6356
private val arrivalObserver = object : ArrivalObserver {
@@ -112,6 +105,21 @@ class ActiveGuidanceScreen(
112105
}
113106

114107
init {
108+
mapboxMapInstaller(carActiveGuidanceContext.mapboxCarMap)
109+
.onResumed(
110+
CarLocationRenderer(carActiveGuidanceContext.mainCarContext),
111+
RoadLabelSurfaceLayer(
112+
carContext,
113+
carActiveGuidanceContext.mapboxNavigation,
114+
),
115+
CarSpeedLimitRenderer(carActiveGuidanceContext.mainCarContext),
116+
carNavigationCamera,
117+
CarRouteLine(carActiveGuidanceContext.mainCarContext),
118+
surfaceListener,
119+
)
120+
.gestureHandler(carNavigationCamera.gestureHandler)
121+
.install()
122+
115123
logAndroidAuto("ActiveGuidanceScreen constructor")
116124
lifecycle.addObserver(object : DefaultLifecycleObserver {
117125

@@ -122,29 +130,13 @@ class ActiveGuidanceScreen(
122130

123131
override fun onResume(owner: LifecycleOwner) {
124132
logAndroidAuto("ActiveGuidanceScreen onResume")
125-
carActiveGuidanceContext.mapboxCarMap.registerObserver(carLocationRenderer)
126-
carActiveGuidanceContext.mapboxCarMap.registerObserver(roadLabelSurfaceLayer)
127-
carActiveGuidanceContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer)
128-
carActiveGuidanceContext.mapboxCarMap.registerObserver(carNavigationCamera)
129-
carActiveGuidanceContext.mapboxCarMap.setGestureHandler(
130-
carNavigationCamera.gestureHandler
131-
)
132-
carActiveGuidanceContext.mapboxCarMap.registerObserver(carRouteLine)
133-
carActiveGuidanceContext.mapboxCarMap.registerObserver(surfaceListener)
134133
carRouteProgressObserver.start {
135134
invalidate()
136135
}
137136
}
138137

139138
override fun onPause(owner: LifecycleOwner) {
140139
logAndroidAuto("ActiveGuidanceScreen onPause")
141-
carActiveGuidanceContext.mapboxCarMap.unregisterObserver(roadLabelSurfaceLayer)
142-
carActiveGuidanceContext.mapboxCarMap.unregisterObserver(carLocationRenderer)
143-
carActiveGuidanceContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer)
144-
carActiveGuidanceContext.mapboxCarMap.unregisterObserver(carNavigationCamera)
145-
carActiveGuidanceContext.mapboxCarMap.setGestureHandler(null)
146-
carActiveGuidanceContext.mapboxCarMap.unregisterObserver(carRouteLine)
147-
carActiveGuidanceContext.mapboxCarMap.unregisterObserver(surfaceListener)
148140
carRouteProgressObserver.stop()
149141
}
150142

libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/placeslistonmap/PlacesListOnMapScreen.kt

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.mapbox.geojson.Point
3131
import com.mapbox.maps.MapboxExperimental
3232
import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver
3333
import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface
34+
import com.mapbox.maps.extension.androidauto.mapboxMapInstaller
3435
import com.mapbox.maps.plugin.delegates.listeners.OnStyleLoadedListener
3536
import com.mapbox.navigation.base.route.NavigationRoute
3637
import kotlinx.coroutines.Dispatchers
@@ -55,7 +56,6 @@ class PlacesListOnMapScreen(
5556
private val placeRecords by lazy { CopyOnWriteArrayList<PlaceRecord>() }
5657
private val jobControl by lazy { mainCarContext.getJobControl() }
5758
private val carNavigationCamera = CarLocationsOverviewCamera(mainCarContext.mapboxNavigation)
58-
private val locationRenderer = CarLocationRenderer(mainCarContext)
5959
private var styleLoadedListener: OnStyleLoadedListener? = null
6060

6161
private val surfaceListener = object : MapboxCarMapObserver {
@@ -111,37 +111,19 @@ class PlacesListOnMapScreen(
111111
}
112112

113113
init {
114-
lifecycle.addObserver(object : DefaultLifecycleObserver {
115-
override fun onCreate(owner: LifecycleOwner) {
116-
logAndroidAuto("PlacesListOnMapScreen onCreate")
117-
}
118-
119-
override fun onStart(owner: LifecycleOwner) {
120-
logAndroidAuto("PlacesListOnMapScreen onStart")
121-
}
122-
123-
override fun onResume(owner: LifecycleOwner) {
124-
logAndroidAuto("PlacesListOnMapScreen onResume")
125-
mainCarContext.mapboxCarMap.registerObserver(surfaceListener)
126-
mainCarContext.mapboxCarMap.registerObserver(carNavigationCamera)
127-
mainCarContext.mapboxCarMap.registerObserver(locationRenderer)
128-
}
114+
mapboxMapInstaller(mainCarContext.mapboxCarMap)
115+
.onResumed(
116+
surfaceListener,
117+
carNavigationCamera,
118+
CarLocationRenderer(mainCarContext)
119+
)
120+
.install()
129121

122+
lifecycle.addObserver(object : DefaultLifecycleObserver {
130123
override fun onPause(owner: LifecycleOwner) {
131124
logAndroidAuto("PlacesListOnMapScreen onPause")
132125
placesProvider.cancel()
133126
jobControl.job.cancelChildren()
134-
mainCarContext.mapboxCarMap.unregisterObserver(locationRenderer)
135-
mainCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera)
136-
mainCarContext.mapboxCarMap.unregisterObserver(surfaceListener)
137-
}
138-
139-
override fun onStop(owner: LifecycleOwner) {
140-
logAndroidAuto("PlacesListOnMapScreen onStop")
141-
}
142-
143-
override fun onDestroy(owner: LifecycleOwner) {
144-
logAndroidAuto("PlacesListOnMapScreen onDestroy")
145127
}
146128
})
147129
}

libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewScreen.kt

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.mapbox.geojson.FeatureCollection
3232
import com.mapbox.maps.MapboxExperimental
3333
import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver
3434
import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface
35+
import com.mapbox.maps.extension.androidauto.mapboxMapInstaller
3536
import com.mapbox.maps.plugin.delegates.listeners.OnStyleLoadedListener
3637
import com.mapbox.navigation.base.route.NavigationRoute
3738

@@ -49,15 +50,6 @@ class CarRoutePreviewScreen(
4950

5051
private val routesProvider = PreviewRoutesProvider(navigationRoutes)
5152
var selectedIndex = 0
52-
val carRouteLine = CarRouteLine(routePreviewCarContext.mainCarContext, routesProvider)
53-
val carLocationRenderer = CarLocationRenderer(routePreviewCarContext.mainCarContext)
54-
val carSpeedLimitRenderer = CarSpeedLimitRenderer(routePreviewCarContext.mainCarContext)
55-
val carNavigationCamera = CarNavigationCamera(
56-
routePreviewCarContext.mapboxNavigation,
57-
CarCameraMode.OVERVIEW,
58-
CarCameraMode.FOLLOWING,
59-
routesProvider,
60-
)
6153

6254
private val backPressCallback = object : OnBackPressedCallback(true) {
6355

@@ -101,28 +93,31 @@ class CarRoutePreviewScreen(
10193

10294
init {
10395
logAndroidAuto("CarRoutePreviewScreen constructor")
96+
mapboxMapInstaller(routePreviewCarContext.mapboxCarMap)
97+
.onResumed(
98+
CarLocationRenderer(routePreviewCarContext.mainCarContext),
99+
CarSpeedLimitRenderer(routePreviewCarContext.mainCarContext),
100+
CarNavigationCamera(
101+
routePreviewCarContext.mapboxNavigation,
102+
CarCameraMode.OVERVIEW,
103+
CarCameraMode.FOLLOWING,
104+
routesProvider,
105+
),
106+
CarRouteLine(routePreviewCarContext.mainCarContext, routesProvider),
107+
surfaceListener,
108+
)
109+
.install()
110+
104111
lifecycle.muteAudioGuidance()
105112
lifecycle.addObserver(object : DefaultLifecycleObserver {
106113
override fun onResume(owner: LifecycleOwner) {
107114
logAndroidAuto("CarRoutePreviewScreen onResume")
108-
routePreviewCarContext.carContext.onBackPressedDispatcher.addCallback(
109-
backPressCallback
110-
)
111-
routePreviewCarContext.mapboxCarMap.registerObserver(carLocationRenderer)
112-
routePreviewCarContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer)
113-
routePreviewCarContext.mapboxCarMap.registerObserver(carNavigationCamera)
114-
routePreviewCarContext.mapboxCarMap.registerObserver(carRouteLine)
115-
routePreviewCarContext.mapboxCarMap.registerObserver(surfaceListener)
115+
carContext.onBackPressedDispatcher.addCallback(backPressCallback)
116116
}
117117

118118
override fun onPause(owner: LifecycleOwner) {
119119
logAndroidAuto("CarRoutePreviewScreen onPause")
120120
backPressCallback.remove()
121-
routePreviewCarContext.mapboxCarMap.unregisterObserver(carLocationRenderer)
122-
routePreviewCarContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer)
123-
routePreviewCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera)
124-
routePreviewCarContext.mapboxCarMap.unregisterObserver(carRouteLine)
125-
routePreviewCarContext.mapboxCarMap.unregisterObserver(surfaceListener)
126121
}
127122
})
128123
}

qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/car/MainCarSession.kt

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@ import com.mapbox.androidauto.MapboxCarNavigationManager
1717
import com.mapbox.androidauto.car.MainCarContext
1818
import com.mapbox.androidauto.car.MainScreenManager
1919
import com.mapbox.androidauto.car.map.widgets.compass.CarCompassSurfaceRenderer
20-
import com.mapbox.androidauto.car.map.widgets.logo.CarLogoSurfaceRenderer
2120
import com.mapbox.androidauto.car.permissions.NeedsLocationPermissionsScreen
2221
import com.mapbox.androidauto.deeplink.GeoDeeplinkNavigateAction
2322
import com.mapbox.androidauto.internal.logAndroidAuto
2423
import com.mapbox.androidauto.notification.CarNotificationInterceptor
25-
import com.mapbox.maps.MapInitOptions
2624
import com.mapbox.maps.MapboxExperimental
2725
import com.mapbox.maps.extension.androidauto.MapboxCarMap
26+
import com.mapbox.maps.extension.androidauto.mapboxMapInstaller
2827
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
2928
import com.mapbox.navigation.base.options.NavigationOptions
3029
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
@@ -36,19 +35,21 @@ import kotlinx.coroutines.launch
3635
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class, MapboxExperimental::class)
3736
class MainCarSession : Session() {
3837

38+
private val carMapStyleLoader = MainCarMapLoader()
39+
private val mapboxCarMap: MapboxCarMap = mapboxMapInstaller()
40+
.onCreated(carMapStyleLoader)
41+
.onResumed(CarCompassSurfaceRenderer(), CarCompassSurfaceRenderer())
42+
.install()
43+
3944
private var mainCarContext: MainCarContext? = null
4045
private lateinit var mainScreenManager: MainScreenManager
41-
private lateinit var mapboxCarMap: MapboxCarMap
4246
private lateinit var mapboxNavigationManager: MapboxCarNavigationManager
43-
private val carMapStyleLoader = MainCarMapLoader()
4447
private val notificationInterceptor by lazy {
4548
CarNotificationInterceptor(carContext, MainCarAppService::class.java)
4649
}
4750

4851
init {
4952
logAndroidAuto("MainCarSession constructor")
50-
val logoSurfaceRenderer = CarLogoSurfaceRenderer()
51-
val compassSurfaceRenderer = CarCompassSurfaceRenderer()
5253
MapboxNavigationApp.attach(lifecycleOwner = this)
5354
lifecycle.addObserver(object : DefaultLifecycleObserver {
5455

@@ -64,8 +65,6 @@ class MainCarSession : Session() {
6465
mapboxNavigationManager = MapboxCarNavigationManager(carContext)
6566
MapboxNavigationApp.registerObserver(mapboxNavigationManager)
6667

67-
mapboxCarMap = MapboxCarMap(MapInitOptions(context = carContext))
68-
mapboxCarMap.registerObserver(carMapStyleLoader)
6968
val mainCarContext = MainCarContext(carContext, mapboxCarMap)
7069
.also { mainCarContext = it }
7170
val mainScreenManager = MainScreenManager(mainCarContext)
@@ -79,26 +78,13 @@ class MainCarSession : Session() {
7978
MapboxNavigationApp.registerObserver(notificationInterceptor)
8079
}
8180

82-
override fun onResume(owner: LifecycleOwner) {
83-
logAndroidAuto("MainCarSession onResume")
84-
mapboxCarMap.registerObserver(logoSurfaceRenderer)
85-
mapboxCarMap.registerObserver(compassSurfaceRenderer)
86-
}
87-
88-
override fun onPause(owner: LifecycleOwner) {
89-
logAndroidAuto("MainCarSession onPause")
90-
mapboxCarMap.unregisterObserver(logoSurfaceRenderer)
91-
mapboxCarMap.unregisterObserver(compassSurfaceRenderer)
92-
}
93-
9481
override fun onStop(owner: LifecycleOwner) {
9582
logAndroidAuto("MainCarSession onStop")
9683
}
9784

9885
override fun onDestroy(owner: LifecycleOwner) {
9986
logAndroidAuto("MainCarSession onDestroy")
10087
MapboxNavigationApp.unregisterObserver(mapboxNavigationManager)
101-
mapboxCarMap.unregisterObserver(carMapStyleLoader)
10288
mainCarContext = null
10389
MapboxNavigationApp.unregisterObserver(notificationInterceptor)
10490
}

0 commit comments

Comments
 (0)