Skip to content

Commit e52fecb

Browse files
committed
Remove MapboxCarApp
1 parent 18e79f5 commit e52fecb

File tree

13 files changed

+133
-163
lines changed

13 files changed

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

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)