Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions libnavui-androidauto/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
31 changes: 15 additions & 16 deletions libnavui-androidauto/api/current.txt
Original file line number Diff line number Diff line change
@@ -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<java.lang.Boolean> getAutoDriveEnabledFlow();
method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
Expand Down Expand Up @@ -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<? super android.location.Location>);
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;
Expand Down Expand Up @@ -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<? super android.location.Location>);
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 {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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<Location>(
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) }
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -20,7 +19,7 @@ class CarLocationRenderer : MapboxCarMapObserver {
locationPuck = CarLocationPuck.navigationPuck2D(mapboxCarMapSurface.carContext)
enabled = true
pulsingEnabled = true
setLocationProvider(MapboxCarApp.carAppLocationService().navigationLocationProvider)
setLocationProvider(CarLocationProvider.getRegisteredInstance())
}
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

/**
Expand Down Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -17,8 +17,8 @@ internal class GeoDeeplinkPlacesListOnMapProvider(

override suspend fun getPlaces(): Expected<GetPlacesError, List<PlaceRecord>> {
// 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)
)
Expand Down

This file was deleted.

This file was deleted.

Loading