Skip to content

Commit 663ec1b

Browse files
authored
Remove MapboxCarApp (#6492)
* Remove MapboxCarApp * use function
1 parent af140a1 commit 663ec1b

File tree

13 files changed

+135
-174
lines changed

13 files changed

+135
-174
lines changed

libnavui-androidauto/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ Mapbox welcomes participation and contributions from everyone.
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)
1414
- Deleted `ActionProvider` and `ScreenActionProvider` in favor of `MapboxActionProvider`. [#6494](https://github.com/mapbox/mapbox-navigation-android/pull/6494)
15+
- Renamed `CarAppLocation` to `CarLocationProvider` with a `getRegisteredInstance` accessor. [#6492](https://github.com/mapbox/mapbox-navigation-android/pull/6492)
16+
- Removed `MapboxCarApp` as it is no longer needed. Use `CarLocationProvider.getRegisteredInstance()` if needed. [#6492](https://github.com/mapbox/mapbox-navigation-android/pull/6492)
1517

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

libnavui-androidauto/api/current.txt

Lines changed: 15 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);
@@ -209,6 +203,21 @@ package com.mapbox.androidauto.car.feedback.ui {
209203

210204
package com.mapbox.androidauto.car.location {
211205

206+
public final class CarLocationProvider implements com.mapbox.maps.plugin.locationcomponent.LocationProvider com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {
207+
method public static com.mapbox.androidauto.car.location.CarLocationProvider getRegisteredInstance();
208+
method public android.location.Location? lastLocation();
209+
method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
210+
method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
211+
method public void registerLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer);
212+
method public void unRegisterLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer);
213+
method public suspend Object? validLocation(kotlin.coroutines.Continuation<? super android.location.Location>);
214+
field public static final com.mapbox.androidauto.car.location.CarLocationProvider.Companion Companion;
215+
}
216+
217+
public static final class CarLocationProvider.Companion {
218+
method public com.mapbox.androidauto.car.location.CarLocationProvider getRegisteredInstance();
219+
}
220+
212221
public final class CarLocationPuck {
213222
method public com.mapbox.maps.plugin.LocationPuck2D navigationPuck2D(android.content.Context context);
214223
field public static final com.mapbox.androidauto.car.location.CarLocationPuck INSTANCE;
@@ -705,16 +714,6 @@ package com.mapbox.androidauto.navigation.audioguidance {
705714

706715
}
707716

708-
package com.mapbox.androidauto.navigation.location {
709-
710-
public interface CarAppLocation extends com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {
711-
method public com.mapbox.navigation.ui.maps.location.NavigationLocationProvider getNavigationLocationProvider();
712-
method public suspend Object? validLocation(kotlin.coroutines.Continuation<? super android.location.Location>);
713-
property public abstract com.mapbox.navigation.ui.maps.location.NavigationLocationProvider navigationLocationProvider;
714-
}
715-
716-
}
717-
718717
package com.mapbox.androidauto.notification {
719718

720719
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.first
15+
import kotlinx.coroutines.flow.firstOrNull
16+
17+
/**
18+
* Automatically attaches and detaches from [MapboxNavigationApp] to provide map matched locations.
19+
*/
20+
class CarLocationProvider private constructor() : MapboxNavigationObserver, LocationProvider {
21+
22+
private val navigationLocationProvider = NavigationLocationProvider()
23+
private val mutableLocation = MutableSharedFlow<Location>(
24+
replay = 1,
25+
onBufferOverflow = BufferOverflow.DROP_OLDEST
26+
)
27+
28+
private val locationObserver = object : LocationObserver {
29+
override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) {
30+
navigationLocationProvider.changePosition(
31+
locationMatcherResult.enhancedLocation,
32+
locationMatcherResult.keyPoints,
33+
)
34+
mutableLocation.tryEmit(locationMatcherResult.enhancedLocation)
35+
}
36+
37+
override fun onNewRawLocation(rawLocation: Location) {
38+
// no op
39+
}
40+
}
41+
42+
override fun onAttached(mapboxNavigation: MapboxNavigation) {
43+
mapboxNavigation.registerLocationObserver(locationObserver)
44+
}
45+
46+
override fun onDetached(mapboxNavigation: MapboxNavigation) {
47+
mapboxNavigation.unregisterLocationObserver(locationObserver)
48+
}
49+
50+
override fun registerLocationConsumer(locationConsumer: LocationConsumer) {
51+
navigationLocationProvider.registerLocationConsumer(locationConsumer)
52+
}
53+
54+
override fun unRegisterLocationConsumer(locationConsumer: LocationConsumer) {
55+
navigationLocationProvider.unRegisterLocationConsumer(locationConsumer)
56+
}
57+
58+
/**
59+
* Immediately access the last location received.
60+
*/
61+
fun lastLocation(): Location? = 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.first()
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: 3 additions & 3 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,8 +17,8 @@ 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()
21-
?.run { Point.fromLngLat(longitude, latitude) }
20+
val origin = CarLocationProvider.getRegisteredInstance().validLocation()
21+
.run { Point.fromLngLat(longitude, latitude) }
2222
?: return ExpectedFactory.createError(
2323
GetPlacesError("Did not find current location.", null)
2424
)

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)