Skip to content

Commit b644c74

Browse files
committed
Remove MapboxCarApp
1 parent 18e79f5 commit b644c74

File tree

13 files changed

+126
-163
lines changed

13 files changed

+126
-163
lines changed

libnavui-androidauto/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Mapbox welcomes participation and contributions from everyone.
1111
- Removed options from the `MapboxCarContext` constructor so that it can be compatible with future changes. [#6478](https://github.com/mapbox/mapbox-navigation-android/pull/6478)
1212
- Deleted `RoutePreviewCarContext` in favor of `MapboxCarContext`. [#6478](https://github.com/mapbox/mapbox-navigation-android/pull/6478)
1313
- Renamed `CarSettingsStorage` to `MapboxCarStorage`. [#6478](https://github.com/mapbox/mapbox-navigation-android/pull/6478)
14+
- Renamed `CarAppLocation` to `CarLocationProvider` with a `getRegisteredInstance` accessor. [#6492](https://github.com/mapbox/mapbox-navigation-android/pull/6492)
15+
- Removed `MapboxCarApp` as it is no longer needed. Use `CarLocationProvider.getRegisteredInstance()` if needed. [#6492](https://github.com/mapbox/mapbox-navigation-android/pull/6492)
1416

1517
## androidauto-v0.14.0 - October 13, 2022
1618
### Changelog

libnavui-androidauto/api/current.txt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
// Signature format: 3.0
22
package com.mapbox.androidauto {
33

4-
public final class MapboxCarApp {
5-
method public com.mapbox.androidauto.navigation.location.CarAppLocation carAppLocationService();
6-
method @UiThread public void setup();
7-
field public static final com.mapbox.androidauto.MapboxCarApp INSTANCE;
8-
}
9-
104
public final class MapboxCarNavigationManager implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {
115
method public kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> getAutoDriveEnabledFlow();
126
method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
@@ -216,6 +210,22 @@ package com.mapbox.androidauto.car.feedback.ui {
216210

217211
package com.mapbox.androidauto.car.location {
218212

213+
public final class CarLocationProvider implements com.mapbox.maps.plugin.locationcomponent.LocationProvider com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {
214+
method public android.location.Location? getLastLocation();
215+
method public static com.mapbox.androidauto.car.location.CarLocationProvider getRegisteredInstance();
216+
method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
217+
method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
218+
method public void registerLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer);
219+
method public void unRegisterLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer);
220+
method public suspend Object? validLocation(kotlin.coroutines.Continuation<? super android.location.Location>);
221+
property public final android.location.Location? lastLocation;
222+
field public static final com.mapbox.androidauto.car.location.CarLocationProvider.Companion Companion;
223+
}
224+
225+
public static final class CarLocationProvider.Companion {
226+
method public com.mapbox.androidauto.car.location.CarLocationProvider getRegisteredInstance();
227+
}
228+
219229
public final class CarLocationPuck {
220230
method public com.mapbox.maps.plugin.LocationPuck2D navigationPuck2D(android.content.Context context);
221231
field public static final com.mapbox.androidauto.car.location.CarLocationPuck INSTANCE;
@@ -712,16 +722,6 @@ package com.mapbox.androidauto.navigation.audioguidance {
712722

713723
}
714724

715-
package com.mapbox.androidauto.navigation.location {
716-
717-
public interface CarAppLocation extends com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {
718-
method public com.mapbox.navigation.ui.maps.location.NavigationLocationProvider getNavigationLocationProvider();
719-
method public suspend Object? validLocation(kotlin.coroutines.Continuation<? super android.location.Location>);
720-
property public abstract com.mapbox.navigation.ui.maps.location.NavigationLocationProvider navigationLocationProvider;
721-
}
722-
723-
}
724-
725725
package com.mapbox.androidauto.notification {
726726

727727
public final class MapboxCarNotification implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {

libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarApp.kt

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.mapbox.androidauto.car.location
2+
3+
import android.location.Location
4+
import com.mapbox.maps.plugin.locationcomponent.LocationConsumer
5+
import com.mapbox.maps.plugin.locationcomponent.LocationProvider
6+
import com.mapbox.navigation.core.MapboxNavigation
7+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
8+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
9+
import com.mapbox.navigation.core.trip.session.LocationMatcherResult
10+
import com.mapbox.navigation.core.trip.session.LocationObserver
11+
import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider
12+
import kotlinx.coroutines.channels.BufferOverflow
13+
import kotlinx.coroutines.flow.MutableSharedFlow
14+
import kotlinx.coroutines.flow.firstOrNull
15+
16+
/**
17+
* Automatically attaches and detaches from [MapboxNavigationApp] to provide map matched locations.
18+
*/
19+
class CarLocationProvider private constructor() : MapboxNavigationObserver, LocationProvider {
20+
21+
private val navigationLocationProvider = NavigationLocationProvider()
22+
private val mutableLocation = MutableSharedFlow<Location?>(
23+
replay = 1,
24+
onBufferOverflow = BufferOverflow.DROP_OLDEST
25+
)
26+
27+
private val locationObserver = object : LocationObserver {
28+
override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) {
29+
navigationLocationProvider.changePosition(
30+
locationMatcherResult.enhancedLocation,
31+
locationMatcherResult.keyPoints,
32+
)
33+
mutableLocation.tryEmit(locationMatcherResult.enhancedLocation)
34+
}
35+
36+
override fun onNewRawLocation(rawLocation: Location) {
37+
// no op
38+
}
39+
}
40+
41+
override fun onAttached(mapboxNavigation: MapboxNavigation) {
42+
mapboxNavigation.registerLocationObserver(locationObserver)
43+
}
44+
45+
override fun onDetached(mapboxNavigation: MapboxNavigation) {
46+
mapboxNavigation.unregisterLocationObserver(locationObserver)
47+
}
48+
49+
override fun registerLocationConsumer(locationConsumer: LocationConsumer) {
50+
navigationLocationProvider.registerLocationConsumer(locationConsumer)
51+
}
52+
53+
override fun unRegisterLocationConsumer(locationConsumer: LocationConsumer) {
54+
navigationLocationProvider.unRegisterLocationConsumer(locationConsumer)
55+
}
56+
57+
/**
58+
* Immediately access the last location received.
59+
*/
60+
val lastLocation: Location?
61+
get() = navigationLocationProvider.lastLocation
62+
63+
/**
64+
* Wait until a non-null location is received. Improves results when the app is starting.
65+
*/
66+
suspend fun validLocation(): Location? = mutableLocation.firstOrNull()
67+
68+
companion object {
69+
/**
70+
* Get the registered instance or create one and register it to [MapboxNavigationApp].
71+
*/
72+
@JvmStatic
73+
fun getRegisteredInstance(): CarLocationProvider = MapboxNavigationApp
74+
.getObservers(CarLocationProvider::class).firstOrNull()
75+
?: CarLocationProvider().also { MapboxNavigationApp.registerObserver(it) }
76+
}
77+
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.mapbox.androidauto.car.location
22

3-
import com.mapbox.androidauto.MapboxCarApp
43
import com.mapbox.androidauto.internal.logAndroidAuto
54
import com.mapbox.maps.MapboxExperimental
65
import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver
@@ -20,7 +19,7 @@ class CarLocationRenderer : MapboxCarMapObserver {
2019
locationPuck = CarLocationPuck.navigationPuck2D(mapboxCarMapSurface.carContext)
2120
enabled = true
2221
pulsingEnabled = true
23-
setLocationProvider(MapboxCarApp.carAppLocationService().navigationLocationProvider)
22+
setLocationProvider(CarLocationProvider.getRegisteredInstance())
2423
}
2524
}
2625
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.mapbox.androidauto.car.placeslistonmap
22

33
import androidx.car.app.model.ItemList
4+
import com.mapbox.androidauto.car.location.CarLocationProvider
45
import com.mapbox.androidauto.car.search.PlaceRecord
56
import com.mapbox.androidauto.internal.car.extensions.handleStyleOnAttached
67
import com.mapbox.androidauto.internal.car.extensions.handleStyleOnDetached
78
import com.mapbox.androidauto.internal.car.extensions.mapboxNavigationForward
89
import com.mapbox.androidauto.internal.logAndroidAuto
9-
import com.mapbox.androidauto.navigation.location.CarAppLocation
1010
import com.mapbox.geojson.Feature
1111
import com.mapbox.geojson.FeatureCollection
1212
import com.mapbox.geojson.Point
@@ -52,8 +52,7 @@ class PlacesListOnMapManager(
5252
}
5353

5454
fun currentItemList(): ItemList? {
55-
val carAppLocation = MapboxNavigationApp.getObserver(CarAppLocation::class)
56-
val currentLocation = carAppLocation.navigationLocationProvider.lastLocation
55+
val currentLocation = CarLocationProvider.getRegisteredInstance().lastLocation
5756
?: return null
5857
return placesListItemMapper?.mapToItemList(
5958
currentLocation,

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package com.mapbox.androidauto.car.preview
22

33
import androidx.annotation.UiThread
44
import com.mapbox.androidauto.car.MapboxCarOptions
5+
import com.mapbox.androidauto.car.location.CarLocationProvider
56
import com.mapbox.androidauto.car.search.PlaceRecord
67
import com.mapbox.androidauto.internal.logAndroidAuto
78
import com.mapbox.androidauto.internal.logAndroidAutoFailure
8-
import com.mapbox.androidauto.navigation.location.CarAppLocation
99
import com.mapbox.api.directions.v5.DirectionsCriteria
1010
import com.mapbox.api.directions.v5.models.RouteOptions
1111
import com.mapbox.geojson.Point
@@ -17,7 +17,6 @@ import com.mapbox.navigation.base.route.RouterCallback
1717
import com.mapbox.navigation.base.route.RouterFailure
1818
import com.mapbox.navigation.base.route.RouterOrigin
1919
import com.mapbox.navigation.core.MapboxNavigation
20-
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
2120
import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
2221

2322
/**
@@ -66,8 +65,7 @@ class CarRoutePreviewRequest internal constructor(
6665
}
6766
cancelRequest()
6867

69-
val carAppLocation = MapboxNavigationApp.getObserver(CarAppLocation::class)
70-
val location = carAppLocation.navigationLocationProvider.lastLocation
68+
val location = CarLocationProvider.getRegisteredInstance().lastLocation
7169
if (location == null) {
7270
logAndroidAutoFailure("CarRoutePreview.onUnknownCurrentLocation")
7371
callback.onUnknownCurrentLocation()

libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.mapbox.androidauto.deeplink
22

3-
import com.mapbox.androidauto.MapboxCarApp
3+
import com.mapbox.androidauto.car.location.CarLocationProvider
44
import com.mapbox.androidauto.car.placeslistonmap.PlacesListOnMapProvider
55
import com.mapbox.androidauto.car.search.GetPlacesError
66
import com.mapbox.androidauto.car.search.PlaceRecord
@@ -17,7 +17,7 @@ internal class GeoDeeplinkPlacesListOnMapProvider(
1717

1818
override suspend fun getPlaces(): Expected<GetPlacesError, List<PlaceRecord>> {
1919
// Wait for an origin location
20-
val origin = MapboxCarApp.carAppLocationService().validLocation()
20+
val origin = CarLocationProvider.getRegisteredInstance().validLocation()
2121
?.run { Point.fromLngLat(longitude, latitude) }
2222
?: return ExpectedFactory.createError(
2323
GetPlacesError("Did not find current location.", null)

libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/CarAppLocation.kt

Lines changed: 0 additions & 28 deletions
This file was deleted.

libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/impl/CarAppLocationImpl.kt

Lines changed: 0 additions & 58 deletions
This file was deleted.

0 commit comments

Comments
 (0)