Skip to content

Commit a1c9f36

Browse files
committed
Remove MapboxCarApp
1 parent 18e79f5 commit a1c9f36

File tree

12 files changed

+81
-113
lines changed

12 files changed

+81
-113
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.
15+
- Removed `MapboxCarApp` as it is no longer needed. Use `CarLocationProvider.getRegisteredInstance()` if needed.
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 com.mapbox.navigation.ui.maps.location.NavigationLocationProvider getNavigationLocationProvider();
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 com.mapbox.navigation.ui.maps.location.NavigationLocationProvider navigationLocationProvider;
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.

libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/impl/CarAppLocationImpl.kt renamed to libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationProvider.kt

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
package com.mapbox.androidauto.navigation.location.impl
1+
package com.mapbox.androidauto.car.location
22

33
import android.location.Location
44
import com.mapbox.androidauto.internal.logAndroidAuto
5-
import com.mapbox.androidauto.navigation.location.CarAppLocation
6-
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
5+
import com.mapbox.maps.plugin.locationcomponent.LocationConsumer
6+
import com.mapbox.maps.plugin.locationcomponent.LocationProvider
77
import com.mapbox.navigation.core.MapboxNavigation
8+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
9+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
810
import com.mapbox.navigation.core.trip.session.LocationMatcherResult
911
import com.mapbox.navigation.core.trip.session.LocationObserver
1012
import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider
@@ -13,13 +15,17 @@ import kotlinx.coroutines.delay
1315
import kotlinx.coroutines.isActive
1416
import kotlinx.coroutines.withContext
1517

16-
@ExperimentalPreviewMapboxNavigationAPI
17-
internal class CarAppLocationImpl : CarAppLocation {
18+
/**
19+
* Automatically attaches and detaches from [MapboxNavigationApp] to provide map matched locations.
20+
*/
21+
class CarLocationProvider private constructor() : MapboxNavigationObserver, LocationProvider {
1822

19-
override val navigationLocationProvider = NavigationLocationProvider()
23+
/**
24+
* Access the [NavigationLocationProvider] directly.
25+
*/
26+
val navigationLocationProvider = NavigationLocationProvider()
2027

2128
private val locationObserver = object : LocationObserver {
22-
2329
override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) {
2430
navigationLocationProvider.changePosition(
2531
locationMatcherResult.enhancedLocation,
@@ -33,16 +39,22 @@ internal class CarAppLocationImpl : CarAppLocation {
3339
}
3440

3541
override fun onAttached(mapboxNavigation: MapboxNavigation) {
36-
logAndroidAuto("CarAppLocationImpl onAttached")
3742
mapboxNavigation.registerLocationObserver(locationObserver)
3843
}
3944

4045
override fun onDetached(mapboxNavigation: MapboxNavigation) {
41-
logAndroidAuto("CarAppLocationImpl onDetached")
4246
mapboxNavigation.unregisterLocationObserver(locationObserver)
4347
}
4448

45-
override suspend fun validLocation(): Location? = withContext(Dispatchers.Unconfined) {
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+
suspend fun validLocation(): Location? = withContext(Dispatchers.Unconfined) {
4658
var location: Location? = navigationLocationProvider.lastLocation
4759
while (isActive && location == null) {
4860
delay(DELAY_MILLISECONDS)
@@ -53,6 +65,14 @@ internal class CarAppLocationImpl : CarAppLocation {
5365
}
5466

5567
companion object {
56-
const val DELAY_MILLISECONDS = 100L
68+
private const val DELAY_MILLISECONDS = 100L
69+
70+
/**
71+
* Get the registered instance or create one and register it to [MapboxNavigationApp].
72+
*/
73+
@JvmStatic
74+
fun getRegisteredInstance(): CarLocationProvider = MapboxNavigationApp
75+
.getObservers(CarLocationProvider::class).firstOrNull()
76+
?: CarLocationProvider().also { MapboxNavigationApp.registerObserver(it) }
5777
}
5878
}

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: 3 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,8 @@ class PlacesListOnMapManager(
5252
}
5353

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

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

Lines changed: 3 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,8 @@ class CarRoutePreviewRequest internal constructor(
6665
}
6766
cancelRequest()
6867

69-
val carAppLocation = MapboxNavigationApp.getObserver(CarAppLocation::class)
70-
val location = carAppLocation.navigationLocationProvider.lastLocation
68+
val carLocationProvider = CarLocationProvider.getRegisteredInstance()
69+
val location = carLocationProvider.navigationLocationProvider.lastLocation
7170
if (location == null) {
7271
logAndroidAutoFailure("CarRoutePreview.onUnknownCurrentLocation")
7372
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/test/java/com/mapbox/androidauto/car/preview/CarRouteRequestTest.kt renamed to libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequestTest.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,35 @@
11
package com.mapbox.androidauto.car.preview
22

33
import com.mapbox.androidauto.car.MapboxCarOptions
4-
import com.mapbox.androidauto.navigation.location.CarAppLocation
5-
import com.mapbox.androidauto.testing.CarAppTestRule
4+
import com.mapbox.androidauto.car.location.CarLocationProvider
65
import com.mapbox.api.directions.v5.models.RouteOptions
76
import com.mapbox.geojson.Point
87
import com.mapbox.navigation.base.formatter.UnitType
98
import com.mapbox.navigation.base.route.NavigationRoute
109
import com.mapbox.navigation.base.route.NavigationRouterCallback
1110
import com.mapbox.navigation.core.MapboxNavigation
12-
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
1311
import com.mapbox.navigation.testing.LoggingFrontendTestRule
1412
import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider
1513
import io.mockk.CapturingSlot
1614
import io.mockk.Runs
1715
import io.mockk.every
1816
import io.mockk.just
1917
import io.mockk.mockk
18+
import io.mockk.mockkObject
19+
import io.mockk.unmockkAll
2020
import io.mockk.verify
21+
import org.junit.After
2122
import org.junit.Assert.assertEquals
2223
import org.junit.Before
2324
import org.junit.Rule
2425
import org.junit.Test
2526
import java.util.Locale
2627

27-
class CarRouteRequestTest {
28+
class CarRoutePreviewRequestTest {
2829

2930
@get:Rule
3031
val loggerRule = LoggingFrontendTestRule()
3132

32-
@get:Rule
33-
val carAppTestRule = CarAppTestRule()
34-
3533
private val routeOptionsSlot = CapturingSlot<RouteOptions>()
3634
private val routerCallbackSlot = CapturingSlot<NavigationRouterCallback>()
3735
private val options: MapboxCarOptions = mockk {
@@ -59,11 +57,17 @@ class CarRouteRequestTest {
5957

6058
@Before
6159
fun setup() {
62-
every { MapboxNavigationApp.getObserver(CarAppLocation::class) } returns mockk {
60+
mockkObject(CarLocationProvider)
61+
every { CarLocationProvider.getRegisteredInstance() } returns mockk {
6362
every { navigationLocationProvider } returns locationProvider
6463
}
6564
}
6665

66+
@After
67+
fun teardown() {
68+
unmockkAll()
69+
}
70+
6771
private val carRouteRequest = CarRoutePreviewRequest(options)
6872

6973
@Test

0 commit comments

Comments
 (0)