From a212482ddc59e325d5d1bc85b9690aab0f86830a Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 01:06:05 +0200 Subject: [PATCH 1/9] Use NN snapshot --- build.gradle | 3 ++- gradle/dependencies.gradle | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 069f28c88d0..bdb995d4132 100644 --- a/build.gradle +++ b/build.gradle @@ -64,7 +64,8 @@ allprojects { // we allow access to snapshots repo if ALLOW_SNAPSHOT_REPOSITORY is set, what means we are running on CI // with Navigation Native forced to be some snapshot version // if you need to use snapshots while development, just set `addSnapshotsRepo` to true manually - def addSnapshotsRepo = project.hasProperty('ALLOW_SNAPSHOT_REPOSITORY') ? project.property('ALLOW_SNAPSHOT_REPOSITORY') : (System.getenv("ALLOW_SNAPSHOT_REPOSITORY")?.toBoolean() ?: false) + // TODO revert conditional snapshot repository set up. + def addSnapshotsRepo = true//project.hasProperty('ALLOW_SNAPSHOT_REPOSITORY') ? project.property('ALLOW_SNAPSHOT_REPOSITORY') : (System.getenv("ALLOW_SNAPSHOT_REPOSITORY")?.toBoolean() ?: false) if (addSnapshotsRepo) { println("Snapshot repository reference added.") maven { diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 3de73c21a26..1ce9cd62591 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -13,7 +13,7 @@ ext { // version which we should use in this build def mapboxNavigatorVersion = System.getenv("FORCE_MAPBOX_NAVIGATION_NATIVE_VERSION") if (mapboxNavigatorVersion == null || mapboxNavigatorVersion == '') { - mapboxNavigatorVersion = '158.0.0' + mapboxNavigatorVersion = 'nio-adas-main-6-SNAPSHOT' } println("Navigation Native version: " + mapboxNavigatorVersion) From 71b8124c2bd1c5b978ee30f35391a20a68c0d496 Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 01:07:09 +0200 Subject: [PATCH 2/9] Sensor Data --- .../navigation/core/MapboxNavigation.kt | 15 ++ .../navigation/core/sensor/SensorData.kt | 154 ++++++++++++++++++ .../UpdateExternalSensorDataCallback.kt | 19 +++ .../internal/MapboxNativeNavigator.kt | 30 ++-- .../internal/MapboxNativeNavigatorImpl.kt | 34 +--- 5 files changed, 206 insertions(+), 46 deletions(-) create mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt create mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/UpdateExternalSensorDataCallback.kt diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt index e7f438a939f..f2b3722e2b1 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt @@ -43,6 +43,8 @@ import com.mapbox.navigation.base.trip.notification.NotificationAction import com.mapbox.navigation.base.trip.notification.TripNotification import com.mapbox.navigation.base.trip.notification.TripNotificationInterceptor import com.mapbox.navigation.core.accounts.BillingController +import com.mapbox.navigation.core.sensor.SensorData +import com.mapbox.navigation.core.sensor.UpdateExternalSensorDataCallback import com.mapbox.navigation.core.arrival.ArrivalController import com.mapbox.navigation.core.arrival.ArrivalObserver import com.mapbox.navigation.core.arrival.ArrivalProgressObserver @@ -1961,6 +1963,19 @@ class MapboxNavigation @VisibleForTesting internal constructor( ) } + /** + * Asynchronously passes in the current sensor data of the user. + * + * @param data The current sensor data of user + * @param callback Callback which is called when the async operation is completed + */ + @ExperimentalPreviewMapboxNavigationAPI + fun updateExternalSensorData(data: SensorData, callback: UpdateExternalSensorDataCallback) { + navigator.updateExternalSensorData(data.toNativeSensorData()) { + result -> callback.onResult(result) + } + } + internal fun registerOnRoutesSetStartedObserver(observer: SetNavigationRoutesStartedObserver) { directionsSession.registerSetNavigationRoutesStartedObserver(observer) } diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt new file mode 100644 index 00000000000..877db68c7a8 --- /dev/null +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt @@ -0,0 +1,154 @@ +package com.mapbox.navigation.core.sensor + +import android.os.SystemClock +import com.mapbox.bindgen.Value +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigator.SensorType + +/** + * Data obtained from sensors + */ +@ExperimentalPreviewMapboxNavigationAPI +sealed class SensorData { + + /** + * Weather condition obtained from sensors + * + * @param condition weather condition type + */ + class Weather(val condition: Condition) : SensorData() { + + /** + * Indicates whether some other object is "equal to" this one. + */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Weather + + if (condition != other.condition) return false + + return true + } + + /** + * Returns a hash code value for the object. + */ + override fun hashCode(): Int { + return condition.hashCode() + } + + /** + * Returns a string representation of the object. + */ + override fun toString(): String { + return "Weather(condition=$condition)" + } + + /** + * Weather condition type. + */ + sealed class Condition { + + /** + * Rain weather condition + */ + object Rain : Condition() + + /** + * Snow weather condition + */ + object Snow : Condition() + + /** + * Fog weather condition + */ + object Fog : Condition() + + /** + * Wet Road weather condition + */ + object WetRoad : Condition() + } + } + + /** + * Lane information obtained from sensors + * + * @param currentLaneIndex the index of the current lane. For right-hand traffic 1 is the very right lane and so on. + * Should be zero if lane information is not available + * + * @param laneCount the number of lanes + */ + class Lane(val currentLaneIndex: Int, val laneCount: Int) : SensorData() { + + /** + * Indicates whether some other object is "equal to" this one. + */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Lane + + if (currentLaneIndex != other.currentLaneIndex) return false + if (laneCount != other.laneCount) return false + + return true + } + + /** + * Returns a hash code value for the object. + */ + override fun hashCode(): Int { + var result = currentLaneIndex + result = 31 * result + laneCount + return result + } + + /** + * Returns a string representation of the object. + */ + override fun toString(): String { + return "Lane(currentLaneIndex=$currentLaneIndex, laneCount=$laneCount)" + } + } + + internal fun toNativeSensorData(): com.mapbox.navigator.SensorData { + + /** + * NN requires [com.mapbox.navigator.SensorData.monotonicTimestampNanoseconds] to be based + * on the same source as [com.mapbox.navigator.FixLocation.monotonicTimestampNanoseconds], + * which is in turn based on [Location#getElapsedRealtimeNanos()](https://developer.android.com/reference/android/location/Location#getElapsedRealtimeNanos()), + * + * @see [com.mapbox.navigation.core.navigator.toFixLocation] + */ + val elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos() + + val (type, value) = when(this) { + is Weather -> { + SensorType.WEATHER to toValue() + } + is Lane -> { + SensorType.LANE to toValue() + } + } + return com.mapbox.navigator.SensorData(type, elapsedRealtimeNanos, value) + } + + private fun Weather.toValue(): Value { + val order: Long = when(condition) { + is Weather.Condition.Rain -> 0 + is Weather.Condition.Snow -> 1 + is Weather.Condition.Fog -> 2 + is Weather.Condition.WetRoad -> 3 + } + return Value.valueOf(order) + } + + private fun Lane.toValue(): Value { + val str = "{\"currentLaneIndex\": $currentLaneIndex, \"laneCount\": $laneCount}" + return Value.valueOf(str) + } +} diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/UpdateExternalSensorDataCallback.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/UpdateExternalSensorDataCallback.kt new file mode 100644 index 00000000000..3595775ec23 --- /dev/null +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/UpdateExternalSensorDataCallback.kt @@ -0,0 +1,19 @@ +package com.mapbox.navigation.core.sensor + +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI + +/** + * Callback which is getting called to report + * [com.mapbox.navigation.core.MapboxNavigation.updateExternalSensorData] result + */ +@ExperimentalPreviewMapboxNavigationAPI +fun interface UpdateExternalSensorDataCallback { + + /** + * Called when [com.mapbox.navigation.core.MapboxNavigation.updateExternalSensorData] + * function call result is available + * + * @param result true if the sensor data was usable, false otherwise + */ + fun onResult(result: Boolean) +} diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt index 95beec77f0f..470deb520bb 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt @@ -8,26 +8,7 @@ import com.mapbox.navigation.base.options.NavigationOptions import com.mapbox.navigation.base.options.PredictiveCacheLocationOptions import com.mapbox.navigation.base.options.RoutingTilesOptions import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigator.CacheHandle -import com.mapbox.navigator.ConfigHandle -import com.mapbox.navigator.ElectronicHorizonObserver -import com.mapbox.navigator.Experimental -import com.mapbox.navigator.FallbackVersionsObserver -import com.mapbox.navigator.FixLocation -import com.mapbox.navigator.GraphAccessor -import com.mapbox.navigator.HistoryRecorderHandle -import com.mapbox.navigator.NavigationStatus -import com.mapbox.navigator.NavigatorObserver -import com.mapbox.navigator.PredictiveCacheController -import com.mapbox.navigator.RoadObjectMatcher -import com.mapbox.navigator.RoadObjectsStore -import com.mapbox.navigator.RoadObjectsStoreObserver -import com.mapbox.navigator.RouteAlternative -import com.mapbox.navigator.RouteAlternativesControllerInterface -import com.mapbox.navigator.RouterInterface -import com.mapbox.navigator.SetRoutesReason -import com.mapbox.navigator.SetRoutesResult -import com.mapbox.navigator.TilesConfig +import com.mapbox.navigator.* /** * Provides API to work with native Navigator class. Exposed for internal usage only. @@ -181,6 +162,15 @@ interface MapboxNativeNavigator { predictiveCacheLocationOptions: PredictiveCacheLocationOptions ): PredictiveCacheController + /** + * Asynchronously passes in the current sensor data of the user. + * The callback is scheduled using the `common::Scheduler` of the thread calling the `Navigator` constructor. + * + * @param data The current sensor data of user. + * @param callback Callback which is called when the async operation is completed + */ + fun updateExternalSensorData(data: SensorData, callback: UpdateExternalSensorDataCallback) + val routeAlternativesController: RouteAlternativesControllerInterface val graphAccessor: GraphAccessor? diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt index 8269d3fa3eb..58ea46b270a 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt @@ -18,32 +18,7 @@ import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.utils.internal.ThreadController import com.mapbox.navigation.utils.internal.logD import com.mapbox.navigation.utils.internal.logE -import com.mapbox.navigator.CacheDataDomain -import com.mapbox.navigator.CacheHandle -import com.mapbox.navigator.ConfigHandle -import com.mapbox.navigator.ElectronicHorizonObserver -import com.mapbox.navigator.Experimental -import com.mapbox.navigator.FallbackVersionsObserver -import com.mapbox.navigator.FixLocation -import com.mapbox.navigator.GraphAccessor -import com.mapbox.navigator.HistoryRecorderHandle -import com.mapbox.navigator.NavigationStatus -import com.mapbox.navigator.Navigator -import com.mapbox.navigator.NavigatorObserver -import com.mapbox.navigator.PredictiveCacheController -import com.mapbox.navigator.PredictiveCacheControllerOptions -import com.mapbox.navigator.PredictiveLocationTrackerOptions -import com.mapbox.navigator.RefreshRouteResult -import com.mapbox.navigator.RoadObjectMatcher -import com.mapbox.navigator.RoadObjectsStore -import com.mapbox.navigator.RoadObjectsStoreObserver -import com.mapbox.navigator.RouteAlternative -import com.mapbox.navigator.RouteAlternativesControllerInterface -import com.mapbox.navigator.RouterInterface -import com.mapbox.navigator.SetRoutesParams -import com.mapbox.navigator.SetRoutesReason -import com.mapbox.navigator.SetRoutesResult -import com.mapbox.navigator.TilesConfig +import com.mapbox.navigator.* import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import java.util.concurrent.CopyOnWriteArraySet @@ -412,4 +387,11 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { MAX_NUMBER_TILES_LOAD_PARALLEL_REQUESTS, 0 ) + + override fun updateExternalSensorData( + data: SensorData, + callback: UpdateExternalSensorDataCallback, + ) { + navigator!!.updateExternalSensorData(data, callback) + } } From 06b2678e5cabba75e5774afd26da45ef3c0a464b Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 01:23:57 +0200 Subject: [PATCH 3/9] setAdasisMessageCallback --- libnavigation-core/api/current.txt | 50 ++++++++++++++++++- .../navigation/core/MapboxNavigation.kt | 29 +++++++++-- .../navigation/core/sensor/SensorData.kt | 5 +- .../internal/MapboxNativeNavigator.kt | 10 ++++ .../internal/MapboxNativeNavigatorImpl.kt | 8 +++ 5 files changed, 95 insertions(+), 7 deletions(-) diff --git a/libnavigation-core/api/current.txt b/libnavigation-core/api/current.txt index d758e391f0d..bd2f3c66d77 100644 --- a/libnavigation-core/api/current.txt +++ b/libnavigation-core/api/current.txt @@ -82,8 +82,10 @@ package com.mapbox.navigation.core { method public void requestRoadGraphDataUpdate(com.mapbox.navigation.core.RoadGraphDataUpdateCallback callback); method @Deprecated public long requestRoutes(com.mapbox.api.directions.v5.models.RouteOptions routeOptions, com.mapbox.navigation.base.route.RouterCallback routesRequestCallback); method public long requestRoutes(com.mapbox.api.directions.v5.models.RouteOptions routeOptions, com.mapbox.navigation.base.route.NavigationRouterCallback callback); + method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public void resetAdasisMessageCallback(); method @Deprecated public void resetTripSession(); method public void resetTripSession(com.mapbox.navigation.core.TripSessionResetCallback callback); + method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public void setAdasisMessageCallback(com.mapbox.navigator.ADASISv2MessageCallback callback, com.mapbox.navigator.AdasisConfig adasisConfig); method public void setArrivalController(com.mapbox.navigation.core.arrival.ArrivalController? arrivalController = com.mapbox.navigation.core.arrival.AutoArrivalController()); method public void setArrivalController(); method public void setNavigationRoutes(java.util.List routes, int initialLegIndex = 0, com.mapbox.navigation.core.RoutesSetCallback? callback = null); @@ -120,6 +122,7 @@ package com.mapbox.navigation.core { method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public void unregisterRoutesPreviewObserver(com.mapbox.navigation.core.preview.RoutesPreviewObserver observer); method public void unregisterTripSessionStateObserver(com.mapbox.navigation.core.trip.session.TripSessionStateObserver tripSessionStateObserver); method public void unregisterVoiceInstructionsObserver(com.mapbox.navigation.core.trip.session.VoiceInstructionsObserver voiceInstructionsObserver); + method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public void updateExternalSensorData(com.mapbox.navigation.core.sensor.SensorData data, com.mapbox.navigation.core.sensor.UpdateExternalSensorDataCallback callback); property public final com.mapbox.navigation.core.EtcGateApi etcGateAPI; property public final com.mapbox.navigator.Experimental experimental; property public final com.mapbox.navigation.core.trip.session.eh.GraphAccessor graphAccessor; @@ -950,7 +953,8 @@ package com.mapbox.navigation.core.routeoptions { package com.mapbox.navigation.core.routerefresh { - @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class RouteRefreshController { + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class RouteRefreshController implements com.mapbox.navigation.core.directions.session.RoutesObserver { + method public void onRoutesChanged(com.mapbox.navigation.core.directions.session.RoutesUpdatedResult result); method public void pauseRouteRefreshes(); method public void registerRouteRefreshStateObserver(com.mapbox.navigation.core.routerefresh.RouteRefreshStatesObserver routeRefreshStatesObserver); method public void requestImmediateRouteRefresh(); @@ -983,6 +987,50 @@ package com.mapbox.navigation.core.routerefresh { } +package com.mapbox.navigation.core.sensor { + + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public abstract sealed class SensorData { + } + + public static final class SensorData.Lane extends com.mapbox.navigation.core.sensor.SensorData { + ctor public SensorData.Lane(int currentLaneIndex, int laneCount); + method public int getCurrentLaneIndex(); + method public int getLaneCount(); + property public final int currentLaneIndex; + property public final int laneCount; + } + + public static final class SensorData.Weather extends com.mapbox.navigation.core.sensor.SensorData { + ctor public SensorData.Weather(com.mapbox.navigation.core.sensor.SensorData.Weather.Condition condition); + method public com.mapbox.navigation.core.sensor.SensorData.Weather.Condition getCondition(); + property public final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition condition; + } + + public abstract static sealed class SensorData.Weather.Condition { + } + + public static final class SensorData.Weather.Condition.Fog extends com.mapbox.navigation.core.sensor.SensorData.Weather.Condition { + field public static final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition.Fog INSTANCE; + } + + public static final class SensorData.Weather.Condition.Rain extends com.mapbox.navigation.core.sensor.SensorData.Weather.Condition { + field public static final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition.Rain INSTANCE; + } + + public static final class SensorData.Weather.Condition.Snow extends com.mapbox.navigation.core.sensor.SensorData.Weather.Condition { + field public static final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition.Snow INSTANCE; + } + + public static final class SensorData.Weather.Condition.WetRoad extends com.mapbox.navigation.core.sensor.SensorData.Weather.Condition { + field public static final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition.WetRoad INSTANCE; + } + + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public fun interface UpdateExternalSensorDataCallback { + method public void onResult(boolean result); + } + +} + package com.mapbox.navigation.core.telemetry { public final class MapboxNavigationTelemetryKt { diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt index f2b3722e2b1..234400c70fc 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt @@ -43,8 +43,6 @@ import com.mapbox.navigation.base.trip.notification.NotificationAction import com.mapbox.navigation.base.trip.notification.TripNotification import com.mapbox.navigation.base.trip.notification.TripNotificationInterceptor import com.mapbox.navigation.core.accounts.BillingController -import com.mapbox.navigation.core.sensor.SensorData -import com.mapbox.navigation.core.sensor.UpdateExternalSensorDataCallback import com.mapbox.navigation.core.arrival.ArrivalController import com.mapbox.navigation.core.arrival.ArrivalObserver import com.mapbox.navigation.core.arrival.ArrivalProgressObserver @@ -93,6 +91,8 @@ import com.mapbox.navigation.core.routealternatives.RouteAlternativesRequestCall import com.mapbox.navigation.core.routeoptions.RouteOptionsUpdater import com.mapbox.navigation.core.routerefresh.RouteRefreshController import com.mapbox.navigation.core.routerefresh.RouteRefreshControllerProvider +import com.mapbox.navigation.core.sensor.SensorData +import com.mapbox.navigation.core.sensor.UpdateExternalSensorDataCallback import com.mapbox.navigation.core.telemetry.MapboxNavigationTelemetry import com.mapbox.navigation.core.telemetry.events.FeedbackEvent import com.mapbox.navigation.core.telemetry.events.FeedbackHelper @@ -136,6 +136,8 @@ import com.mapbox.navigation.utils.internal.logD import com.mapbox.navigation.utils.internal.logE import com.mapbox.navigation.utils.internal.logI import com.mapbox.navigation.utils.internal.monitorChannelWithException +import com.mapbox.navigator.ADASISv2MessageCallback +import com.mapbox.navigator.AdasisConfig import com.mapbox.navigator.AlertsServiceOptions import com.mapbox.navigator.ConfigHandle import com.mapbox.navigator.ElectronicHorizonOptions @@ -1972,10 +1974,31 @@ class MapboxNavigation @VisibleForTesting internal constructor( @ExperimentalPreviewMapboxNavigationAPI fun updateExternalSensorData(data: SensorData, callback: UpdateExternalSensorDataCallback) { navigator.updateExternalSensorData(data.toNativeSensorData()) { - result -> callback.onResult(result) + callback.onResult(it) } } + /** + * TODO use platform types? + * + * Sets a callback for ADASIS messages + * + * @param callback Message callback + * @param adasisConfig Adasis config + */ + @ExperimentalPreviewMapboxNavigationAPI + fun setAdasisMessageCallback(callback: ADASISv2MessageCallback, adasisConfig: AdasisConfig) { + navigator.setAdasisMessageCallback(callback, adasisConfig) + } + + /** + * Resets a callback for ADASIS messages + */ + @ExperimentalPreviewMapboxNavigationAPI + fun resetAdasisMessageCallback() { + navigator.resetAdasisMessageCallback() + } + internal fun registerOnRoutesSetStartedObserver(observer: SetNavigationRoutesStartedObserver) { directionsSession.registerSetNavigationRoutesStartedObserver(observer) } diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt index 877db68c7a8..64f27d4d57d 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt @@ -116,7 +116,6 @@ sealed class SensorData { } internal fun toNativeSensorData(): com.mapbox.navigator.SensorData { - /** * NN requires [com.mapbox.navigator.SensorData.monotonicTimestampNanoseconds] to be based * on the same source as [com.mapbox.navigator.FixLocation.monotonicTimestampNanoseconds], @@ -126,7 +125,7 @@ sealed class SensorData { */ val elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos() - val (type, value) = when(this) { + val (type, value) = when (this) { is Weather -> { SensorType.WEATHER to toValue() } @@ -138,7 +137,7 @@ sealed class SensorData { } private fun Weather.toValue(): Value { - val order: Long = when(condition) { + val order: Long = when (condition) { is Weather.Condition.Rain -> 0 is Weather.Condition.Snow -> 1 is Weather.Condition.Fog -> 2 diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt index 470deb520bb..630212217fb 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt @@ -171,6 +171,16 @@ interface MapboxNativeNavigator { */ fun updateExternalSensorData(data: SensorData, callback: UpdateExternalSensorDataCallback) + /** + * Sets a callback for ADASIS messages + */ + fun setAdasisMessageCallback(callback: ADASISv2MessageCallback, adasisConfig: AdasisConfig) + + /** + * Resets a callback for ADASIS messages + */ + fun resetAdasisMessageCallback() + val routeAlternativesController: RouteAlternativesControllerInterface val graphAccessor: GraphAccessor? diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt index 58ea46b270a..2192becf220 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt @@ -394,4 +394,12 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { ) { navigator!!.updateExternalSensorData(data, callback) } + + override fun setAdasisMessageCallback(callback: ADASISv2MessageCallback, adasisConfig: AdasisConfig) { + navigator!!.setAdasisMessageCallback(callback, adasisConfig) + } + + override fun resetAdasisMessageCallback() { + navigator!!.resetAdasisMessageCallback() + } } From aa0179ee7d4769b58b3eea5c901f622b5ababa3b Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 01:41:19 +0200 Subject: [PATCH 4/9] Hardcode version name --- gradle/artifact-settings.gradle | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gradle/artifact-settings.gradle b/gradle/artifact-settings.gradle index 265023dc4ab..d75e211c859 100644 --- a/gradle/artifact-settings.gradle +++ b/gradle/artifact-settings.gradle @@ -16,13 +16,14 @@ ext { } def getVersionName() { - if (project.hasProperty('VERSION_NAME')) { - return project.property('VERSION_NAME') - } - def prefix = project.ext.releaseTagPrefix - def cmd = ["git", "describe", "--tag", "--match", "$prefix*", "--abbrev=0"] - def version = cmd.execute().text - return project.ext.snapshot ? getSnapshotVersion(version) : getReleaseVersion(version) +// if (project.hasProperty('VERSION_NAME')) { +// return project.property('VERSION_NAME') +// } +// def prefix = project.ext.releaseTagPrefix +// def cmd = ["git", "describe", "--tag", "--match", "$prefix*", "--abbrev=0"] +// def version = cmd.execute().text +// return project.ext.snapshot ? getSnapshotVersion(version) : getReleaseVersion(version) + return "2.17.0-adas-preview-SNAPSHOT" } def getReleaseVersion(String version) { From 69e3cfaf127364da97900e0bcd57aa63a6d8d5ad Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 09:49:41 +0200 Subject: [PATCH 5/9] Remove WetRoad weather condition type --- libnavigation-core/api/current.txt | 4 ---- .../java/com/mapbox/navigation/core/sensor/SensorData.kt | 6 ------ 2 files changed, 10 deletions(-) diff --git a/libnavigation-core/api/current.txt b/libnavigation-core/api/current.txt index bd2f3c66d77..1b5783aa28e 100644 --- a/libnavigation-core/api/current.txt +++ b/libnavigation-core/api/current.txt @@ -1021,10 +1021,6 @@ package com.mapbox.navigation.core.sensor { field public static final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition.Snow INSTANCE; } - public static final class SensorData.Weather.Condition.WetRoad extends com.mapbox.navigation.core.sensor.SensorData.Weather.Condition { - field public static final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition.WetRoad INSTANCE; - } - @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public fun interface UpdateExternalSensorDataCallback { method public void onResult(boolean result); } diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt index 64f27d4d57d..289ec1fb78d 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt @@ -65,11 +65,6 @@ sealed class SensorData { * Fog weather condition */ object Fog : Condition() - - /** - * Wet Road weather condition - */ - object WetRoad : Condition() } } @@ -141,7 +136,6 @@ sealed class SensorData { is Weather.Condition.Rain -> 0 is Weather.Condition.Snow -> 1 is Weather.Condition.Fog -> 2 - is Weather.Condition.WetRoad -> 3 } return Value.valueOf(order) } From 4efd4f598048cab8fe1520e314d14c22c907abb7 Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 09:53:11 +0200 Subject: [PATCH 6/9] Fix codestyle --- .../internal/MapboxNativeNavigator.kt | 25 ++++++++++++++- .../internal/MapboxNativeNavigatorImpl.kt | 31 ++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt index 630212217fb..1c1e8f72b72 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigator.kt @@ -8,7 +8,30 @@ import com.mapbox.navigation.base.options.NavigationOptions import com.mapbox.navigation.base.options.PredictiveCacheLocationOptions import com.mapbox.navigation.base.options.RoutingTilesOptions import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigator.* +import com.mapbox.navigator.ADASISv2MessageCallback +import com.mapbox.navigator.AdasisConfig +import com.mapbox.navigator.CacheHandle +import com.mapbox.navigator.ConfigHandle +import com.mapbox.navigator.ElectronicHorizonObserver +import com.mapbox.navigator.Experimental +import com.mapbox.navigator.FallbackVersionsObserver +import com.mapbox.navigator.FixLocation +import com.mapbox.navigator.GraphAccessor +import com.mapbox.navigator.HistoryRecorderHandle +import com.mapbox.navigator.NavigationStatus +import com.mapbox.navigator.NavigatorObserver +import com.mapbox.navigator.PredictiveCacheController +import com.mapbox.navigator.RoadObjectMatcher +import com.mapbox.navigator.RoadObjectsStore +import com.mapbox.navigator.RoadObjectsStoreObserver +import com.mapbox.navigator.RouteAlternative +import com.mapbox.navigator.RouteAlternativesControllerInterface +import com.mapbox.navigator.RouterInterface +import com.mapbox.navigator.SensorData +import com.mapbox.navigator.SetRoutesReason +import com.mapbox.navigator.SetRoutesResult +import com.mapbox.navigator.TilesConfig +import com.mapbox.navigator.UpdateExternalSensorDataCallback /** * Provides API to work with native Navigator class. Exposed for internal usage only. diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt index 2192becf220..1143d6c0c43 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/internal/MapboxNativeNavigatorImpl.kt @@ -18,7 +18,36 @@ import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.utils.internal.ThreadController import com.mapbox.navigation.utils.internal.logD import com.mapbox.navigation.utils.internal.logE -import com.mapbox.navigator.* +import com.mapbox.navigator.ADASISv2MessageCallback +import com.mapbox.navigator.AdasisConfig +import com.mapbox.navigator.CacheDataDomain +import com.mapbox.navigator.CacheHandle +import com.mapbox.navigator.ConfigHandle +import com.mapbox.navigator.ElectronicHorizonObserver +import com.mapbox.navigator.Experimental +import com.mapbox.navigator.FallbackVersionsObserver +import com.mapbox.navigator.FixLocation +import com.mapbox.navigator.GraphAccessor +import com.mapbox.navigator.HistoryRecorderHandle +import com.mapbox.navigator.NavigationStatus +import com.mapbox.navigator.Navigator +import com.mapbox.navigator.NavigatorObserver +import com.mapbox.navigator.PredictiveCacheController +import com.mapbox.navigator.PredictiveCacheControllerOptions +import com.mapbox.navigator.PredictiveLocationTrackerOptions +import com.mapbox.navigator.RefreshRouteResult +import com.mapbox.navigator.RoadObjectMatcher +import com.mapbox.navigator.RoadObjectsStore +import com.mapbox.navigator.RoadObjectsStoreObserver +import com.mapbox.navigator.RouteAlternative +import com.mapbox.navigator.RouteAlternativesControllerInterface +import com.mapbox.navigator.RouterInterface +import com.mapbox.navigator.SensorData +import com.mapbox.navigator.SetRoutesParams +import com.mapbox.navigator.SetRoutesReason +import com.mapbox.navigator.SetRoutesResult +import com.mapbox.navigator.TilesConfig +import com.mapbox.navigator.UpdateExternalSensorDataCallback import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import java.util.concurrent.CopyOnWriteArraySet From cb8e205e0b74a46fc663519664f79f8ad09f2274 Mon Sep 17 00:00:00 2001 From: dzmitryfomchyn Date: Thu, 28 Sep 2023 12:21:32 +0200 Subject: [PATCH 7/9] Remove sealed classes --- libnavigation-core/api/current.txt | 4 ++-- .../java/com/mapbox/navigation/core/sensor/SensorData.kt | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/libnavigation-core/api/current.txt b/libnavigation-core/api/current.txt index 1b5783aa28e..f4671c6cb9c 100644 --- a/libnavigation-core/api/current.txt +++ b/libnavigation-core/api/current.txt @@ -989,7 +989,7 @@ package com.mapbox.navigation.core.routerefresh { package com.mapbox.navigation.core.sensor { - @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public abstract sealed class SensorData { + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public abstract class SensorData { } public static final class SensorData.Lane extends com.mapbox.navigation.core.sensor.SensorData { @@ -1006,7 +1006,7 @@ package com.mapbox.navigation.core.sensor { property public final com.mapbox.navigation.core.sensor.SensorData.Weather.Condition condition; } - public abstract static sealed class SensorData.Weather.Condition { + public abstract static class SensorData.Weather.Condition { } public static final class SensorData.Weather.Condition.Fog extends com.mapbox.navigation.core.sensor.SensorData.Weather.Condition { diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt index 289ec1fb78d..330fab032f9 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt @@ -9,7 +9,7 @@ import com.mapbox.navigator.SensorType * Data obtained from sensors */ @ExperimentalPreviewMapboxNavigationAPI -sealed class SensorData { +abstract class SensorData internal constructor() { /** * Weather condition obtained from sensors @@ -49,7 +49,7 @@ sealed class SensorData { /** * Weather condition type. */ - sealed class Condition { + abstract class Condition internal constructor() { /** * Rain weather condition @@ -127,6 +127,7 @@ sealed class SensorData { is Lane -> { SensorType.LANE to toValue() } + else -> error("Unsupported type: $javaClass") } return com.mapbox.navigator.SensorData(type, elapsedRealtimeNanos, value) } @@ -136,6 +137,7 @@ sealed class SensorData { is Weather.Condition.Rain -> 0 is Weather.Condition.Snow -> 1 is Weather.Condition.Fog -> 2 + else -> error("Unsupported weather condition type: $condition") } return Value.valueOf(order) } From 76a12898ba9fb49984fe3abf3df633919213416e Mon Sep 17 00:00:00 2001 From: Dzina Date: Thu, 28 Sep 2023 13:26:00 +0300 Subject: [PATCH 8/9] add NN dependency as API --- libnavigation-base/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 60b0c36ebcb..5257cb280a6 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -31,7 +31,7 @@ dependencies { api dependenciesList.mapboxSdkDirectionsModels api dependenciesList.mapboxSdkServicesCore // Navigator - implementation dependenciesList.mapboxNavigator + api dependenciesList.mapboxNavigator implementation dependenciesList.androidXAnnotation implementation dependenciesList.androidXCoreKtx From 582a7bb79bc35b308f1f7dea4c808192fd7f8e22 Mon Sep 17 00:00:00 2001 From: Dzina Date: Thu, 28 Sep 2023 13:30:13 +0300 Subject: [PATCH 9/9] add example --- .../examples/core/MapboxNavigationActivity.kt | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt index 84ea81b9275..c6d49cfad60 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt @@ -21,6 +21,7 @@ import com.mapbox.maps.plugin.LocationPuck2D import com.mapbox.maps.plugin.animation.camera import com.mapbox.maps.plugin.gestures.gestures import com.mapbox.maps.plugin.locationcomponent.location +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.base.TimeFormat import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions @@ -70,6 +71,20 @@ import com.mapbox.navigation.ui.voice.model.SpeechError import com.mapbox.navigation.ui.voice.model.SpeechValue import com.mapbox.navigation.ui.voice.model.SpeechVolume import com.mapbox.navigation.utils.internal.logD +import com.mapbox.navigator.ADASISv2Message +import com.mapbox.navigator.ADASISv2MessageCallback +import com.mapbox.navigator.AdasisConfig +import com.mapbox.navigator.AdasisConfigCycleTimes +import com.mapbox.navigator.AdasisConfigDataSending +import com.mapbox.navigator.AdasisConfigMessageOptions +import com.mapbox.navigator.AdasisConfigPathLevelOptions +import com.mapbox.navigator.AdasisConfigPathsConfigs +import com.mapbox.navigator.AdasisConfigProfilelongTypeOptions +import com.mapbox.navigator.AdasisConfigProfileshortTypeOptions +import com.mapbox.navigator.Profilelong +import com.mapbox.navigator.Profileshort +import com.mapbox.navigator.Segment +import com.mapbox.navigator.Stub import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -268,6 +283,7 @@ class MapboxNavigationActivity : AppCompatActivity() { logD("sessionId=${mapboxNavigation.getNavigationSessionState().sessionId}", LOG_CATEGORY) } + @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) @SuppressLint("MissingPermission") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -429,6 +445,37 @@ class MapboxNavigationActivity : AppCompatActivity() { // start the trip session to being receiving location updates in free drive // and later when a route is set, also receiving route progress updates mapboxNavigation.startTripSession() + mapboxNavigation.setAdasisMessageCallback( + object : ADASISv2MessageCallback { + override fun run(message: ADASISv2Message) { + println("[Adasis] message: ${message.toJson()}") + } + }, + AdasisConfig( + AdasisConfigCycleTimes(), + AdasisConfigDataSending(), + AdasisConfigPathsConfigs( + AdasisConfigPathLevelOptions( + Stub(AdasisConfigMessageOptions()), + Segment(AdasisConfigMessageOptions()), + Profileshort(AdasisConfigMessageOptions(), AdasisConfigProfileshortTypeOptions()), + Profilelong(AdasisConfigMessageOptions(), AdasisConfigProfilelongTypeOptions()) + ), + AdasisConfigPathLevelOptions( + Stub(AdasisConfigMessageOptions()), + Segment(AdasisConfigMessageOptions()), + Profileshort(AdasisConfigMessageOptions(), AdasisConfigProfileshortTypeOptions()), + Profilelong(AdasisConfigMessageOptions(), AdasisConfigProfilelongTypeOptions()) + ), + AdasisConfigPathLevelOptions( + Stub(AdasisConfigMessageOptions()), + Segment(AdasisConfigMessageOptions()), + Profileshort(AdasisConfigMessageOptions(), AdasisConfigProfileshortTypeOptions()), + Profilelong(AdasisConfigMessageOptions(), AdasisConfigProfilelongTypeOptions()) + ), + ) + ) + ) } override fun onStart() {