diff --git a/libnavui-androidauto/CHANGELOG.md b/libnavui-androidauto/CHANGELOG.md index 1e673d6083b..cbb7d44ac39 100644 --- a/libnavui-androidauto/CHANGELOG.md +++ b/libnavui-androidauto/CHANGELOG.md @@ -12,6 +12,8 @@ Mapbox welcomes participation and contributions from everyone. - Deleted `RoutePreviewCarContext` in favor of `MapboxCarContext`. [#6478](https://github.com/mapbox/mapbox-navigation-android/pull/6478) - Renamed `CarSettingsStorage` to `MapboxCarStorage`. [#6478](https://github.com/mapbox/mapbox-navigation-android/pull/6478) - Deleted `ActionProvider` and `ScreenActionProvider` in favor of `MapboxActionProvider`. [#6494](https://github.com/mapbox/mapbox-navigation-android/pull/6494) +- Renamed `CarAppLocation` to `CarLocationProvider` with a `getRegisteredInstance` accessor. [#6492](https://github.com/mapbox/mapbox-navigation-android/pull/6492) +- Removed `MapboxCarApp` as it is no longer needed. Use `CarLocationProvider.getRegisteredInstance()` if needed. [#6492](https://github.com/mapbox/mapbox-navigation-android/pull/6492) ## androidauto-v0.14.0 - October 13, 2022 ### Changelog diff --git a/libnavui-androidauto/api/current.txt b/libnavui-androidauto/api/current.txt index 706500f0cff..788563d6b64 100644 --- a/libnavui-androidauto/api/current.txt +++ b/libnavui-androidauto/api/current.txt @@ -1,12 +1,6 @@ // Signature format: 3.0 package com.mapbox.androidauto { - public final class MapboxCarApp { - method public com.mapbox.androidauto.navigation.location.CarAppLocation carAppLocationService(); - method @UiThread public void setup(); - field public static final com.mapbox.androidauto.MapboxCarApp INSTANCE; - } - public final class MapboxCarNavigationManager implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { method public kotlinx.coroutines.flow.StateFlow getAutoDriveEnabledFlow(); method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); @@ -209,6 +203,21 @@ package com.mapbox.androidauto.car.feedback.ui { package com.mapbox.androidauto.car.location { + public final class CarLocationProvider implements com.mapbox.maps.plugin.locationcomponent.LocationProvider com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { + method public static com.mapbox.androidauto.car.location.CarLocationProvider getRegisteredInstance(); + method public android.location.Location? lastLocation(); + method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void registerLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer); + method public void unRegisterLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer); + method public suspend Object? validLocation(kotlin.coroutines.Continuation); + field public static final com.mapbox.androidauto.car.location.CarLocationProvider.Companion Companion; + } + + public static final class CarLocationProvider.Companion { + method public com.mapbox.androidauto.car.location.CarLocationProvider getRegisteredInstance(); + } + public final class CarLocationPuck { method public com.mapbox.maps.plugin.LocationPuck2D navigationPuck2D(android.content.Context context); field public static final com.mapbox.androidauto.car.location.CarLocationPuck INSTANCE; @@ -705,16 +714,6 @@ package com.mapbox.androidauto.navigation.audioguidance { } -package com.mapbox.androidauto.navigation.location { - - public interface CarAppLocation extends com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { - method public com.mapbox.navigation.ui.maps.location.NavigationLocationProvider getNavigationLocationProvider(); - method public suspend Object? validLocation(kotlin.coroutines.Continuation); - property public abstract com.mapbox.navigation.ui.maps.location.NavigationLocationProvider navigationLocationProvider; - } - -} - package com.mapbox.androidauto.notification { public final class MapboxCarNotification implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarApp.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarApp.kt deleted file mode 100644 index e76a7137739..00000000000 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarApp.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.mapbox.androidauto - -import androidx.annotation.UiThread -import com.mapbox.androidauto.navigation.location.CarAppLocation -import com.mapbox.androidauto.navigation.location.impl.CarAppLocationImpl -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp - -/** - * The entry point for your Mapbox Android Auto app. - */ -object MapboxCarApp { - - /** - * Location service available to the car and app. - */ - fun carAppLocationService(): CarAppLocation = - MapboxNavigationApp.getObserver(CarAppLocation::class) - - /** - * Setup android auto with defaults - */ - @UiThread - @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) - fun setup() { - if (MapboxNavigationApp.getObservers(CarAppLocation::class).isEmpty()) { - MapboxNavigationApp.registerObserver(CarAppLocationImpl()) - } - } -} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationProvider.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationProvider.kt new file mode 100644 index 00000000000..6927fe9038e --- /dev/null +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationProvider.kt @@ -0,0 +1,77 @@ +package com.mapbox.androidauto.car.location + +import android.location.Location +import com.mapbox.maps.plugin.locationcomponent.LocationConsumer +import com.mapbox.maps.plugin.locationcomponent.LocationProvider +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver +import com.mapbox.navigation.core.trip.session.LocationMatcherResult +import com.mapbox.navigation.core.trip.session.LocationObserver +import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider +import kotlinx.coroutines.channels.BufferOverflow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.firstOrNull + +/** + * Automatically attaches and detaches from [MapboxNavigationApp] to provide map matched locations. + */ +class CarLocationProvider private constructor() : MapboxNavigationObserver, LocationProvider { + + private val navigationLocationProvider = NavigationLocationProvider() + private val mutableLocation = MutableSharedFlow( + replay = 1, + onBufferOverflow = BufferOverflow.DROP_OLDEST + ) + + private val locationObserver = object : LocationObserver { + override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { + navigationLocationProvider.changePosition( + locationMatcherResult.enhancedLocation, + locationMatcherResult.keyPoints, + ) + mutableLocation.tryEmit(locationMatcherResult.enhancedLocation) + } + + override fun onNewRawLocation(rawLocation: Location) { + // no op + } + } + + override fun onAttached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.registerLocationObserver(locationObserver) + } + + override fun onDetached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.unregisterLocationObserver(locationObserver) + } + + override fun registerLocationConsumer(locationConsumer: LocationConsumer) { + navigationLocationProvider.registerLocationConsumer(locationConsumer) + } + + override fun unRegisterLocationConsumer(locationConsumer: LocationConsumer) { + navigationLocationProvider.unRegisterLocationConsumer(locationConsumer) + } + + /** + * Immediately access the last location received. + */ + fun lastLocation(): Location? = navigationLocationProvider.lastLocation + + /** + * Wait until a non-null location is received. Improves results when the app is starting. + */ + suspend fun validLocation(): Location = mutableLocation.first() + + companion object { + /** + * Get the registered instance or create one and register it to [MapboxNavigationApp]. + */ + @JvmStatic + fun getRegisteredInstance(): CarLocationProvider = MapboxNavigationApp + .getObservers(CarLocationProvider::class).firstOrNull() + ?: CarLocationProvider().also { MapboxNavigationApp.registerObserver(it) } + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationRenderer.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationRenderer.kt index 18b4f60c53c..437d13f988c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationRenderer.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/location/CarLocationRenderer.kt @@ -1,6 +1,5 @@ package com.mapbox.androidauto.car.location -import com.mapbox.androidauto.MapboxCarApp import com.mapbox.androidauto.internal.logAndroidAuto import com.mapbox.maps.MapboxExperimental import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver @@ -20,7 +19,7 @@ class CarLocationRenderer : MapboxCarMapObserver { locationPuck = CarLocationPuck.navigationPuck2D(mapboxCarMapSurface.carContext) enabled = true pulsingEnabled = true - setLocationProvider(MapboxCarApp.carAppLocationService().navigationLocationProvider) + setLocationProvider(CarLocationProvider.getRegisteredInstance()) } } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/placeslistonmap/PlacesListOnMapManager.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/placeslistonmap/PlacesListOnMapManager.kt index 6ee5993a4f5..60a0f55d680 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/placeslistonmap/PlacesListOnMapManager.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/placeslistonmap/PlacesListOnMapManager.kt @@ -1,12 +1,12 @@ package com.mapbox.androidauto.car.placeslistonmap import androidx.car.app.model.ItemList +import com.mapbox.androidauto.car.location.CarLocationProvider import com.mapbox.androidauto.car.search.PlaceRecord import com.mapbox.androidauto.internal.car.extensions.handleStyleOnAttached import com.mapbox.androidauto.internal.car.extensions.handleStyleOnDetached import com.mapbox.androidauto.internal.car.extensions.mapboxNavigationForward import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.navigation.location.CarAppLocation import com.mapbox.geojson.Feature import com.mapbox.geojson.FeatureCollection import com.mapbox.geojson.Point @@ -52,8 +52,7 @@ class PlacesListOnMapManager( } fun currentItemList(): ItemList? { - val carAppLocation = MapboxNavigationApp.getObserver(CarAppLocation::class) - val currentLocation = carAppLocation.navigationLocationProvider.lastLocation + val currentLocation = CarLocationProvider.getRegisteredInstance().lastLocation() ?: return null return placesListItemMapper?.mapToItemList( currentLocation, diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequest.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequest.kt index 54e9174f62c..e96a6ac0eae 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequest.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequest.kt @@ -2,10 +2,10 @@ package com.mapbox.androidauto.car.preview import androidx.annotation.UiThread import com.mapbox.androidauto.car.MapboxCarOptions +import com.mapbox.androidauto.car.location.CarLocationProvider import com.mapbox.androidauto.car.search.PlaceRecord import com.mapbox.androidauto.internal.logAndroidAuto import com.mapbox.androidauto.internal.logAndroidAutoFailure -import com.mapbox.androidauto.navigation.location.CarAppLocation import com.mapbox.api.directions.v5.DirectionsCriteria import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point @@ -17,7 +17,6 @@ import com.mapbox.navigation.base.route.RouterCallback import com.mapbox.navigation.base.route.RouterFailure import com.mapbox.navigation.base.route.RouterOrigin import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver /** @@ -66,8 +65,7 @@ class CarRoutePreviewRequest internal constructor( } cancelRequest() - val carAppLocation = MapboxNavigationApp.getObserver(CarAppLocation::class) - val location = carAppLocation.navigationLocationProvider.lastLocation + val location = CarLocationProvider.getRegisteredInstance().lastLocation() if (location == null) { logAndroidAutoFailure("CarRoutePreview.onUnknownCurrentLocation") callback.onUnknownCurrentLocation() diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt index 6a97d7cf10f..747954d56d8 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt +++ b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt @@ -1,6 +1,6 @@ package com.mapbox.androidauto.deeplink -import com.mapbox.androidauto.MapboxCarApp +import com.mapbox.androidauto.car.location.CarLocationProvider import com.mapbox.androidauto.car.placeslistonmap.PlacesListOnMapProvider import com.mapbox.androidauto.car.search.GetPlacesError import com.mapbox.androidauto.car.search.PlaceRecord @@ -17,8 +17,8 @@ internal class GeoDeeplinkPlacesListOnMapProvider( override suspend fun getPlaces(): Expected> { // Wait for an origin location - val origin = MapboxCarApp.carAppLocationService().validLocation() - ?.run { Point.fromLngLat(longitude, latitude) } + val origin = CarLocationProvider.getRegisteredInstance().validLocation() + .run { Point.fromLngLat(longitude, latitude) } ?: return ExpectedFactory.createError( GetPlacesError("Did not find current location.", null) ) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/CarAppLocation.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/CarAppLocation.kt deleted file mode 100644 index 795454a554f..00000000000 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/CarAppLocation.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.mapbox.androidauto.navigation.location - -import android.location.Location -import com.mapbox.androidauto.MapboxCarApp -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider - -/** - * Provides a way to access the car or app navigation location. - * Access through [MapboxCarApp.carAppLocationService]. - */ -@OptIn(ExperimentalPreviewMapboxNavigationAPI::class) -interface CarAppLocation : MapboxNavigationObserver { - - /** - * location provider that is attached to [MapboxNavigation]. - * This provider can be used as a relay for the latest map coordinates. - */ - val navigationLocationProvider: NavigationLocationProvider - - /** - * Helper function that will suspend until a location is found, - * or until the coroutine scope is no longer active. - */ - suspend fun validLocation(): Location? -} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/impl/CarAppLocationImpl.kt b/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/impl/CarAppLocationImpl.kt deleted file mode 100644 index 1c213c79f00..00000000000 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/location/impl/CarAppLocationImpl.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.mapbox.androidauto.navigation.location.impl - -import android.location.Location -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.navigation.location.CarAppLocation -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.isActive -import kotlinx.coroutines.withContext - -@ExperimentalPreviewMapboxNavigationAPI -internal class CarAppLocationImpl : CarAppLocation { - - override val navigationLocationProvider = NavigationLocationProvider() - - private val locationObserver = object : LocationObserver { - - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - } - - override fun onNewRawLocation(rawLocation: Location) { - // no op - } - } - - override fun onAttached(mapboxNavigation: MapboxNavigation) { - logAndroidAuto("CarAppLocationImpl onAttached") - mapboxNavigation.registerLocationObserver(locationObserver) - } - - override fun onDetached(mapboxNavigation: MapboxNavigation) { - logAndroidAuto("CarAppLocationImpl onDetached") - mapboxNavigation.unregisterLocationObserver(locationObserver) - } - - override suspend fun validLocation(): Location? = withContext(Dispatchers.Unconfined) { - var location: Location? = navigationLocationProvider.lastLocation - while (isActive && location == null) { - delay(DELAY_MILLISECONDS) - location = navigationLocationProvider.lastLocation - } - logAndroidAuto("CarAppLocationImpl validLocation") - return@withContext location - } - - companion object { - const val DELAY_MILLISECONDS = 100L - } -} diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRouteRequestTest.kt b/libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequestTest.kt similarity index 88% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRouteRequestTest.kt rename to libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequestTest.kt index 19b90aa3121..34a12603038 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRouteRequestTest.kt +++ b/libnavui-androidauto/src/test/java/com/mapbox/androidauto/car/preview/CarRoutePreviewRequestTest.kt @@ -1,37 +1,34 @@ package com.mapbox.androidauto.car.preview import com.mapbox.androidauto.car.MapboxCarOptions -import com.mapbox.androidauto.navigation.location.CarAppLocation -import com.mapbox.androidauto.testing.CarAppTestRule +import com.mapbox.androidauto.car.location.CarLocationProvider import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point import com.mapbox.navigation.base.formatter.UnitType import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.base.route.NavigationRouterCallback import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.testing.LoggingFrontendTestRule -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider import io.mockk.CapturingSlot import io.mockk.Runs import io.mockk.every import io.mockk.just import io.mockk.mockk +import io.mockk.mockkObject +import io.mockk.unmockkAll import io.mockk.verify +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test import java.util.Locale -class CarRouteRequestTest { +class CarRoutePreviewRequestTest { @get:Rule val loggerRule = LoggingFrontendTestRule() - @get:Rule - val carAppTestRule = CarAppTestRule() - private val routeOptionsSlot = CapturingSlot() private val routerCallbackSlot = CapturingSlot() private val options: MapboxCarOptions = mockk { @@ -40,7 +37,7 @@ class CarRouteRequestTest { } } - private val locationProvider = mockk() + private val locationProvider = mockk() private var requestCount = 0L private val mapboxNavigation = mockk { every { @@ -59,9 +56,13 @@ class CarRouteRequestTest { @Before fun setup() { - every { MapboxNavigationApp.getObserver(CarAppLocation::class) } returns mockk { - every { navigationLocationProvider } returns locationProvider - } + mockkObject(CarLocationProvider) + every { CarLocationProvider.getRegisteredInstance() } returns locationProvider + } + + @After + fun teardown() { + unmockkAll() } private val carRouteRequest = CarRoutePreviewRequest(options) @@ -69,7 +70,7 @@ class CarRouteRequestTest { @Test fun `onRoutesReady is called after successful request`() { every { - locationProvider.lastLocation + locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 @@ -90,7 +91,7 @@ class CarRouteRequestTest { @Test fun `onUnknownCurrentLocation is called when current location is null`() { - every { locationProvider.lastLocation } returns null + every { locationProvider.lastLocation() } returns null val callback: CarRoutePreviewRequestCallback = mockk(relaxUnitFun = true) val searchCoordinate = Point.fromLngLat(-121.467001, 38.568105) carRouteRequest.onAttached(mapboxNavigation) @@ -105,7 +106,7 @@ class CarRouteRequestTest { @Test fun `onSearchResultLocationUnknown is called when search result coordinate is`() { every { - locationProvider.lastLocation + locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 @@ -123,7 +124,7 @@ class CarRouteRequestTest { @Test fun `onNoRoutesFound is called when route request is canceled`() { every { - locationProvider.lastLocation + locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 @@ -144,7 +145,7 @@ class CarRouteRequestTest { @Test fun `onNoRoutesFound is called when route request fails`() { every { - locationProvider.lastLocation + locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 @@ -165,7 +166,7 @@ class CarRouteRequestTest { @Test fun `onNoRoutesFound is called when mapboxNavigation is not attached`() { every { - locationProvider.lastLocation + locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 @@ -184,7 +185,7 @@ class CarRouteRequestTest { @Test fun `should cancel previous route request`() { every { - locationProvider.lastLocation + locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 @@ -206,7 +207,7 @@ class CarRouteRequestTest { @Test fun `z level is passed to route options`() { - every { locationProvider.lastLocation } returns mockk { + every { locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 } @@ -225,7 +226,7 @@ class CarRouteRequestTest { every { build() } returns customRouteOptions } every { options.routeOptionsInterceptor.intercept(any()) } returns customRouteOptionsBuilder - every { locationProvider.lastLocation } returns mockk { + every { locationProvider.lastLocation() } returns mockk { every { longitude } returns -121.4670161 every { latitude } returns 38.5630514 } diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt b/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt index 50308cca3a1..addf2550631 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt +++ b/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt @@ -1,8 +1,7 @@ package com.mapbox.androidauto.deeplink import android.location.Location -import com.mapbox.androidauto.MapboxCarApp -import com.mapbox.androidauto.navigation.location.CarAppLocation +import com.mapbox.androidauto.car.location.CarLocationProvider import com.mapbox.api.geocoding.v5.models.CarmenFeature import com.mapbox.api.geocoding.v5.models.GeocodingResponse import com.mapbox.geojson.Point @@ -13,9 +12,10 @@ import io.mockk.every import io.mockk.mockk import io.mockk.mockkObject import io.mockk.slot -import io.mockk.unmockkObject +import io.mockk.unmockkAll import io.mockk.verify import kotlinx.coroutines.ExperimentalCoroutinesApi +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Rule import org.junit.Test @@ -36,9 +36,14 @@ class GeoDeeplinkPlacesListOnMapProviderTest { verify { geoDeeplinkGeocoding.cancel() } } + @After + fun teardown() { + unmockkAll() + } + @Test fun getPlaces() = coroutineRule.runBlockingTest { - mockkObject(MapboxCarApp) + mockkObject(CarLocationProvider) val location = mockk { every { longitude } returns -121.8544717 every { latitude } returns 45.6824467 @@ -61,10 +66,10 @@ class GeoDeeplinkPlacesListOnMapProviderTest { val response = mockk { every { features() } returns listOf(carmenFeature1, carmenFeature2) } - val carAppLocation = mockk { + val carLocationProvider = mockk { coEvery { validLocation() } returns location } - every { MapboxCarApp.carAppLocationService() } returns carAppLocation + every { CarLocationProvider.getRegisteredInstance() } returns carLocationProvider val originSlot = slot() val geoDeeplink = mockk() val geoDeeplinkGeocoding = mockk(relaxed = true) { @@ -79,6 +84,5 @@ class GeoDeeplinkPlacesListOnMapProviderTest { assertEquals(45.6824467, originSlot.captured.latitude(), 0.0001) assertEquals(-121.8544717, originSlot.captured.longitude(), 0.0001) assertEquals(2, result.size) - unmockkObject(MapboxCarApp) } } diff --git a/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/car/MainCarSession.kt b/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/car/MainCarSession.kt index d84880fc1eb..ce12114ed04 100644 --- a/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/car/MainCarSession.kt +++ b/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/car/MainCarSession.kt @@ -11,7 +11,6 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.mapbox.android.core.permissions.PermissionsManager -import com.mapbox.androidauto.MapboxCarApp import com.mapbox.androidauto.car.MapboxCarContext import com.mapbox.androidauto.car.map.widgets.compass.CarCompassSurfaceRenderer import com.mapbox.androidauto.car.map.widgets.logo.CarLogoSurfaceRenderer @@ -47,7 +46,6 @@ class MainCarSession : Session() { init { logAndroidAuto("MainCarSession constructor") - MapboxCarApp.setup() val logoSurfaceRenderer = CarLogoSurfaceRenderer() val compassSurfaceRenderer = CarCompassSurfaceRenderer() MapboxNavigationApp.attach(lifecycleOwner = this)