From d2e847eb7093c8c45c0c2c463e8825744d4ed89d Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 25 Oct 2019 13:52:23 +0300 Subject: [PATCH 01/75] Moved classes to base modules --- .../mapbox/navigation/route/offboard/MapboxOffboardRouter.kt | 4 ++++ .../src/main/java/com/mapbox/navigation/base/route/Router.kt | 1 + .../com/mapbox/navigation/route}/NavigationRouteWaypoint.kt | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) rename {libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation => linavigation-base/src/main/java/com/mapbox/navigation/route}/NavigationRouteWaypoint.kt (72%) diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index 1ff18714492..761d0d55b6c 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -47,6 +47,10 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: }) } + override fun getRoute(origin: Point, waypoints: List, listener: Router.RouteListener) { + + } + override fun cancel() { navigationRoute?.cancelCall() navigationRoute = null diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt index f7a339b7f19..ee56314ece8 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt @@ -18,3 +18,4 @@ interface Router { fun onFailure(throwable: Throwable) } } + diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt similarity index 72% rename from libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt rename to linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt index 6d5f5620cae..da35af50285 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt +++ b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt @@ -1,4 +1,4 @@ -package com.mapbox.services.android.navigation.v5.navigation +package com.mapbox.navigation.route import com.mapbox.geojson.Point From 9f23835c16039a9e6d3a108cddd261c211c2764e Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 25 Oct 2019 18:54:53 +0300 Subject: [PATCH 02/75] moved classes to another module --- .../ui/navigation/ExampleRouteFinder.kt | 4 ++-- .../ui/navigation/OfflineRouteFinder.kt | 4 ++-- .../navigation/ui/v5/NavigationView.java | 1 + .../navigation/ui/v5/NavigationViewModel.java | 1 + .../ui/v5/summary/SummaryBottomSheet.java | 1 + .../navigation/v5/navigation/OfflineRoute.kt | 6 +++--- .../navigation/v5/route/RouteFetcher.kt | 18 +++++++++--------- .../navigation/NavigationRouteCallbackTest.kt | 0 .../v5/navigation/OfflineRouteTest.kt | 4 ++-- .../navigation/v5/route/RouteFetcherTest.kt | 8 ++++---- libdirections-offboard/build.gradle | 2 ++ .../route/offboard/MapboxOffboardRouter.kt | 1 - .../route/offboard}/NavigationRoute.kt | 5 +++-- .../base/route/NavigationRouteEventListener.kt | 0 .../base/route}/extensions/LocaleEx.kt | 2 +- 15 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationRouteCallbackTest.kt rename {libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation => libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard}/NavigationRoute.kt (99%) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt rename {libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils => libnavigation-base/src/main/java/com/mapbox/navigation/base/route}/extensions/LocaleEx.kt (90%) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt index dc951968d44..5c1e5420910 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt @@ -4,7 +4,7 @@ import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsResponse import com.mapbox.geojson.Point import com.mapbox.services.android.navigation.testapp.NavigationApplication -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute +import com.mapbox.navigation.route.offboard.NavigationRoute import retrofit2.Call import retrofit2.Callback import retrofit2.Response @@ -36,7 +36,7 @@ class ExampleRouteFinder( private fun find(location: Location, destination: Point) { val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = location.bearing.toDouble() - NavigationRoute.builder(NavigationApplication.instance) + com.mapbox.navigation.route.offboard.NavigationRoute.builder(NavigationApplication.instance) .accessToken(accessToken) .origin(origin, bearing, BEARING_TOLERANCE) .profile(profile) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt index 6303cc9c2a3..9f4f6e30245 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt @@ -9,7 +9,7 @@ import com.mapbox.mapboxsdk.Mapbox import com.mapbox.services.android.navigation.testapp.NavigationApplication import com.mapbox.services.android.navigation.testapp.R import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute +import com.mapbox.navigation.route.offboard.NavigationRoute import com.mapbox.services.android.navigation.v5.navigation.OfflineError import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute import com.mapbox.services.android.navigation.v5.navigation.OnOfflineRouteFoundCallback @@ -81,7 +81,7 @@ class OfflineRouteFinder( private fun buildOfflineRoute(location: Location, destination: Point): OfflineRoute { val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = location.bearing.toDouble() - return NavigationRoute.builder(NavigationApplication.instance) + return com.mapbox.navigation.route.offboard.NavigationRoute.builder(NavigationApplication.instance) .origin(origin, bearing, BEARING_TOLERANCE) .destination(destination) .accessToken(Mapbox.getAccessToken()!!) // OZ: Ok to use "!!". This code should crash if getAccessToken() returns null diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java index ee61c4874f0..33b877c3670 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java @@ -29,6 +29,7 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; +import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.NavigationCamera; import com.mapbox.services.android.navigation.ui.v5.instruction.ImageCreator; import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionView; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java index f66f214a96c..eff4eacc3c3 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java @@ -17,6 +17,7 @@ import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.offline.OfflineManager; +import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.DynamicCamera; import com.mapbox.services.android.navigation.ui.v5.feedback.FeedbackItem; import com.mapbox.services.android.navigation.ui.v5.instruction.BannerInstructionModel; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java index 36858af49c8..0d7ff54818e 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java @@ -15,6 +15,7 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.OnLifecycleEvent; +import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.NavigationViewModel; import com.mapbox.services.android.navigation.ui.v5.R; import com.mapbox.services.android.navigation.ui.v5.ThemeSwitcher; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt index 02efdaafb82..fb17773d9a7 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt @@ -13,7 +13,7 @@ import okhttp3.HttpUrl * could be set in order for an offline navigation session to successfully begin. */ class OfflineRoute private constructor( - private val onlineRoute: NavigationRoute, + private val onlineRoute: com.mapbox.navigation.route.offboard.NavigationRoute, bicycleType: OfflineCriteria.BicycleType?, private val cyclingSpeed: Float?, private val cyclewayBias: Float?, @@ -46,7 +46,7 @@ class OfflineRoute private constructor( * @return a [Builder] object for creating this object */ @JvmStatic - fun builder(onlineRouteBuilder: NavigationRoute.Builder): Builder { + fun builder(onlineRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder): Builder { return Builder(onlineRouteBuilder) } } @@ -118,7 +118,7 @@ class OfflineRoute private constructor( private fun obtainRouteFor(response: String): DirectionsRoute? = DirectionsResponse.fromJson(response).routes().firstOrNull() - class Builder internal constructor(private val navigationRouteBuilder: NavigationRoute.Builder) { + class Builder internal constructor(private val navigationRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder) { private var bicycleType: OfflineCriteria.BicycleType? = null private var cyclingSpeed: Float? = null private var cyclewayBias: Float? = null diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt index 09c1dfc4ebe..d4d45066275 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt @@ -25,7 +25,7 @@ class RouteFetcher context: Context, private val accessToken: String, private val routeUtils: RouteUtils = RouteUtils(), - private var navigationRoute: NavigationRoute? = null + private var navigationRoute: com.mapbox.navigation.route.offboard.NavigationRoute? = null ) { companion object { @@ -100,13 +100,13 @@ class RouteFetcher fun buildRequestFrom( location: Location, routeProgress: RouteProgress - ): NavigationRoute.Builder? { + ): com.mapbox.navigation.route.offboard.NavigationRoute.Builder? { val context = contextWeakReference.get() ?: return null val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = if (location.hasBearing()) location.bearing.toDouble() else null val routeOptions = routeProgress.directionsRoute()?.routeOptions() - val navigationRouteBuilder = NavigationRoute.builder(context) + val navigationRouteBuilder = com.mapbox.navigation.route.offboard.NavigationRoute.builder(context) .accessToken(accessToken) .origin(origin, bearing, BEARING_TOLERANCE) routeOptions?.let { options -> @@ -131,7 +131,7 @@ class RouteFetcher * * @param builder to be executed */ - fun findRouteWith(builder: NavigationRoute.Builder?) { + fun findRouteWith(builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder?) { builder?.let { navigationRouteBuilder -> navigationRoute = navigationRouteBuilder.build() navigationRoute?.getRoute(directionsResponseCallback) @@ -147,7 +147,7 @@ class RouteFetcher private fun addDestination( remainingWaypoints: MutableList, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { if (remainingWaypoints.isNotEmpty()) { builder.destination(retrieveDestinationWaypoint(remainingWaypoints)) @@ -161,7 +161,7 @@ class RouteFetcher private fun addWaypoints( remainingCoordinates: List, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { if (remainingCoordinates.isNotEmpty()) { for (coordinate in remainingCoordinates) { @@ -172,7 +172,7 @@ class RouteFetcher private fun addWaypointIndices( routeProgress: RouteProgress, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { val remainingWaypointIndices: IntArray? = routeUtils.calculateRemainingWaypointIndices(routeProgress) if (remainingWaypointIndices != null && remainingWaypointIndices.isNotEmpty()) { @@ -182,7 +182,7 @@ class RouteFetcher private fun addWaypointNames( progress: RouteProgress, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { val remainingWaypointNames: Array? = routeUtils.calculateRemainingWaypointNames(progress) remainingWaypointNames?.let { @@ -192,7 +192,7 @@ class RouteFetcher private fun addApproaches( progress: RouteProgress, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { val remainingApproaches: Array? = routeUtils.calculateRemainingApproaches(progress) remainingApproaches?.let { diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationRouteCallbackTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationRouteCallbackTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt index dd609876a02..d296f01d035 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt @@ -110,10 +110,10 @@ class OfflineRouteTest { assertTrue(offlineUrlDecoded.contains("break;through;;break")) } - private fun provideOnlineRouteBuilder(): NavigationRoute.Builder { + private fun provideOnlineRouteBuilder(): com.mapbox.navigation.route.offboard.NavigationRoute.Builder { val context = mockk() every { context.inferDeviceLocale() } returns Locale.US - return NavigationRoute.builder(context) + return com.mapbox.navigation.route.offboard.NavigationRoute.builder(context) .accessToken("pk.XXX") .origin(Point.fromLngLat(1.0, 2.0)) .addWaypoint(Point.fromLngLat(3.0, 2.0)) diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt index adcb60e0a7c..f449bd5f8a1 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt @@ -7,7 +7,7 @@ import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute +import com.mapbox.navigation.route.offboard.NavigationRoute import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress import com.mapbox.services.android.navigation.v5.utils.RouteUtils import io.mockk.every @@ -26,7 +26,7 @@ class RouteFetcherTest { @Test fun cancelRouteCall_cancelsWithNonNullNavigationRoute() { val context = mockk(relaxed = true) - val navigationRoute = mockk(relaxed = true) + val navigationRoute = mockk(relaxed = true) val routeUtils = mockk(relaxed = true) val routeFetcher = RouteFetcher(context, "pk.xx", routeUtils, navigationRoute) @@ -53,8 +53,8 @@ class RouteFetcherTest { @Test fun findRouteWith_callNavigationRoute() { val context = mockk(relaxed = true) - val navigationRoute = mockk(relaxed = true) - val builder = mockk(relaxed = true) + val navigationRoute = mockk(relaxed = true) + val builder = mockk(relaxed = true) every { builder.build() } returns navigationRoute val routeUtils = mockk(relaxed = true) val routeFetcher = RouteFetcher(context, "pk.xx", routeUtils, navigationRoute) diff --git a/libdirections-offboard/build.gradle b/libdirections-offboard/build.gradle index eff0796ce0f..0dab8f4a878 100644 --- a/libdirections-offboard/build.gradle +++ b/libdirections-offboard/build.gradle @@ -22,6 +22,8 @@ dependencies { implementation project(':libnavigation-util') api project(':libnavigation-base') + api(project(':libnavigation-base')) + // Support implementation dependenciesList.supportAnnotation diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index 761d0d55b6c..c952ce29ade 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -48,7 +48,6 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: } override fun getRoute(origin: Point, waypoints: List, listener: Router.RouteListener) { - } override fun cancel() { diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt similarity index 99% rename from libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt rename to libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt index 00722b16a73..af62d633075 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt @@ -1,4 +1,4 @@ -package com.mapbox.services.android.navigation.v5.navigation +package com.mapbox.navigation.route.offboard import android.content.Context import androidx.annotation.FloatRange @@ -118,7 +118,8 @@ internal constructor( constructor() : this(MapboxDirections.builder()) {} init { - this.eventListener = EVENT_LISTENER + this.eventListener = + EVENT_LISTENER } /** diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt similarity index 90% rename from libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt rename to libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt index baad1a78507..e736f610e4f 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt @@ -1,6 +1,6 @@ @file:JvmName("LocaleEx") -package com.mapbox.services.android.navigation.v5.utils.extensions +package com.mapbox.navigation.base.route.extensions import com.mapbox.api.directions.v5.DirectionsCriteria import java.util.Locale From c34f4000a4bca56e7e1a50aa0129f61dde3237fc Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 28 Oct 2019 13:41:54 +0300 Subject: [PATCH 03/75] NavigationRouteCallback, NavigationWalkingOptions, NavigationRoute: move to `base` module --- .../testapp/activity/RerouteActivity.java | 1 - .../DualNavigationMapActivity.java | 1 - .../EmbeddedNavigationActivity.java | 1 - .../navigationui/EndNavigationActivity.java | 2 +- .../NavigationMapRouteActivity.java | 1 - .../WaypointNavigationActivity.java | 2 +- .../fragment/NavigationFragment.java | 2 +- .../ui/navigation/ExampleRouteFinder.kt | 3 +- .../ui/navigation/OfflineRouteFinder.kt | 3 +- .../ui/v5/NavigationViewOfflineRouter.java | 1 - .../ui/v5/NavigationViewRouter.java | 2 +- .../navigation/v5/navigation/OfflineRoute.kt | 6 +- .../navigation/v5/route/RouteFetcher.kt | 18 ++--- .../route/offboard/MapboxOffboardRouter.kt | 3 - .../navigation/base/route}/NavigationRoute.kt | 2 +- .../base/route/NavigationRouteCallback.kt | 0 .../base/route/NavigationWalkingOptions.kt | 73 +++++++++++++++++++ .../route/NavigationRouteCallbackTest.kt | 0 .../route/NavigationWalkingOptionsTest.kt | 29 ++++++++ 19 files changed, 121 insertions(+), 29 deletions(-) rename {libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard => libnavigation-base/src/main/java/com/mapbox/navigation/base/route}/NavigationRoute.kt (99%) rename libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationRouteCallbackTest.kt => libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt (100%) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt create mode 100644 libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt create mode 100644 libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java index 2d2dcb445ae..74aac5bec1b 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java @@ -39,7 +39,6 @@ import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions; import com.mapbox.services.android.navigation.v5.navigation.NavigationEventListener; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.offroute.OffRouteListener; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java index ce555512e7c..b39987850e2 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java @@ -39,7 +39,6 @@ import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; import com.mapbox.services.android.navigation.ui.v5.route.OnRouteSelectionChangeListener; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import java.lang.ref.WeakReference; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java index 6bd7658d2fa..9d05ad95387 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java @@ -38,7 +38,6 @@ import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; import com.mapbox.services.android.navigation.ui.v5.listeners.SpeechAnnouncementListener; import com.mapbox.services.android.navigation.ui.v5.voice.SpeechAnnouncement; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java index 9eb25de08d3..bcdc7c985c2 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java @@ -21,12 +21,12 @@ import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.ui.v5.NavigationView; import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions; import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback; import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java index 4a81761aefa..faed0db282b 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java @@ -30,7 +30,6 @@ import com.mapbox.mapboxsdk.maps.Style; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import java.util.List; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java index 56a9b684581..c46dd788aac 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java @@ -13,13 +13,13 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.ui.v5.NavigationView; import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions; import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback; import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; import com.mapbox.services.android.navigation.ui.v5.listeners.RouteListener; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java index 380d504b221..d09c58cc814 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java @@ -19,13 +19,13 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.testapp.activity.navigationui.SimplifiedCallback; import com.mapbox.services.android.navigation.ui.v5.NavigationView; import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions; import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback; import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt index 5c1e5420910..931eee548de 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt @@ -4,7 +4,6 @@ import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsResponse import com.mapbox.geojson.Point import com.mapbox.services.android.navigation.testapp.NavigationApplication -import com.mapbox.navigation.route.offboard.NavigationRoute import retrofit2.Call import retrofit2.Callback import retrofit2.Response @@ -36,7 +35,7 @@ class ExampleRouteFinder( private fun find(location: Location, destination: Point) { val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = location.bearing.toDouble() - com.mapbox.navigation.route.offboard.NavigationRoute.builder(NavigationApplication.instance) + NavigationRoute.builder(NavigationApplication.instance) .accessToken(accessToken) .origin(origin, bearing, BEARING_TOLERANCE) .profile(profile) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt index 9f4f6e30245..6df8574d5d9 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt @@ -9,7 +9,6 @@ import com.mapbox.mapboxsdk.Mapbox import com.mapbox.services.android.navigation.testapp.NavigationApplication import com.mapbox.services.android.navigation.testapp.R import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter -import com.mapbox.navigation.route.offboard.NavigationRoute import com.mapbox.services.android.navigation.v5.navigation.OfflineError import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute import com.mapbox.services.android.navigation.v5.navigation.OnOfflineRouteFoundCallback @@ -81,7 +80,7 @@ class OfflineRouteFinder( private fun buildOfflineRoute(location: Location, destination: Point): OfflineRoute { val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = location.bearing.toDouble() - return com.mapbox.navigation.route.offboard.NavigationRoute.builder(NavigationApplication.instance) + return NavigationRoute.builder(NavigationApplication.instance) .origin(origin, bearing, BEARING_TOLERANCE) .destination(destination) .accessToken(Mapbox.getAccessToken()!!) // OZ: Ok to use "!!". This code should crash if getAccessToken() returns null diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java index f314e917877..c2744831414 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java @@ -1,7 +1,6 @@ package com.mapbox.services.android.navigation.ui.v5; import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute; import timber.log.Timber; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java index 9923369b6d0..201c05e10e3 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java @@ -10,8 +10,8 @@ import com.mapbox.api.directions.v5.models.RouteOptions; import com.mapbox.core.utils.TextUtils; import com.mapbox.geojson.Point; +import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.route.RouteFetcher; import com.mapbox.services.android.navigation.v5.route.RouteListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt index fb17773d9a7..02efdaafb82 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt @@ -13,7 +13,7 @@ import okhttp3.HttpUrl * could be set in order for an offline navigation session to successfully begin. */ class OfflineRoute private constructor( - private val onlineRoute: com.mapbox.navigation.route.offboard.NavigationRoute, + private val onlineRoute: NavigationRoute, bicycleType: OfflineCriteria.BicycleType?, private val cyclingSpeed: Float?, private val cyclewayBias: Float?, @@ -46,7 +46,7 @@ class OfflineRoute private constructor( * @return a [Builder] object for creating this object */ @JvmStatic - fun builder(onlineRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder): Builder { + fun builder(onlineRouteBuilder: NavigationRoute.Builder): Builder { return Builder(onlineRouteBuilder) } } @@ -118,7 +118,7 @@ class OfflineRoute private constructor( private fun obtainRouteFor(response: String): DirectionsRoute? = DirectionsResponse.fromJson(response).routes().firstOrNull() - class Builder internal constructor(private val navigationRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder) { + class Builder internal constructor(private val navigationRouteBuilder: NavigationRoute.Builder) { private var bicycleType: OfflineCriteria.BicycleType? = null private var cyclingSpeed: Float? = null private var cyclewayBias: Float? = null diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt index d4d45066275..09c1dfc4ebe 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt @@ -25,7 +25,7 @@ class RouteFetcher context: Context, private val accessToken: String, private val routeUtils: RouteUtils = RouteUtils(), - private var navigationRoute: com.mapbox.navigation.route.offboard.NavigationRoute? = null + private var navigationRoute: NavigationRoute? = null ) { companion object { @@ -100,13 +100,13 @@ class RouteFetcher fun buildRequestFrom( location: Location, routeProgress: RouteProgress - ): com.mapbox.navigation.route.offboard.NavigationRoute.Builder? { + ): NavigationRoute.Builder? { val context = contextWeakReference.get() ?: return null val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = if (location.hasBearing()) location.bearing.toDouble() else null val routeOptions = routeProgress.directionsRoute()?.routeOptions() - val navigationRouteBuilder = com.mapbox.navigation.route.offboard.NavigationRoute.builder(context) + val navigationRouteBuilder = NavigationRoute.builder(context) .accessToken(accessToken) .origin(origin, bearing, BEARING_TOLERANCE) routeOptions?.let { options -> @@ -131,7 +131,7 @@ class RouteFetcher * * @param builder to be executed */ - fun findRouteWith(builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder?) { + fun findRouteWith(builder: NavigationRoute.Builder?) { builder?.let { navigationRouteBuilder -> navigationRoute = navigationRouteBuilder.build() navigationRoute?.getRoute(directionsResponseCallback) @@ -147,7 +147,7 @@ class RouteFetcher private fun addDestination( remainingWaypoints: MutableList, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { if (remainingWaypoints.isNotEmpty()) { builder.destination(retrieveDestinationWaypoint(remainingWaypoints)) @@ -161,7 +161,7 @@ class RouteFetcher private fun addWaypoints( remainingCoordinates: List, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { if (remainingCoordinates.isNotEmpty()) { for (coordinate in remainingCoordinates) { @@ -172,7 +172,7 @@ class RouteFetcher private fun addWaypointIndices( routeProgress: RouteProgress, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { val remainingWaypointIndices: IntArray? = routeUtils.calculateRemainingWaypointIndices(routeProgress) if (remainingWaypointIndices != null && remainingWaypointIndices.isNotEmpty()) { @@ -182,7 +182,7 @@ class RouteFetcher private fun addWaypointNames( progress: RouteProgress, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { val remainingWaypointNames: Array? = routeUtils.calculateRemainingWaypointNames(progress) remainingWaypointNames?.let { @@ -192,7 +192,7 @@ class RouteFetcher private fun addApproaches( progress: RouteProgress, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { val remainingApproaches: Array? = routeUtils.calculateRemainingApproaches(progress) remainingApproaches?.let { diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index c952ce29ade..1ff18714492 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -47,9 +47,6 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: }) } - override fun getRoute(origin: Point, waypoints: List, listener: Router.RouteListener) { - } - override fun cancel() { navigationRoute?.cancelCall() navigationRoute = null diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt similarity index 99% rename from libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt rename to libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt index af62d633075..4c7311499dc 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt @@ -1,4 +1,4 @@ -package com.mapbox.navigation.route.offboard +package com.mapbox.navigation.base.route import android.content.Context import androidx.annotation.FloatRange diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationRouteCallbackTest.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt similarity index 100% rename from libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationRouteCallbackTest.kt rename to libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt new file mode 100644 index 00000000000..57e4eb7d1a1 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt @@ -0,0 +1,73 @@ +package com.mapbox.navigation.base.route + +import com.mapbox.api.directions.v5.WalkingOptions + +/** + * Class for specifying options for use with the walking profile. + */ +class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingOptions) { + + companion object { + /** + * Build a new [WalkingOptions] object with no defaults. + * + * @return a [Builder] object for creating a [NavigationWalkingOptions] object + */ + @JvmStatic + fun builder(): Builder { + return Builder(WalkingOptions.builder()) + } + } + + /** + * This builder is used to create a new object with specifications relating to walking directions. + */ + class Builder internal constructor(private val builder: WalkingOptions.Builder) { + + /** + * Builds a [NavigationWalkingOptions] object with the specified configurations. + * + * @return a NavigationWalkingOptions object + */ + fun build(): NavigationWalkingOptions = NavigationWalkingOptions(builder.build()) + + /** + * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. + * Defaults to 1.42 meters per second + * + * @param walkingSpeed in meters per second + * @return this builder + */ + fun walkingSpeed(walkingSpeed: Double?): Builder { + builder.walkingSpeed(walkingSpeed) + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of roads or paths + * that are set aside for pedestrian-only use (walkways). The allowed range of values is from + * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor + * walkways, and 0 indicates no preference (the default). + * + * @param walkwayBias bias to prefer or avoid walkways + * @return this builder + */ + fun walkwayBias(walkwayBias: Double?): Builder { + builder.walkwayBias(walkwayBias) + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of alleys. The + * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 + * indicates preference to favor alleys, and 0 indicates no preference (the default). + * + * @param alleyBias bias to prefer or avoid alleys + * @return this builder + */ + fun alleyBias(alleyBias: Double?): Builder { + builder.alleyBias(alleyBias) + return this + } + } +} diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt new file mode 100644 index 00000000000..b96ce94797a --- /dev/null +++ b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt @@ -0,0 +1,29 @@ +package com.mapbox.navigation.base.route + +import org.junit.Test + +import org.junit.Assert.assertEquals + +class NavigationWalkingOptionsTest { + + @Test + fun alleyBias_walkingOptionSet() { + val options = NavigationWalkingOptions.builder().alleyBias(0.7).build() + + assertEquals(java.lang.Double.valueOf(0.7), options.walkingOptions.alleyBias()) + } + + @Test + fun walkwayBias_walkingOptionSet() { + val options = NavigationWalkingOptions.builder().walkwayBias(0.8).build() + + assertEquals(java.lang.Double.valueOf(0.8), options.walkingOptions.walkwayBias()) + } + + @Test + fun walkingSpeed_walkingOptionSet() { + val options = NavigationWalkingOptions.builder().walkingSpeed(2.0).build() + + assertEquals(java.lang.Double.valueOf(2.0), options.walkingOptions.walkingSpeed()) + } +} From ffe2b882e81395dc87e99931811633e195304eda Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 29 Oct 2019 12:46:20 +0300 Subject: [PATCH 04/75] StepManeuverNavigation, RouteLegNavigation, Route, LegStepNavigation: navigation types and mappers from Maps types --- .../java/com/mapbox/navigation/base/route/NavigationRoute.kt | 3 +-- .../src/main/java/com/mapbox/navigation/base/route/Router.kt | 1 - .../route/NavigationWalkingOptionsTest.kt | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt index 4c7311499dc..d2c65a0db83 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt @@ -118,8 +118,7 @@ internal constructor( constructor() : this(MapboxDirections.builder()) {} init { - this.eventListener = - EVENT_LISTENER + this.eventListener = EVENT_LISTENER } /** diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt index ee56314ece8..f7a339b7f19 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt @@ -18,4 +18,3 @@ interface Router { fun onFailure(throwable: Throwable) } } - diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt index b96ce94797a..ce2bf6e210e 100644 --- a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt +++ b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt @@ -1,8 +1,7 @@ package com.mapbox.navigation.base.route -import org.junit.Test - import org.junit.Assert.assertEquals +import org.junit.Test class NavigationWalkingOptionsTest { From 3c1944b99ab539df24207e66703a4921b6895772 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 17:17:36 +0300 Subject: [PATCH 05/75] moved classes to `libderections-common` module --- .../navigation/ui/v5/NavigationView.java | 1 - .../navigation/ui/v5/NavigationViewModel.java | 1 - .../ui/v5/summary/SummaryBottomSheet.java | 1 - .../v5/navigation/NavigationRoute.kt | 0 .../v5/navigation/NavigationRouteWaypoint.kt | 9 +++ .../metrics/MapboxMetricsReporter.kt | 3 +- .../route/common}/NavigationRoute.kt | 2 +- .../route/common/NavigationRouteCallback.kt | 0 .../common/NavigationRouteEventListener.kt | 0 .../route/common/NavigationRouteWaypoint.kt | 0 .../route/common}/NavigationWalkingOptions.kt | 2 +- .../route/common/extension}/LocaleEx.kt | 2 +- .../route/common/extension/ModelsMappers.kt | 70 +++++++++++++++++++ .../common/NavigationRouteCallbackTest.kt | 0 .../route/common/NavigationRouteTest.kt | 0 .../common}/NavigationWalkingOptionsTest.kt | 2 +- libdirections-offboard/build.gradle | 2 - .../base/route/model/PointNavigation.kt | 6 ++ .../session/MapboxDirectionsSession.kt | 0 .../session/MapboxDirectionsSessionTest.kt | 0 libnavigator/build.gradle | 8 +++ 21 files changed, 99 insertions(+), 10 deletions(-) rename libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt => libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt (100%) create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route => libderections-common/src/main/java/com/mapbox/navigation/route/common}/NavigationRoute.kt (99%) rename libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt => libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt (100%) rename libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt => libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt (100%) create mode 100644 libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route => libderections-common/src/main/java/com/mapbox/navigation/route/common}/NavigationWalkingOptions.kt (98%) rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions => libderections-common/src/main/java/com/mapbox/navigation/route/common/extension}/LocaleEx.kt (92%) create mode 100644 libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt create mode 100644 libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt create mode 100644 libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt rename {libnavigation-base/src/test/java/com.mapbox.navigation.base/route => libderections-common/src/test/java/com/mapbox/navigation/route/common}/NavigationWalkingOptionsTest.kt (94%) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt create mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/MapboxDirectionsSession.kt create mode 100644 libnavigation-core/src/test/java/com/mapbox/navigation/directions/session/MapboxDirectionsSessionTest.kt diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java index 33b877c3670..ee61c4874f0 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java @@ -29,7 +29,6 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; -import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.NavigationCamera; import com.mapbox.services.android.navigation.ui.v5.instruction.ImageCreator; import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionView; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java index eff4eacc3c3..f66f214a96c 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java @@ -17,7 +17,6 @@ import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.offline.OfflineManager; -import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.DynamicCamera; import com.mapbox.services.android.navigation.ui.v5.feedback.FeedbackItem; import com.mapbox.services.android.navigation.ui.v5.instruction.BannerInstructionModel; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java index 0d7ff54818e..36858af49c8 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java @@ -15,7 +15,6 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.OnLifecycleEvent; -import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.NavigationViewModel; import com.mapbox.services.android.navigation.ui.v5.R; import com.mapbox.services.android.navigation.ui.v5.ThemeSwitcher; diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt similarity index 100% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt rename to libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt new file mode 100644 index 00000000000..e94afbbb51c --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt @@ -0,0 +1,9 @@ +package com.mapbox.services.android.navigation.v5.navigation + +import com.mapbox.geojson.Point + +data class NavigationRouteWaypoint( + val waypoint: Point, + val bearingAngle: Double?, + val tolerance: Double? +) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index 1ae4e2b115f..3fb78aa5333 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -12,7 +12,8 @@ import com.mapbox.services.android.navigation.v5.utils.thread.WorkThreadHandler * * @since 0.43.0 */ -object MapboxMetricsReporter : MetricsReporter { +object MapboxMetricsReporter : + MetricsReporter { private val gson = Gson() private lateinit var mapboxTelemetry: MapboxTelemetry diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt similarity index 99% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt index d2c65a0db83..3112ce7812e 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt @@ -1,4 +1,4 @@ -package com.mapbox.navigation.base.route +package com.mapbox.navigation.route.common import android.content.Context import androidx.annotation.FloatRange diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt similarity index 100% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt similarity index 100% rename from libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt similarity index 98% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt index 57e4eb7d1a1..03f64346e0b 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt @@ -1,4 +1,4 @@ -package com.mapbox.navigation.base.route +package com.mapbox.navigation.route.common import com.mapbox.api.directions.v5.WalkingOptions diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt similarity index 92% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt index e736f610e4f..d92027801b6 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt @@ -1,6 +1,6 @@ @file:JvmName("LocaleEx") -package com.mapbox.navigation.base.route.extensions +package com.mapbox.navigation.route.common.extension import com.mapbox.api.directions.v5.DirectionsCriteria import java.util.Locale diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt new file mode 100644 index 00000000000..fd7103be57d --- /dev/null +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt @@ -0,0 +1,70 @@ +package com.mapbox.navigation.route.common.extension + +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.api.directions.v5.models.LegStep +import com.mapbox.api.directions.v5.models.RouteLeg +import com.mapbox.api.directions.v5.models.StepManeuver +import com.mapbox.navigation.base.route.model.LegStepNavigation +import com.mapbox.navigation.base.route.model.PointNavigation +import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.base.route.model.RouteLegNavigation +import com.mapbox.navigation.base.route.model.StepManeuverNavigation + +fun LegStep.mapToStep() = LegStepNavigation( + distance = distance(), + duration = duration(), + geometry = geometry(), + name = name(), + ref = ref(), + destinations = destinations(), + mode = mode(), + pronunciation = pronunciation(), + rotaryName = rotaryName(), + rotaryPronunciation = rotaryPronunciation(), + maneuver = maneuver().mapToManeuverStep() +) + +fun DirectionsRoute.mapToRoute() = Route( + routeIndex = routeIndex(), + distance = distance(), + duration = duration()?.toLong(), + geometry = geometry(), + weight = weight(), + weightName = weightName(), + voiceLanguage = voiceLanguage(), + legs = legs()?.map { it.mapToLeg() } +) + +fun RouteLeg.mapToLeg() = RouteLegNavigation( + distance = distance(), + duration = duration(), + summary = summary(), + steps = steps()?.map { it.mapToStep() } +) + +fun StepManeuver.mapToManeuverStep() = StepManeuverNavigation( + location = PointNavigation(location().longitude(), location().latitude()), + bearingBefore = bearingBefore(), + bearingAfter = bearingAfter(), + type = if (typesStepManeuverNavigation.contains(type())) type() else null, + exit = exit() +) + +private val typesStepManeuverNavigation = arrayOf( + StepManeuverNavigation.TURN, + StepManeuverNavigation.NEW_NAME, + StepManeuverNavigation.DEPART, + StepManeuverNavigation.ARRIVE, + StepManeuverNavigation.MERGE, + StepManeuverNavigation.ON_RAMP, + StepManeuverNavigation.OFF_RAMP, + StepManeuverNavigation.FORK, + StepManeuverNavigation.END_OF_ROAD, + StepManeuverNavigation.CONTINUE, + StepManeuverNavigation.ROUNDABOUT, + StepManeuverNavigation.ROTARY, + StepManeuverNavigation.ROUNDABOUT_TURN, + StepManeuverNavigation.NOTIFICATION, + StepManeuverNavigation.EXIT_ROUNDABOUT, + StepManeuverNavigation.EXIT_ROTARY +) diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt similarity index 94% rename from libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt rename to libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt index ce2bf6e210e..c152f0aa17f 100644 --- a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt +++ b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.navigation.base.route +package com.mapbox.navigation.route.common import org.junit.Assert.assertEquals import org.junit.Test diff --git a/libdirections-offboard/build.gradle b/libdirections-offboard/build.gradle index 0dab8f4a878..eff0796ce0f 100644 --- a/libdirections-offboard/build.gradle +++ b/libdirections-offboard/build.gradle @@ -22,8 +22,6 @@ dependencies { implementation project(':libnavigation-util') api project(':libnavigation-base') - api(project(':libnavigation-base')) - // Support implementation dependenciesList.supportAnnotation diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt new file mode 100644 index 00000000000..8ff9868d998 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt @@ -0,0 +1,6 @@ +package com.mapbox.navigation.base.route.model + +data class PointNavigation( + val longitude: Double, + val latitude: Double +) diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/MapboxDirectionsSession.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/MapboxDirectionsSession.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-core/src/test/java/com/mapbox/navigation/directions/session/MapboxDirectionsSessionTest.kt b/libnavigation-core/src/test/java/com/mapbox/navigation/directions/session/MapboxDirectionsSessionTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigator/build.gradle b/libnavigator/build.gradle index 35af2cdc34e..8a62627c254 100644 --- a/libnavigator/build.gradle +++ b/libnavigator/build.gradle @@ -27,6 +27,14 @@ dependencies { ktlint dependenciesList.ktlint implementation dependenciesList.kotlinStdLib + + implementation dependenciesList.supportAnnotation + + implementation dependenciesList.mapboxSdkGeoJSON + + // Unit testing + testImplementation dependenciesList.junit + testImplementation dependenciesList.mockk } apply from: "${rootDir}/gradle/bintray-publish.gradle" \ No newline at end of file From a4b76d6ad3522d4980f410a65dc64127a49f0b7e Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 4 Nov 2019 12:36:29 +0300 Subject: [PATCH 06/75] Return dependecies to core api --- .../metrics/MapboxMetricsReporter.kt | 3 +- .../route/common/extension/ModelsMappers.kt | 57 +------------------ libnavigation-base/build.gradle | 1 + libnavigator/build.gradle | 3 +- 4 files changed, 5 insertions(+), 59 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index 3fb78aa5333..1ae4e2b115f 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -12,8 +12,7 @@ import com.mapbox.services.android.navigation.v5.utils.thread.WorkThreadHandler * * @since 0.43.0 */ -object MapboxMetricsReporter : - MetricsReporter { +object MapboxMetricsReporter : MetricsReporter { private val gson = Gson() private lateinit var mapboxTelemetry: MapboxTelemetry diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt index fd7103be57d..d20e139cd19 100644 --- a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt @@ -1,28 +1,7 @@ package com.mapbox.navigation.route.common.extension import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.LegStep -import com.mapbox.api.directions.v5.models.RouteLeg -import com.mapbox.api.directions.v5.models.StepManeuver -import com.mapbox.navigation.base.route.model.LegStepNavigation -import com.mapbox.navigation.base.route.model.PointNavigation import com.mapbox.navigation.base.route.model.Route -import com.mapbox.navigation.base.route.model.RouteLegNavigation -import com.mapbox.navigation.base.route.model.StepManeuverNavigation - -fun LegStep.mapToStep() = LegStepNavigation( - distance = distance(), - duration = duration(), - geometry = geometry(), - name = name(), - ref = ref(), - destinations = destinations(), - mode = mode(), - pronunciation = pronunciation(), - rotaryName = rotaryName(), - rotaryPronunciation = rotaryPronunciation(), - maneuver = maneuver().mapToManeuverStep() -) fun DirectionsRoute.mapToRoute() = Route( routeIndex = routeIndex(), @@ -32,39 +11,5 @@ fun DirectionsRoute.mapToRoute() = Route( weight = weight(), weightName = weightName(), voiceLanguage = voiceLanguage(), - legs = legs()?.map { it.mapToLeg() } -) - -fun RouteLeg.mapToLeg() = RouteLegNavigation( - distance = distance(), - duration = duration(), - summary = summary(), - steps = steps()?.map { it.mapToStep() } -) - -fun StepManeuver.mapToManeuverStep() = StepManeuverNavigation( - location = PointNavigation(location().longitude(), location().latitude()), - bearingBefore = bearingBefore(), - bearingAfter = bearingAfter(), - type = if (typesStepManeuverNavigation.contains(type())) type() else null, - exit = exit() -) - -private val typesStepManeuverNavigation = arrayOf( - StepManeuverNavigation.TURN, - StepManeuverNavigation.NEW_NAME, - StepManeuverNavigation.DEPART, - StepManeuverNavigation.ARRIVE, - StepManeuverNavigation.MERGE, - StepManeuverNavigation.ON_RAMP, - StepManeuverNavigation.OFF_RAMP, - StepManeuverNavigation.FORK, - StepManeuverNavigation.END_OF_ROAD, - StepManeuverNavigation.CONTINUE, - StepManeuverNavigation.ROUNDABOUT, - StepManeuverNavigation.ROTARY, - StepManeuverNavigation.ROUNDABOUT_TURN, - StepManeuverNavigation.NOTIFICATION, - StepManeuverNavigation.EXIT_ROUNDABOUT, - StepManeuverNavigation.EXIT_ROTARY + legs = legs() ) diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 9e6c7e06b25..7abd0b6162d 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -17,6 +17,7 @@ android { dependencies { api dependenciesList.mapboxCore api dependenciesList.mapboxSdkGeoJSON + api dependenciesList.mapboxSdkServices implementation dependenciesList.supportAnnotation diff --git a/libnavigator/build.gradle b/libnavigator/build.gradle index 8a62627c254..b18bf79e77f 100644 --- a/libnavigator/build.gradle +++ b/libnavigator/build.gradle @@ -15,7 +15,8 @@ android { } dependencies { - api project(':libnavigation-base') + api(project(':libnavigation-base')) + implementation project(':libnavigation-util') // Navigator api dependenciesList.mapboxNavigator From 3a1e0756412089488d20eea44e39f92154d42508 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 6 Nov 2019 11:35:14 +0300 Subject: [PATCH 07/75] - renamed module `libderections-common` -> `libdirections-common`; - removed unnecessary gradle's dependencies --- .../.gitignore | 0 .../build.gradle | 0 .../consumer-rules.pro | 0 .../proguard-rules.pro | 0 .../src/main/AndroidManifest.xml | 0 .../java/com/mapbox/navigation/route/common/NavigationRoute.kt | 0 .../mapbox/navigation/route/common/NavigationRouteCallback.kt | 0 .../navigation/route/common/NavigationRouteEventListener.kt | 0 .../mapbox/navigation/route/common/NavigationRouteWaypoint.kt | 0 .../mapbox/navigation/route/common/NavigationWalkingOptions.kt | 0 .../com/mapbox/navigation/route/common/extension/LocaleEx.kt | 0 .../mapbox/navigation/route/common/extension/ModelsMappers.kt | 0 .../navigation/route/common/NavigationRouteCallbackTest.kt | 0 .../com/mapbox/navigation/route/common/NavigationRouteTest.kt | 0 .../navigation/route/common/NavigationWalkingOptionsTest.kt | 0 libnavigation-base/build.gradle | 1 - 16 files changed, 1 deletion(-) rename libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt => libdirections-common/.gitignore (100%) rename libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt => libdirections-common/build.gradle (100%) rename libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt => libdirections-common/consumer-rules.pro (100%) rename libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt => libdirections-common/proguard-rules.pro (100%) rename libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt => libdirections-common/src/main/AndroidManifest.xml (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt (100%) create mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt create mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt create mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt (100%) create mode 100644 libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt create mode 100644 libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt rename {libderections-common => libdirections-common}/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt (100%) diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt b/libdirections-common/.gitignore similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt rename to libdirections-common/.gitignore diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt b/libdirections-common/build.gradle similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt rename to libdirections-common/build.gradle diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt b/libdirections-common/consumer-rules.pro similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt rename to libdirections-common/consumer-rules.pro diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt b/libdirections-common/proguard-rules.pro similarity index 100% rename from libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt rename to libdirections-common/proguard-rules.pro diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libdirections-common/src/main/AndroidManifest.xml similarity index 100% rename from libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt rename to libdirections-common/src/main/AndroidManifest.xml diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt similarity index 100% rename from libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt rename to libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 7abd0b6162d..e76035a320b 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -16,7 +16,6 @@ android { dependencies { api dependenciesList.mapboxCore - api dependenciesList.mapboxSdkGeoJSON api dependenciesList.mapboxSdkServices implementation dependenciesList.supportAnnotation From 1f03b07aa7d65c3c73a337db1ea26ee38bdaba5a Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 12 Nov 2019 16:00:29 +0300 Subject: [PATCH 08/75] fix merge issues --- .../route/offboard/MapboxOffboardRouterGenerationTest.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt new file mode 100644 index 00000000000..e69de29bb2d From 9b71906a6c41d79489fa97d4fd8b91c1c9779284 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 14 Nov 2019 17:52:15 +0300 Subject: [PATCH 09/75] - restrict mapboxSdkService dependency from `libnavigation-base` and `libdirections-common` module; - added mapboxSdkService dependency to `libdirections-offboard` dependency --- .../common/NavigationRouteEventListener.kt | 0 .../route/common/extension/LocaleEx.kt | 23 ------------------- .../route/common/extension/ModelsMappers.kt | 15 ------------ .../route/common/NavigationRouteTest.kt | 0 .../route/offboard/extension/Mappers.kt | 4 ++-- .../router}/NavigationRouteCallback.kt | 0 .../router/NavigationRouteEventListener.kt | 22 ------------------ .../router}/NavigationRouteWaypoint.kt | 0 .../router}/NavigationWalkingOptions.kt | 9 +++++--- .../router}/NavigationRouteCallbackTest.kt | 0 .../router}/NavigationWalkingOptionsTest.kt | 6 ++--- libnavigation-base/build.gradle | 1 - .../navigation/base/metrics/MetricEvent.kt | 2 +- .../mapbox/navigation/base/util/JsonMapper.kt | 5 ++++ .../metrics/MapboxMetricsReporter.kt | 1 + .../metrics/MapboxMetricsReporterTest.kt | 3 +-- 16 files changed, 19 insertions(+), 72 deletions(-) delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt delete mode 100644 libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt rename {libdirections-common/src/main/java/com/mapbox/navigation/route/common => libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router}/NavigationRouteCallback.kt (100%) rename {libdirections-common/src/main/java/com/mapbox/navigation/route/common => libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router}/NavigationRouteWaypoint.kt (100%) rename {libdirections-common/src/main/java/com/mapbox/navigation/route/common => libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router}/NavigationWalkingOptions.kt (91%) rename {libdirections-common/src/test/java/com/mapbox/navigation/route/common => libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router}/NavigationRouteCallbackTest.kt (100%) rename {libdirections-common/src/test/java/com/mapbox/navigation/route/common => libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router}/NavigationWalkingOptionsTest.kt (60%) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt deleted file mode 100644 index d92027801b6..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt +++ /dev/null @@ -1,23 +0,0 @@ -@file:JvmName("LocaleEx") - -package com.mapbox.navigation.route.common.extension - -import com.mapbox.api.directions.v5.DirectionsCriteria -import java.util.Locale - -/** - * Returns the unit type for the specified locale. Try to avoid using this unnecessarily because - * all methods consuming unit type are able to handle the NONE_SPECIFIED type - * - * @return unit type for specified locale - */ -@DirectionsCriteria.VoiceUnitCriteria -fun Locale.getUnitTypeForLocale(): String = - when (this.country) { - "US", // US - "LR", // Liberia - "MM" -> // Burma - DirectionsCriteria.IMPERIAL - else -> - DirectionsCriteria.METRIC - } diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt deleted file mode 100644 index d20e139cd19..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.mapbox.navigation.route.common.extension - -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.navigation.base.route.model.Route - -fun DirectionsRoute.mapToRoute() = Route( - routeIndex = routeIndex(), - distance = distance(), - duration = duration()?.toLong(), - geometry = geometry(), - weight = weight(), - weightName = weightName(), - voiceLanguage = voiceLanguage(), - legs = legs() -) diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index c78acde76fe..cc596da1e45 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -2,14 +2,14 @@ package com.mapbox.navigation.route.offboard.extension -import com.mapbox.api.directions.v5.DirectionsCriteria -import com.mapbox.api.directions.v5.WalkingOptions +import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.LegStep import com.mapbox.api.directions.v5.models.RouteLeg import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.api.directions.v5.models.StepManeuver import com.mapbox.navigation.base.route.model.LegStepNavigation +import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.route.model.RouteLegNavigation import com.mapbox.navigation.base.route.model.RouteOptionsNavigation diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt similarity index 100% rename from libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt rename to libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt index b4b061fce9c..e69de29bb2d 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt @@ -1,22 +0,0 @@ -package com.mapbox.navigation.route.offboard.router - -import com.mapbox.navigation.utils.time.ElapsedTime -import okhttp3.Call -import okhttp3.EventListener - -internal class NavigationRouteEventListener -@JvmOverloads -constructor( - val time: ElapsedTime = ElapsedTime() -) : EventListener() { - - override fun callStart(call: Call) { - super.callStart(call) - time.start() - } - - override fun callEnd(call: Call) { - super.callEnd(call) - time.end() - } -} diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt similarity index 100% rename from libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt rename to libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt similarity index 91% rename from libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt rename to libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt index 03f64346e0b..a139fc79b6d 100644 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt @@ -1,4 +1,4 @@ -package com.mapbox.navigation.route.common +package com.mapbox.navigation.route.offboard.router import com.mapbox.api.directions.v5.WalkingOptions @@ -15,7 +15,9 @@ class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingO */ @JvmStatic fun builder(): Builder { - return Builder(WalkingOptions.builder()) + return Builder( + WalkingOptions.builder() + ) } } @@ -29,7 +31,8 @@ class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingO * * @return a NavigationWalkingOptions object */ - fun build(): NavigationWalkingOptions = NavigationWalkingOptions(builder.build()) + fun build(): NavigationWalkingOptions = + NavigationWalkingOptions(builder.build()) /** * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt similarity index 100% rename from libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt rename to libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt similarity index 60% rename from libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt rename to libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt index c152f0aa17f..2dbaf0008c7 100644 --- a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt +++ b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt @@ -7,21 +7,21 @@ class NavigationWalkingOptionsTest { @Test fun alleyBias_walkingOptionSet() { - val options = NavigationWalkingOptions.builder().alleyBias(0.7).build() + val options = com.mapbox.navigation.route.offboard.router.NavigationWalkingOptions.builder().alleyBias(0.7).build() assertEquals(java.lang.Double.valueOf(0.7), options.walkingOptions.alleyBias()) } @Test fun walkwayBias_walkingOptionSet() { - val options = NavigationWalkingOptions.builder().walkwayBias(0.8).build() + val options = com.mapbox.navigation.route.offboard.router.NavigationWalkingOptions.builder().walkwayBias(0.8).build() assertEquals(java.lang.Double.valueOf(0.8), options.walkingOptions.walkwayBias()) } @Test fun walkingSpeed_walkingOptionSet() { - val options = NavigationWalkingOptions.builder().walkingSpeed(2.0).build() + val options = com.mapbox.navigation.route.offboard.router.NavigationWalkingOptions.builder().walkingSpeed(2.0).build() assertEquals(java.lang.Double.valueOf(2.0), options.walkingOptions.walkingSpeed()) } diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index e76035a320b..3cccdfd3c45 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -16,7 +16,6 @@ android { dependencies { api dependenciesList.mapboxCore - api dependenciesList.mapboxSdkServices implementation dependenciesList.supportAnnotation diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt index 1fb38a488f3..3838ceb205a 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt @@ -20,7 +20,7 @@ interface MetricEvent { @Metric val metricName: String - fun toJson(gson: Gson): String + fun toJson(jsonMapper: JsonMapper): String } object NavigationMetrics { diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt new file mode 100644 index 00000000000..5b8a8a0c8b3 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt @@ -0,0 +1,5 @@ +package com.mapbox.navigation.base.util + +interface JsonMapper { + fun toJson(obj: T): String +} diff --git a/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt b/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt index 304c5fffadf..d6adde20b43 100644 --- a/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt +++ b/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt @@ -6,6 +6,7 @@ import com.mapbox.android.telemetry.MapboxTelemetry import com.mapbox.navigation.base.metrics.MetricEvent import com.mapbox.navigation.base.metrics.MetricsObserver import com.mapbox.navigation.base.metrics.MetricsReporter +import com.mapbox.navigation.base.util.JsonMapper import com.mapbox.navigation.metrics.internal.utils.extensions.toTelemetryEvent import com.mapbox.navigation.utils.thread.WorkThreadHandler diff --git a/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt b/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt index a258663f644..dad1969b3f5 100644 --- a/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt +++ b/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt @@ -1,7 +1,6 @@ package com.mapbox.navigation.metrics import android.os.Parcel -import com.google.gson.Gson import com.mapbox.android.telemetry.Event import com.mapbox.android.telemetry.MapboxTelemetry import com.mapbox.navigation.base.metrics.MetricEvent @@ -87,6 +86,6 @@ class MapboxMetricsReporterTest { override fun describeContents(): Int = 0 - override fun toJson(gson: Gson): String = gson.toJson(this) + override fun toJson(jsonMapper: JsonMapper): String = jsonMapper.toJson(this) } } From ba191db3aaefe8a96d939ff17b4011b3da2c9d9d Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 15 Nov 2019 12:32:40 +0300 Subject: [PATCH 10/75] Revert using Location -> Point --- .../com/mapbox/navigation/route/offboard/extension/Mappers.kt | 1 - libnavigation-base/build.gradle | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index cc596da1e45..fa5b57d7c14 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -2,7 +2,6 @@ package com.mapbox.navigation.route.offboard.extension -import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.LegStep import com.mapbox.api.directions.v5.models.RouteLeg diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 3cccdfd3c45..9e6c7e06b25 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -16,6 +16,7 @@ android { dependencies { api dependenciesList.mapboxCore + api dependenciesList.mapboxSdkGeoJSON implementation dependenciesList.supportAnnotation From c5a074cd6fef19e37bd37cbc2dbfe8e296e2a0e0 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 15 Nov 2019 12:58:36 +0300 Subject: [PATCH 11/75] removed `libdirections-common` module; added `Gson` impl for `JsonMapper` --- libdirections-common/consumer-rules.pro | 0 .../java/com/mapbox/navigation/base/util/JsonMapper.kt | 8 ++++++++ 2 files changed, 8 insertions(+) delete mode 100644 libdirections-common/consumer-rules.pro diff --git a/libdirections-common/consumer-rules.pro b/libdirections-common/consumer-rules.pro deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt index 5b8a8a0c8b3..8491db344b5 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt @@ -1,5 +1,13 @@ package com.mapbox.navigation.base.util +import com.google.gson.Gson + interface JsonMapper { fun toJson(obj: T): String + + object GsonImpl : JsonMapper { + private val gson by lazy { Gson() } + + override fun toJson(obj: T): String = gson.toJson(obj) + } } From 049e2059f7967a73c202db2bba84f260582d65c3 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 25 Oct 2019 13:52:23 +0300 Subject: [PATCH 12/75] Moved classes to base modules --- .../v5/navigation/NavigationRouteWaypoint.kt | 9 --------- .../route/offboard/MapboxOffboardRouter.kt | 4 ++++ .../com/mapbox/navigation/base/route/Router.kt | 1 + .../utils/exceptions/NavigationException.kt | 14 -------------- .../java/com/mapbox/navigation/utils/time/Time.kt | 12 ------------ .../navigation/exception/NavigationException.kt | 0 .../navigation/route/NavigationRouteWaypoint.kt | 4 ++-- .../main/java/com/mapbox/navigation/util/Time.kt | 0 8 files changed, 7 insertions(+), 37 deletions(-) delete mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt create mode 100644 linavigation-base/src/main/java/com/mapbox/navigation/exception/NavigationException.kt create mode 100644 linavigation-base/src/main/java/com/mapbox/navigation/util/Time.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt deleted file mode 100644 index e94afbbb51c..00000000000 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.mapbox.services.android.navigation.v5.navigation - -import com.mapbox.geojson.Point - -data class NavigationRouteWaypoint( - val waypoint: Point, - val bearingAngle: Double?, - val tolerance: Double? -) diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index 1ff18714492..761d0d55b6c 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -47,6 +47,10 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: }) } + override fun getRoute(origin: Point, waypoints: List, listener: Router.RouteListener) { + + } + override fun cancel() { navigationRoute?.cancelCall() navigationRoute = null diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt index f7a339b7f19..ee56314ece8 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt @@ -18,3 +18,4 @@ interface Router { fun onFailure(throwable: Throwable) } } + diff --git a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt index 49208c3d55b..e69de29bb2d 100644 --- a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt +++ b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt @@ -1,14 +0,0 @@ -package com.mapbox.navigation.utils.exceptions - -/** - * Generic Exception for all things Mapbox Navigation. - * - * A form of `Throwable` that indicates conditions that a reasonable application might - * want to catch. - * - * @param message the detail message (which is saved for later retrieval by the - * [Throwable.message] method). - * - * @since 0.2.0 - */ -class NavigationException(message: String) : RuntimeException(message) diff --git a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt index 247bb29c3a0..e69de29bb2d 100644 --- a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt +++ b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt @@ -1,12 +0,0 @@ -package com.mapbox.navigation.utils.time - -interface Time { - fun nanoTime(): Long - fun millis(): Long - - object SystemImpl : Time { - override fun nanoTime(): Long = System.nanoTime() - - override fun millis(): Long = System.currentTimeMillis() - } -} diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/exception/NavigationException.kt b/linavigation-base/src/main/java/com/mapbox/navigation/exception/NavigationException.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt index da35af50285..190bcf3e730 100644 --- a/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt +++ b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt @@ -2,8 +2,8 @@ package com.mapbox.navigation.route import com.mapbox.geojson.Point -internal data class NavigationRouteWaypoint( - val point: Point, +data class NavigationRouteWaypoint( + val waypoint: Point, val bearingAngle: Double?, val tolerance: Double? ) diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/util/Time.kt b/linavigation-base/src/main/java/com/mapbox/navigation/util/Time.kt new file mode 100644 index 00000000000..e69de29bb2d From b57ee94d54d73d0c17458423df4a9a53d5e25270 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 25 Oct 2019 18:54:53 +0300 Subject: [PATCH 13/75] moved classes to another module --- .../navigation/ui/v5/NavigationView.java | 1 + .../navigation/ui/v5/NavigationViewModel.java | 1 + .../ui/v5/summary/SummaryBottomSheet.java | 1 + .../navigation/v5/navigation/OfflineRoute.kt | 6 ++--- .../navigation/v5/route/RouteFetcher.kt | 16 ++++++------- .../route/offboard/MapboxOffboardRouter.kt | 1 - .../route/offboard}/NavigationRoute.kt | 0 .../route/NavigationRouteEventListener.kt | 0 .../base/route/extensions/LocaleEx.kt | 23 +++++++++++++++++++ 9 files changed, 37 insertions(+), 12 deletions(-) rename {libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation => libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard}/NavigationRoute.kt (100%) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java index ee61c4874f0..33b877c3670 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java @@ -29,6 +29,7 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; +import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.NavigationCamera; import com.mapbox.services.android.navigation.ui.v5.instruction.ImageCreator; import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionView; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java index f66f214a96c..eff4eacc3c3 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java @@ -17,6 +17,7 @@ import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.offline.OfflineManager; +import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.DynamicCamera; import com.mapbox.services.android.navigation.ui.v5.feedback.FeedbackItem; import com.mapbox.services.android.navigation.ui.v5.instruction.BannerInstructionModel; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java index 36858af49c8..0d7ff54818e 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java @@ -15,6 +15,7 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.OnLifecycleEvent; +import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.NavigationViewModel; import com.mapbox.services.android.navigation.ui.v5.R; import com.mapbox.services.android.navigation.ui.v5.ThemeSwitcher; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt index 02efdaafb82..fb17773d9a7 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt @@ -13,7 +13,7 @@ import okhttp3.HttpUrl * could be set in order for an offline navigation session to successfully begin. */ class OfflineRoute private constructor( - private val onlineRoute: NavigationRoute, + private val onlineRoute: com.mapbox.navigation.route.offboard.NavigationRoute, bicycleType: OfflineCriteria.BicycleType?, private val cyclingSpeed: Float?, private val cyclewayBias: Float?, @@ -46,7 +46,7 @@ class OfflineRoute private constructor( * @return a [Builder] object for creating this object */ @JvmStatic - fun builder(onlineRouteBuilder: NavigationRoute.Builder): Builder { + fun builder(onlineRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder): Builder { return Builder(onlineRouteBuilder) } } @@ -118,7 +118,7 @@ class OfflineRoute private constructor( private fun obtainRouteFor(response: String): DirectionsRoute? = DirectionsResponse.fromJson(response).routes().firstOrNull() - class Builder internal constructor(private val navigationRouteBuilder: NavigationRoute.Builder) { + class Builder internal constructor(private val navigationRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder) { private var bicycleType: OfflineCriteria.BicycleType? = null private var cyclingSpeed: Float? = null private var cyclewayBias: Float? = null diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt index 09c1dfc4ebe..fb54cc55f8d 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt @@ -100,13 +100,13 @@ class RouteFetcher fun buildRequestFrom( location: Location, routeProgress: RouteProgress - ): NavigationRoute.Builder? { + ): com.mapbox.navigation.route.offboard.NavigationRoute.Builder? { val context = contextWeakReference.get() ?: return null val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = if (location.hasBearing()) location.bearing.toDouble() else null val routeOptions = routeProgress.directionsRoute()?.routeOptions() - val navigationRouteBuilder = NavigationRoute.builder(context) + val navigationRouteBuilder = com.mapbox.navigation.route.offboard.NavigationRoute.builder(context) .accessToken(accessToken) .origin(origin, bearing, BEARING_TOLERANCE) routeOptions?.let { options -> @@ -131,7 +131,7 @@ class RouteFetcher * * @param builder to be executed */ - fun findRouteWith(builder: NavigationRoute.Builder?) { + fun findRouteWith(builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder?) { builder?.let { navigationRouteBuilder -> navigationRoute = navigationRouteBuilder.build() navigationRoute?.getRoute(directionsResponseCallback) @@ -147,7 +147,7 @@ class RouteFetcher private fun addDestination( remainingWaypoints: MutableList, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { if (remainingWaypoints.isNotEmpty()) { builder.destination(retrieveDestinationWaypoint(remainingWaypoints)) @@ -161,7 +161,7 @@ class RouteFetcher private fun addWaypoints( remainingCoordinates: List, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { if (remainingCoordinates.isNotEmpty()) { for (coordinate in remainingCoordinates) { @@ -172,7 +172,7 @@ class RouteFetcher private fun addWaypointIndices( routeProgress: RouteProgress, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { val remainingWaypointIndices: IntArray? = routeUtils.calculateRemainingWaypointIndices(routeProgress) if (remainingWaypointIndices != null && remainingWaypointIndices.isNotEmpty()) { @@ -182,7 +182,7 @@ class RouteFetcher private fun addWaypointNames( progress: RouteProgress, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { val remainingWaypointNames: Array? = routeUtils.calculateRemainingWaypointNames(progress) remainingWaypointNames?.let { @@ -192,7 +192,7 @@ class RouteFetcher private fun addApproaches( progress: RouteProgress, - builder: NavigationRoute.Builder + builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder ) { val remainingApproaches: Array? = routeUtils.calculateRemainingApproaches(progress) remainingApproaches?.let { diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index 761d0d55b6c..c952ce29ade 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -48,7 +48,6 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: } override fun getRoute(origin: Point, waypoints: List, listener: Router.RouteListener) { - } override fun cancel() { diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt similarity index 100% rename from libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt rename to libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt new file mode 100644 index 00000000000..e736f610e4f --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt @@ -0,0 +1,23 @@ +@file:JvmName("LocaleEx") + +package com.mapbox.navigation.base.route.extensions + +import com.mapbox.api.directions.v5.DirectionsCriteria +import java.util.Locale + +/** + * Returns the unit type for the specified locale. Try to avoid using this unnecessarily because + * all methods consuming unit type are able to handle the NONE_SPECIFIED type + * + * @return unit type for specified locale + */ +@DirectionsCriteria.VoiceUnitCriteria +fun Locale.getUnitTypeForLocale(): String = + when (this.country) { + "US", // US + "LR", // Liberia + "MM" -> // Burma + DirectionsCriteria.IMPERIAL + else -> + DirectionsCriteria.METRIC + } From 8f3d20ed7faf941d926e6a5c2cc25e41fb0eae49 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 28 Oct 2019 13:41:54 +0300 Subject: [PATCH 14/75] NavigationRouteCallback, NavigationWalkingOptions, NavigationRoute: move to `base` module --- .../navigation/v5/navigation/OfflineRoute.kt | 6 +- .../navigation/v5/route/RouteFetcher.kt | 16 ++-- .../route/offboard/MapboxOffboardRouter.kt | 3 - .../router/NavigationWalkingOptions.kt | 76 ------------------- .../navigation/base/route}/NavigationRoute.kt | 0 .../base/route/NavigationRouteCallback.kt | 0 .../base/route/NavigationWalkingOptions.kt | 0 .../route/NavigationRouteCallbackTest.kt | 0 .../route/NavigationWalkingOptionsTest.kt | 29 +++++++ 9 files changed, 40 insertions(+), 90 deletions(-) rename {libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard => libnavigation-base/src/main/java/com/mapbox/navigation/base/route}/NavigationRoute.kt (100%) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt create mode 100644 libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt create mode 100644 libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt index fb17773d9a7..02efdaafb82 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRoute.kt @@ -13,7 +13,7 @@ import okhttp3.HttpUrl * could be set in order for an offline navigation session to successfully begin. */ class OfflineRoute private constructor( - private val onlineRoute: com.mapbox.navigation.route.offboard.NavigationRoute, + private val onlineRoute: NavigationRoute, bicycleType: OfflineCriteria.BicycleType?, private val cyclingSpeed: Float?, private val cyclewayBias: Float?, @@ -46,7 +46,7 @@ class OfflineRoute private constructor( * @return a [Builder] object for creating this object */ @JvmStatic - fun builder(onlineRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder): Builder { + fun builder(onlineRouteBuilder: NavigationRoute.Builder): Builder { return Builder(onlineRouteBuilder) } } @@ -118,7 +118,7 @@ class OfflineRoute private constructor( private fun obtainRouteFor(response: String): DirectionsRoute? = DirectionsResponse.fromJson(response).routes().firstOrNull() - class Builder internal constructor(private val navigationRouteBuilder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder) { + class Builder internal constructor(private val navigationRouteBuilder: NavigationRoute.Builder) { private var bicycleType: OfflineCriteria.BicycleType? = null private var cyclingSpeed: Float? = null private var cyclewayBias: Float? = null diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt index fb54cc55f8d..09c1dfc4ebe 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/route/RouteFetcher.kt @@ -100,13 +100,13 @@ class RouteFetcher fun buildRequestFrom( location: Location, routeProgress: RouteProgress - ): com.mapbox.navigation.route.offboard.NavigationRoute.Builder? { + ): NavigationRoute.Builder? { val context = contextWeakReference.get() ?: return null val origin = Point.fromLngLat(location.longitude, location.latitude) val bearing = if (location.hasBearing()) location.bearing.toDouble() else null val routeOptions = routeProgress.directionsRoute()?.routeOptions() - val navigationRouteBuilder = com.mapbox.navigation.route.offboard.NavigationRoute.builder(context) + val navigationRouteBuilder = NavigationRoute.builder(context) .accessToken(accessToken) .origin(origin, bearing, BEARING_TOLERANCE) routeOptions?.let { options -> @@ -131,7 +131,7 @@ class RouteFetcher * * @param builder to be executed */ - fun findRouteWith(builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder?) { + fun findRouteWith(builder: NavigationRoute.Builder?) { builder?.let { navigationRouteBuilder -> navigationRoute = navigationRouteBuilder.build() navigationRoute?.getRoute(directionsResponseCallback) @@ -147,7 +147,7 @@ class RouteFetcher private fun addDestination( remainingWaypoints: MutableList, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { if (remainingWaypoints.isNotEmpty()) { builder.destination(retrieveDestinationWaypoint(remainingWaypoints)) @@ -161,7 +161,7 @@ class RouteFetcher private fun addWaypoints( remainingCoordinates: List, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { if (remainingCoordinates.isNotEmpty()) { for (coordinate in remainingCoordinates) { @@ -172,7 +172,7 @@ class RouteFetcher private fun addWaypointIndices( routeProgress: RouteProgress, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { val remainingWaypointIndices: IntArray? = routeUtils.calculateRemainingWaypointIndices(routeProgress) if (remainingWaypointIndices != null && remainingWaypointIndices.isNotEmpty()) { @@ -182,7 +182,7 @@ class RouteFetcher private fun addWaypointNames( progress: RouteProgress, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { val remainingWaypointNames: Array? = routeUtils.calculateRemainingWaypointNames(progress) remainingWaypointNames?.let { @@ -192,7 +192,7 @@ class RouteFetcher private fun addApproaches( progress: RouteProgress, - builder: com.mapbox.navigation.route.offboard.NavigationRoute.Builder + builder: NavigationRoute.Builder ) { val remainingApproaches: Array? = routeUtils.calculateRemainingApproaches(progress) remainingApproaches?.let { diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index c952ce29ade..1ff18714492 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -47,9 +47,6 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: }) } - override fun getRoute(origin: Point, waypoints: List, listener: Router.RouteListener) { - } - override fun cancel() { navigationRoute?.cancelCall() navigationRoute = null diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt index a139fc79b6d..e69de29bb2d 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt @@ -1,76 +0,0 @@ -package com.mapbox.navigation.route.offboard.router - -import com.mapbox.api.directions.v5.WalkingOptions - -/** - * Class for specifying options for use with the walking profile. - */ -class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingOptions) { - - companion object { - /** - * Build a new [WalkingOptions] object with no defaults. - * - * @return a [Builder] object for creating a [NavigationWalkingOptions] object - */ - @JvmStatic - fun builder(): Builder { - return Builder( - WalkingOptions.builder() - ) - } - } - - /** - * This builder is used to create a new object with specifications relating to walking directions. - */ - class Builder internal constructor(private val builder: WalkingOptions.Builder) { - - /** - * Builds a [NavigationWalkingOptions] object with the specified configurations. - * - * @return a NavigationWalkingOptions object - */ - fun build(): NavigationWalkingOptions = - NavigationWalkingOptions(builder.build()) - - /** - * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. - * Defaults to 1.42 meters per second - * - * @param walkingSpeed in meters per second - * @return this builder - */ - fun walkingSpeed(walkingSpeed: Double?): Builder { - builder.walkingSpeed(walkingSpeed) - return this - } - - /** - * A bias which determines whether the route should prefer or avoid the use of roads or paths - * that are set aside for pedestrian-only use (walkways). The allowed range of values is from - * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor - * walkways, and 0 indicates no preference (the default). - * - * @param walkwayBias bias to prefer or avoid walkways - * @return this builder - */ - fun walkwayBias(walkwayBias: Double?): Builder { - builder.walkwayBias(walkwayBias) - return this - } - - /** - * A bias which determines whether the route should prefer or avoid the use of alleys. The - * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 - * indicates preference to favor alleys, and 0 indicates no preference (the default). - * - * @param alleyBias bias to prefer or avoid alleys - * @return this builder - */ - fun alleyBias(alleyBias: Double?): Builder { - builder.alleyBias(alleyBias) - return this - } - } -} diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt similarity index 100% rename from libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/NavigationRoute.kt rename to libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt new file mode 100644 index 00000000000..b96ce94797a --- /dev/null +++ b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt @@ -0,0 +1,29 @@ +package com.mapbox.navigation.base.route + +import org.junit.Test + +import org.junit.Assert.assertEquals + +class NavigationWalkingOptionsTest { + + @Test + fun alleyBias_walkingOptionSet() { + val options = NavigationWalkingOptions.builder().alleyBias(0.7).build() + + assertEquals(java.lang.Double.valueOf(0.7), options.walkingOptions.alleyBias()) + } + + @Test + fun walkwayBias_walkingOptionSet() { + val options = NavigationWalkingOptions.builder().walkwayBias(0.8).build() + + assertEquals(java.lang.Double.valueOf(0.8), options.walkingOptions.walkwayBias()) + } + + @Test + fun walkingSpeed_walkingOptionSet() { + val options = NavigationWalkingOptions.builder().walkingSpeed(2.0).build() + + assertEquals(java.lang.Double.valueOf(2.0), options.walkingOptions.walkingSpeed()) + } +} From cd4cc015ceca3d4c5dc14623465bf34ac931da3a Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 29 Oct 2019 12:46:20 +0300 Subject: [PATCH 15/75] StepManeuverNavigation, RouteLegNavigation, Route, LegStepNavigation: navigation types and mappers from Maps types --- .../java/com/mapbox/navigation/DefaultDirectionsSession.kt | 0 .../com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt | 1 - .../src/main/java/com/mapbox/navigation/base/route/Router.kt | 1 - .../route/NavigationWalkingOptionsTest.kt | 3 +-- 4 files changed, 1 insertion(+), 4 deletions(-) create mode 100644 libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 0ce6fa0d3d1..e8b87fac8f2 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -3,7 +3,6 @@ package com.mapbox.navigation.route.onboard import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType import com.mapbox.navigation.base.route.Router -import com.mapbox.navigation.base.route.model.RouteOptionsNavigation import com.mapbox.navigation.navigator.MapboxNativeNavigator @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt index ee56314ece8..f7a339b7f19 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/Router.kt @@ -18,4 +18,3 @@ interface Router { fun onFailure(throwable: Throwable) } } - diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt index b96ce94797a..ce2bf6e210e 100644 --- a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt +++ b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt @@ -1,8 +1,7 @@ package com.mapbox.navigation.base.route -import org.junit.Test - import org.junit.Assert.assertEquals +import org.junit.Test class NavigationWalkingOptionsTest { From 6e1b83a2b0c5f0081eacb656d1e679482bc88338 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 29 Oct 2019 18:05:38 +0300 Subject: [PATCH 16/75] Fix tests and import --- libandroid-navigation-ui/build.gradle | 3 +++ .../ui/v5/NavigationViewOfflineRouterTest.java | 2 +- .../navigation/ui/v5/NavigationViewRouterTest.java | 2 +- .../android/navigation/v5/navigation/OfflineRouteTest.kt | 4 ++-- .../android/navigation/v5/route/RouteFetcherTest.kt | 8 ++++---- .../mapbox/navigation/route/hybrid/MapboxHybridRouter.kt | 9 +++++++++ .../route/NavigationRouteTest.kt | 0 7 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteTest.kt diff --git a/libandroid-navigation-ui/build.gradle b/libandroid-navigation-ui/build.gradle index 133297caaa1..3490baf7a0a 100644 --- a/libandroid-navigation-ui/build.gradle +++ b/libandroid-navigation-ui/build.gradle @@ -58,6 +58,9 @@ dependencies { // Navigation SDK api project(':libandroid-navigation') + implementation project(':libnavigation-util') + implementation project(':liblogger') + implementation project(':libnavigation-base') // Mapbox Maps SDK implementation dependenciesList.mapboxMapSdk diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java index c70d2111a21..885f43036e9 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java @@ -1,7 +1,7 @@ package com.mapbox.services.android.navigation.ui.v5; +import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute; import org.junit.Test; diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java index 4e7cb6d6342..20dacc0a4d8 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java @@ -13,7 +13,7 @@ import com.mapbox.api.directions.v5.models.RouteOptions; import com.mapbox.core.constants.Constants; import com.mapbox.geojson.Point; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; +import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.v5.route.RouteFetcher; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt index d296f01d035..dd609876a02 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt @@ -110,10 +110,10 @@ class OfflineRouteTest { assertTrue(offlineUrlDecoded.contains("break;through;;break")) } - private fun provideOnlineRouteBuilder(): com.mapbox.navigation.route.offboard.NavigationRoute.Builder { + private fun provideOnlineRouteBuilder(): NavigationRoute.Builder { val context = mockk() every { context.inferDeviceLocale() } returns Locale.US - return com.mapbox.navigation.route.offboard.NavigationRoute.builder(context) + return NavigationRoute.builder(context) .accessToken("pk.XXX") .origin(Point.fromLngLat(1.0, 2.0)) .addWaypoint(Point.fromLngLat(3.0, 2.0)) diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt index f449bd5f8a1..b3c2b820a10 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt @@ -7,7 +7,7 @@ import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point -import com.mapbox.navigation.route.offboard.NavigationRoute +import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress import com.mapbox.services.android.navigation.v5.utils.RouteUtils import io.mockk.every @@ -26,7 +26,7 @@ class RouteFetcherTest { @Test fun cancelRouteCall_cancelsWithNonNullNavigationRoute() { val context = mockk(relaxed = true) - val navigationRoute = mockk(relaxed = true) + val navigationRoute = mockk(relaxed = true) val routeUtils = mockk(relaxed = true) val routeFetcher = RouteFetcher(context, "pk.xx", routeUtils, navigationRoute) @@ -53,8 +53,8 @@ class RouteFetcherTest { @Test fun findRouteWith_callNavigationRoute() { val context = mockk(relaxed = true) - val navigationRoute = mockk(relaxed = true) - val builder = mockk(relaxed = true) + val navigationRoute = mockk(relaxed = true) + val builder = mockk(relaxed = true) every { builder.build() } returns navigationRoute val routeUtils = mockk(relaxed = true) val routeFetcher = RouteFetcher(context, "pk.xx", routeUtils, navigationRoute) diff --git a/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt b/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt index 38b77590026..cd2f7f423e0 100644 --- a/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt +++ b/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt @@ -16,6 +16,15 @@ class MapboxHybridRouter( callback: Router.Callback ) = Unit + override fun getRoute( + origin: Point, + waypoints: List?, + destination: Point, + listener: Router.RouteListener + ) { + TODO("not implemented") // To change body of created functions use File | Settings | File Templates. + } + override fun cancel() { onboardRouter.cancel() offboardRouter.cancel() diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteTest.kt b/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteTest.kt new file mode 100644 index 00000000000..e69de29bb2d From 8c516475a07be180ebca02707a94dff882757343 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 30 Oct 2019 18:08:21 +0300 Subject: [PATCH 17/75] NavigationRoute: replace import to internal usage --- .../android/navigation/testapp/activity/RerouteActivity.java | 1 + .../activity/navigationui/DualNavigationMapActivity.java | 1 + .../activity/navigationui/EmbeddedNavigationActivity.java | 1 + .../testapp/activity/navigationui/EndNavigationActivity.java | 2 +- .../activity/navigationui/NavigationMapRouteActivity.java | 1 + .../activity/navigationui/WaypointNavigationActivity.java | 2 +- .../activity/navigationui/fragment/NavigationFragment.java | 2 +- .../testapp/example/ui/navigation/ExampleRouteFinder.kt | 1 + .../testapp/example/ui/navigation/OfflineRouteFinder.kt | 1 + 9 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java index 74aac5bec1b..2d2dcb445ae 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java @@ -39,6 +39,7 @@ import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions; import com.mapbox.services.android.navigation.v5.navigation.NavigationEventListener; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.offroute.OffRouteListener; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java index b39987850e2..ce555512e7c 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/DualNavigationMapActivity.java @@ -39,6 +39,7 @@ import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; import com.mapbox.services.android.navigation.ui.v5.route.OnRouteSelectionChangeListener; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import java.lang.ref.WeakReference; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java index 9d05ad95387..6bd7658d2fa 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EmbeddedNavigationActivity.java @@ -38,6 +38,7 @@ import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; import com.mapbox.services.android.navigation.ui.v5.listeners.SpeechAnnouncementListener; import com.mapbox.services.android.navigation.ui.v5.voice.SpeechAnnouncement; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java index bcdc7c985c2..9eb25de08d3 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/EndNavigationActivity.java @@ -21,12 +21,12 @@ import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.ui.v5.NavigationView; import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions; import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback; import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java index faed0db282b..4a81761aefa 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationMapRouteActivity.java @@ -30,6 +30,7 @@ import com.mapbox.mapboxsdk.maps.Style; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import java.util.List; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java index c46dd788aac..56a9b684581 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/WaypointNavigationActivity.java @@ -13,13 +13,13 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.ui.v5.NavigationView; import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions; import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback; import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; import com.mapbox.services.android.navigation.ui.v5.listeners.RouteListener; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java index d09c58cc814..380d504b221 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/fragment/NavigationFragment.java @@ -19,13 +19,13 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.testapp.R; import com.mapbox.services.android.navigation.testapp.activity.navigationui.SimplifiedCallback; import com.mapbox.services.android.navigation.ui.v5.NavigationView; import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions; import com.mapbox.services.android.navigation.ui.v5.OnNavigationReadyCallback; import com.mapbox.services.android.navigation.ui.v5.listeners.NavigationListener; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt index 931eee548de..dc951968d44 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/ExampleRouteFinder.kt @@ -4,6 +4,7 @@ import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsResponse import com.mapbox.geojson.Point import com.mapbox.services.android.navigation.testapp.NavigationApplication +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute import retrofit2.Call import retrofit2.Callback import retrofit2.Response diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt index 6df8574d5d9..6303cc9c2a3 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/example/ui/navigation/OfflineRouteFinder.kt @@ -9,6 +9,7 @@ import com.mapbox.mapboxsdk.Mapbox import com.mapbox.services.android.navigation.testapp.NavigationApplication import com.mapbox.services.android.navigation.testapp.R import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute import com.mapbox.services.android.navigation.v5.navigation.OfflineError import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute import com.mapbox.services.android.navigation.v5.navigation.OnOfflineRouteFoundCallback From 1057139a8ecf8932c96d4aebaa2f410a5bc35d20 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 13:47:27 +0300 Subject: [PATCH 18/75] route common module --- libderections-common/.gitignore | 1 + libderections-common/build.gradle | 25 +++++++++++++++++++ libderections-common/consumer-rules.pro | 0 libderections-common/proguard-rules.pro | 21 ++++++++++++++++ .../src/main/AndroidManifest.xml | 2 ++ libnavigation-base/build.gradle | 2 +- 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 libderections-common/.gitignore create mode 100644 libderections-common/build.gradle create mode 100644 libderections-common/consumer-rules.pro create mode 100644 libderections-common/proguard-rules.pro create mode 100644 libderections-common/src/main/AndroidManifest.xml diff --git a/libderections-common/.gitignore b/libderections-common/.gitignore new file mode 100644 index 00000000000..796b96d1c40 --- /dev/null +++ b/libderections-common/.gitignore @@ -0,0 +1 @@ +/build diff --git a/libderections-common/build.gradle b/libderections-common/build.gradle new file mode 100644 index 00000000000..f1d529c1aed --- /dev/null +++ b/libderections-common/build.gradle @@ -0,0 +1,25 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply from: "${rootDir}/gradle/ktlint.gradle" + +android { + compileSdkVersion androidVersions.compileSdkVersion + buildToolsVersion androidVersions.buildToolsVersion + + defaultConfig { + minSdkVersion androidVersions.minSdkVersion + targetSdkVersion androidVersions.targetSdkVersion + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'proguard-consumer.pro' + } +} + +dependencies { + implementation project(':libnavigation-util') + implementation(project(':libnavigation-base')) + + //ktlint + ktlint dependenciesList.ktlint + + implementation dependenciesList.kotlinStdLib +} \ No newline at end of file diff --git a/libderections-common/consumer-rules.pro b/libderections-common/consumer-rules.pro new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libderections-common/proguard-rules.pro b/libderections-common/proguard-rules.pro new file mode 100644 index 00000000000..f1b424510da --- /dev/null +++ b/libderections-common/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/libderections-common/src/main/AndroidManifest.xml b/libderections-common/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..7c6ac801168 --- /dev/null +++ b/libderections-common/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 9e6c7e06b25..97f5c9b9a4a 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -15,8 +15,8 @@ android { } dependencies { - api dependenciesList.mapboxCore api dependenciesList.mapboxSdkGeoJSON + api dependenciesList.mapboxCore implementation dependenciesList.supportAnnotation From f654ae5282bddced5465caa056063c30f7e11bee Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 17:17:36 +0300 Subject: [PATCH 19/75] moved classes to `libderections-common` module --- .../navigation/ui/v5/NavigationView.java | 1 - .../navigation/ui/v5/NavigationViewModel.java | 1 - .../ui/v5/summary/SummaryBottomSheet.java | 1 - .../v5/navigation/NavigationRouteWaypoint.kt | 9 +++ .../metrics/MapboxMetricsReporter.kt | 3 +- libderections-common/build.gradle | 10 +++ .../route/common}/NavigationRoute.kt | 0 .../route/common}/NavigationRouteCallback.kt | 0 .../common}/NavigationRouteEventListener.kt | 0 .../route/common/NavigationRouteWaypoint.kt | 0 .../route/common/NavigationWalkingOptions.kt | 0 .../route/common/extension}/LocaleEx.kt | 2 +- .../route/common/extension/ModelsMappers.kt | 70 +++++++++++++++++++ .../common/NavigationRouteCallbackTest.kt | 0 .../route/common/NavigationRouteTest.kt | 0 .../common}/NavigationWalkingOptionsTest.kt | 2 +- .../route/hybrid/MapboxHybridRouter.kt | 6 +- libnavigation-base/build.gradle | 2 +- .../route/NavigationRouteWaypoint.kt | 9 --- 19 files changed, 97 insertions(+), 19 deletions(-) create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route => libderections-common/src/main/java/com/mapbox/navigation/route/common}/NavigationRoute.kt (100%) rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route => libderections-common/src/main/java/com/mapbox/navigation/route/common}/NavigationRouteCallback.kt (100%) rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route => libderections-common/src/main/java/com/mapbox/navigation/route/common}/NavigationRouteEventListener.kt (100%) rename libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt => libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt (100%) rename libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt => libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt (100%) rename {libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions => libderections-common/src/main/java/com/mapbox/navigation/route/common/extension}/LocaleEx.kt (92%) create mode 100644 libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt rename libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteTest.kt => libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt (100%) create mode 100644 libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt rename {libnavigation-base/src/test/java/com.mapbox.navigation.base/route => libderections-common/src/test/java/com/mapbox/navigation/route/common}/NavigationWalkingOptionsTest.kt (94%) diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java index 33b877c3670..ee61c4874f0 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java @@ -29,7 +29,6 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; -import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.NavigationCamera; import com.mapbox.services.android.navigation.ui.v5.instruction.ImageCreator; import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionView; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java index eff4eacc3c3..f66f214a96c 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java @@ -17,7 +17,6 @@ import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.offline.OfflineManager; -import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.camera.DynamicCamera; import com.mapbox.services.android.navigation.ui.v5.feedback.FeedbackItem; import com.mapbox.services.android.navigation.ui.v5.instruction.BannerInstructionModel; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java index 0d7ff54818e..36858af49c8 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryBottomSheet.java @@ -15,7 +15,6 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.OnLifecycleEvent; -import com.mapbox.navigation.base.route.extensions.LocaleEx; import com.mapbox.services.android.navigation.ui.v5.NavigationViewModel; import com.mapbox.services.android.navigation.ui.v5.R; import com.mapbox.services.android.navigation.ui.v5.ThemeSwitcher; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt new file mode 100644 index 00000000000..e94afbbb51c --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt @@ -0,0 +1,9 @@ +package com.mapbox.services.android.navigation.v5.navigation + +import com.mapbox.geojson.Point + +data class NavigationRouteWaypoint( + val waypoint: Point, + val bearingAngle: Double?, + val tolerance: Double? +) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index 1ae4e2b115f..3fb78aa5333 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -12,7 +12,8 @@ import com.mapbox.services.android.navigation.v5.utils.thread.WorkThreadHandler * * @since 0.43.0 */ -object MapboxMetricsReporter : MetricsReporter { +object MapboxMetricsReporter : + MetricsReporter { private val gson = Gson() private lateinit var mapboxTelemetry: MapboxTelemetry diff --git a/libderections-common/build.gradle b/libderections-common/build.gradle index f1d529c1aed..e3e8e4394c0 100644 --- a/libderections-common/build.gradle +++ b/libderections-common/build.gradle @@ -22,4 +22,14 @@ dependencies { ktlint dependenciesList.ktlint implementation dependenciesList.kotlinStdLib + + implementation dependenciesList.supportAnnotation + + implementation dependenciesList.mapboxSdkGeoJSON + implementation dependenciesList.mapboxCore + implementation dependenciesList.mapboxSdkServices + + // Unit testing + testImplementation dependenciesList.junit + testImplementation dependenciesList.mockk } \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt similarity index 100% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRoute.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt similarity index 100% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteCallback.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt similarity index 100% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationRouteEventListener.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt similarity index 100% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/NavigationWalkingOptions.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt similarity index 100% rename from libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteCallbackTest.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt similarity index 92% rename from libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt rename to libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt index e736f610e4f..d92027801b6 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/extensions/LocaleEx.kt +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt @@ -1,6 +1,6 @@ @file:JvmName("LocaleEx") -package com.mapbox.navigation.base.route.extensions +package com.mapbox.navigation.route.common.extension import com.mapbox.api.directions.v5.DirectionsCriteria import java.util.Locale diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt new file mode 100644 index 00000000000..fd7103be57d --- /dev/null +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt @@ -0,0 +1,70 @@ +package com.mapbox.navigation.route.common.extension + +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.api.directions.v5.models.LegStep +import com.mapbox.api.directions.v5.models.RouteLeg +import com.mapbox.api.directions.v5.models.StepManeuver +import com.mapbox.navigation.base.route.model.LegStepNavigation +import com.mapbox.navigation.base.route.model.PointNavigation +import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.base.route.model.RouteLegNavigation +import com.mapbox.navigation.base.route.model.StepManeuverNavigation + +fun LegStep.mapToStep() = LegStepNavigation( + distance = distance(), + duration = duration(), + geometry = geometry(), + name = name(), + ref = ref(), + destinations = destinations(), + mode = mode(), + pronunciation = pronunciation(), + rotaryName = rotaryName(), + rotaryPronunciation = rotaryPronunciation(), + maneuver = maneuver().mapToManeuverStep() +) + +fun DirectionsRoute.mapToRoute() = Route( + routeIndex = routeIndex(), + distance = distance(), + duration = duration()?.toLong(), + geometry = geometry(), + weight = weight(), + weightName = weightName(), + voiceLanguage = voiceLanguage(), + legs = legs()?.map { it.mapToLeg() } +) + +fun RouteLeg.mapToLeg() = RouteLegNavigation( + distance = distance(), + duration = duration(), + summary = summary(), + steps = steps()?.map { it.mapToStep() } +) + +fun StepManeuver.mapToManeuverStep() = StepManeuverNavigation( + location = PointNavigation(location().longitude(), location().latitude()), + bearingBefore = bearingBefore(), + bearingAfter = bearingAfter(), + type = if (typesStepManeuverNavigation.contains(type())) type() else null, + exit = exit() +) + +private val typesStepManeuverNavigation = arrayOf( + StepManeuverNavigation.TURN, + StepManeuverNavigation.NEW_NAME, + StepManeuverNavigation.DEPART, + StepManeuverNavigation.ARRIVE, + StepManeuverNavigation.MERGE, + StepManeuverNavigation.ON_RAMP, + StepManeuverNavigation.OFF_RAMP, + StepManeuverNavigation.FORK, + StepManeuverNavigation.END_OF_ROAD, + StepManeuverNavigation.CONTINUE, + StepManeuverNavigation.ROUNDABOUT, + StepManeuverNavigation.ROTARY, + StepManeuverNavigation.ROUNDABOUT_TURN, + StepManeuverNavigation.NOTIFICATION, + StepManeuverNavigation.EXIT_ROUNDABOUT, + StepManeuverNavigation.EXIT_ROTARY +) diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteTest.kt b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt similarity index 100% rename from libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationRouteTest.kt rename to libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt similarity index 94% rename from libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt rename to libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt index ce2bf6e210e..c152f0aa17f 100644 --- a/libnavigation-base/src/test/java/com.mapbox.navigation.base/route/NavigationWalkingOptionsTest.kt +++ b/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.navigation.base.route +package com.mapbox.navigation.route.common import org.junit.Assert.assertEquals import org.junit.Test diff --git a/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt b/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt index cd2f7f423e0..4d72ab18fc8 100644 --- a/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt +++ b/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt @@ -17,9 +17,9 @@ class MapboxHybridRouter( ) = Unit override fun getRoute( - origin: Point, - waypoints: List?, - destination: Point, + origin: PointNavigation, + waypoints: List?, + destination: PointNavigation, listener: Router.RouteListener ) { TODO("not implemented") // To change body of created functions use File | Settings | File Templates. diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 97f5c9b9a4a..9e6c7e06b25 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -15,8 +15,8 @@ android { } dependencies { - api dependenciesList.mapboxSdkGeoJSON api dependenciesList.mapboxCore + api dependenciesList.mapboxSdkGeoJSON implementation dependenciesList.supportAnnotation diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt index 190bcf3e730..e69de29bb2d 100644 --- a/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt +++ b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt @@ -1,9 +0,0 @@ -package com.mapbox.navigation.route - -import com.mapbox.geojson.Point - -data class NavigationRouteWaypoint( - val waypoint: Point, - val bearingAngle: Double?, - val tolerance: Double? -) From 5e5180341db67c15158e5b56ef440a002de3e5ab Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 17:24:24 +0300 Subject: [PATCH 20/75] minor changes --- .../utils/exceptions/NavigationException.kt | 14 ++++++++++++++ settings.gradle | 1 + 2 files changed, 15 insertions(+) diff --git a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt index e69de29bb2d..49208c3d55b 100644 --- a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt +++ b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/exceptions/NavigationException.kt @@ -0,0 +1,14 @@ +package com.mapbox.navigation.utils.exceptions + +/** + * Generic Exception for all things Mapbox Navigation. + * + * A form of `Throwable` that indicates conditions that a reasonable application might + * want to catch. + * + * @param message the detail message (which is saved for later retrieval by the + * [Throwable.message] method). + * + * @since 0.2.0 + */ +class NavigationException(message: String) : RuntimeException(message) diff --git a/settings.gradle b/settings.gradle index 6b373e90b64..7483701d2b2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,6 +4,7 @@ include ':app', ':libandroid-navigation-ui', ':libnavigator', ':libnavigation-base', + ':libderections-common', ':libdirections-onboard', ':libdirections-offboard', ':libdirections-hybrid', From 400c49ef1c63076bd7cbbbcff3f0a5e4ae8f1fe3 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 17:54:36 +0300 Subject: [PATCH 21/75] DefaultDirectionsSession: lint refactored --- .../navigation/DefaultDirectionsSession.kt | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt index e69de29bb2d..a32c05f1cc2 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt @@ -0,0 +1,67 @@ +package com.mapbox.navigation + +import com.mapbox.navigation.base.route.DirectionsSession +import com.mapbox.navigation.base.route.Router +import com.mapbox.navigation.base.route.model.PointNavigation +import com.mapbox.navigation.base.route.model.Route +import java.util.concurrent.CopyOnWriteArrayList + +class DefaultDirectionsSession( + private val router: Router, + origin: PointNavigation, + waypoints: List +) : DirectionsSession { + + override var currentRoute: Route? = null + set(value) { + if (field == value) { + return + } + field = value + routeObservers.forEach { it.onRouteChanged(value) } + } + + override var origin: PointNavigation = origin + set(value) { + if (field == value) { + return + } + field = value + requestRoute() + } + + override var waypoints: List = waypoints + set(value) { + if (field == value) { + return + } + field = value + requestRoute() + } + + private val routeObservers = CopyOnWriteArrayList() + + init { + requestRoute() + } + + override fun registerRouteObserver(routeObserver: DirectionsSession.RouteObserver) { + routeObservers.add(routeObserver) + routeObserver.onRouteChanged(currentRoute) + } + + override fun unregisterRouteObserver(routeObserver: DirectionsSession.RouteObserver) { + routeObservers.remove(routeObserver) + } + + override fun cancel() { + router.cancel() + } + + private fun requestRoute() { + currentRoute = null + router.getRoute(origin, waypoints) { + currentRoute = it + } + } +} From 100fa92b956b23ac61f9868afcd997a354e7c0bb Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 17:56:32 +0300 Subject: [PATCH 22/75] Router: removed redundant func --- .../mapbox/navigation/route/hybrid/MapboxHybridRouter.kt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt b/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt index 4d72ab18fc8..38b77590026 100644 --- a/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt +++ b/libdirections-hybrid/src/main/java/com/mapbox/navigation/route/hybrid/MapboxHybridRouter.kt @@ -16,15 +16,6 @@ class MapboxHybridRouter( callback: Router.Callback ) = Unit - override fun getRoute( - origin: PointNavigation, - waypoints: List?, - destination: PointNavigation, - listener: Router.RouteListener - ) { - TODO("not implemented") // To change body of created functions use File | Settings | File Templates. - } - override fun cancel() { onboardRouter.cancel() offboardRouter.cancel() From 630611b67c049a5476636414bc8a14c6f9f6939e Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 31 Oct 2019 19:41:45 +0300 Subject: [PATCH 23/75] DirectionsSession: change api, fix tests --- .../navigation/DefaultDirectionsSession.kt | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt index a32c05f1cc2..40823fb6b9c 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt @@ -9,7 +9,8 @@ import java.util.concurrent.CopyOnWriteArrayList class DefaultDirectionsSession( private val router: Router, origin: PointNavigation, - waypoints: List + waypoints: List, + destination: PointNavigation ) : DirectionsSession { override var currentRoute: Route? = null @@ -39,6 +40,15 @@ class DefaultDirectionsSession( requestRoute() } + override var destination: PointNavigation = destination + set(value) { + if (value == field) { + return + } + field = value + requestRoute() + } + private val routeObservers = CopyOnWriteArrayList() init { @@ -60,8 +70,14 @@ class DefaultDirectionsSession( private fun requestRoute() { currentRoute = null - router.getRoute(origin, waypoints) { - currentRoute = it - } + router.getRoute(origin, waypoints, destination, object : Router.RouteListener { + override fun onRouteReady(route: Route) { + currentRoute = route + } + + override fun onFailure(throwable: Throwable) { + // TODO should be callback for error fetching callback + } + }) } } From 042e01329197181cdd03c7c2d53abbb69cf5e43c Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 4 Nov 2019 12:36:29 +0300 Subject: [PATCH 24/75] Return dependecies to core api --- .../navigation/DefaultDirectionsSession.kt | 14 ++--- .../metrics/MapboxMetricsReporter.kt | 3 +- libderections-common/build.gradle | 1 + .../route/common/extension/ModelsMappers.kt | 57 +------------------ libnavigation-base/build.gradle | 1 + .../directions/session/DirectionsSession.kt | 0 6 files changed, 11 insertions(+), 65 deletions(-) create mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/DirectionsSession.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt index 40823fb6b9c..ac21e90dc70 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt @@ -1,16 +1,16 @@ package com.mapbox.navigation +import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.DirectionsSession import com.mapbox.navigation.base.route.Router -import com.mapbox.navigation.base.route.model.PointNavigation import com.mapbox.navigation.base.route.model.Route import java.util.concurrent.CopyOnWriteArrayList class DefaultDirectionsSession( private val router: Router, - origin: PointNavigation, - waypoints: List, - destination: PointNavigation + origin: Point, + waypoints: List, + destination: Point ) : DirectionsSession { override var currentRoute: Route? = null @@ -22,7 +22,7 @@ class DefaultDirectionsSession( routeObservers.forEach { it.onRouteChanged(value) } } - override var origin: PointNavigation = origin + override var origin: Point = origin set(value) { if (field == value) { return @@ -31,7 +31,7 @@ class DefaultDirectionsSession( requestRoute() } - override var waypoints: List = waypoints + override var waypoints: List = waypoints set(value) { if (field == value) { return @@ -40,7 +40,7 @@ class DefaultDirectionsSession( requestRoute() } - override var destination: PointNavigation = destination + override var destination: Point = destination set(value) { if (value == field) { return diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index 3fb78aa5333..1ae4e2b115f 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -12,8 +12,7 @@ import com.mapbox.services.android.navigation.v5.utils.thread.WorkThreadHandler * * @since 0.43.0 */ -object MapboxMetricsReporter : - MetricsReporter { +object MapboxMetricsReporter : MetricsReporter { private val gson = Gson() private lateinit var mapboxTelemetry: MapboxTelemetry diff --git a/libderections-common/build.gradle b/libderections-common/build.gradle index e3e8e4394c0..3d94498b528 100644 --- a/libderections-common/build.gradle +++ b/libderections-common/build.gradle @@ -17,6 +17,7 @@ android { dependencies { implementation project(':libnavigation-util') implementation(project(':libnavigation-base')) + implementation(project(':libnavigation-metrics')) //ktlint ktlint dependenciesList.ktlint diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt index fd7103be57d..d20e139cd19 100644 --- a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt +++ b/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt @@ -1,28 +1,7 @@ package com.mapbox.navigation.route.common.extension import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.LegStep -import com.mapbox.api.directions.v5.models.RouteLeg -import com.mapbox.api.directions.v5.models.StepManeuver -import com.mapbox.navigation.base.route.model.LegStepNavigation -import com.mapbox.navigation.base.route.model.PointNavigation import com.mapbox.navigation.base.route.model.Route -import com.mapbox.navigation.base.route.model.RouteLegNavigation -import com.mapbox.navigation.base.route.model.StepManeuverNavigation - -fun LegStep.mapToStep() = LegStepNavigation( - distance = distance(), - duration = duration(), - geometry = geometry(), - name = name(), - ref = ref(), - destinations = destinations(), - mode = mode(), - pronunciation = pronunciation(), - rotaryName = rotaryName(), - rotaryPronunciation = rotaryPronunciation(), - maneuver = maneuver().mapToManeuverStep() -) fun DirectionsRoute.mapToRoute() = Route( routeIndex = routeIndex(), @@ -32,39 +11,5 @@ fun DirectionsRoute.mapToRoute() = Route( weight = weight(), weightName = weightName(), voiceLanguage = voiceLanguage(), - legs = legs()?.map { it.mapToLeg() } -) - -fun RouteLeg.mapToLeg() = RouteLegNavigation( - distance = distance(), - duration = duration(), - summary = summary(), - steps = steps()?.map { it.mapToStep() } -) - -fun StepManeuver.mapToManeuverStep() = StepManeuverNavigation( - location = PointNavigation(location().longitude(), location().latitude()), - bearingBefore = bearingBefore(), - bearingAfter = bearingAfter(), - type = if (typesStepManeuverNavigation.contains(type())) type() else null, - exit = exit() -) - -private val typesStepManeuverNavigation = arrayOf( - StepManeuverNavigation.TURN, - StepManeuverNavigation.NEW_NAME, - StepManeuverNavigation.DEPART, - StepManeuverNavigation.ARRIVE, - StepManeuverNavigation.MERGE, - StepManeuverNavigation.ON_RAMP, - StepManeuverNavigation.OFF_RAMP, - StepManeuverNavigation.FORK, - StepManeuverNavigation.END_OF_ROAD, - StepManeuverNavigation.CONTINUE, - StepManeuverNavigation.ROUNDABOUT, - StepManeuverNavigation.ROTARY, - StepManeuverNavigation.ROUNDABOUT_TURN, - StepManeuverNavigation.NOTIFICATION, - StepManeuverNavigation.EXIT_ROUNDABOUT, - StepManeuverNavigation.EXIT_ROTARY + legs = legs() ) diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 9e6c7e06b25..7abd0b6162d 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -17,6 +17,7 @@ android { dependencies { api dependenciesList.mapboxCore api dependenciesList.mapboxSdkGeoJSON + api dependenciesList.mapboxSdkServices implementation dependenciesList.supportAnnotation diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/DirectionsSession.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/DirectionsSession.kt new file mode 100644 index 00000000000..e69de29bb2d From 09c150743d7a30ca0f779a76d1eee19c56bb1546 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 6 Nov 2019 11:35:14 +0300 Subject: [PATCH 25/75] - renamed module `libderections-common` -> `libdirections-common`; - removed unnecessary gradle's dependencies --- libderections-common/.gitignore | 1 - libderections-common/build.gradle | 36 ------------------- libderections-common/proguard-rules.pro | 21 ----------- .../src/main/AndroidManifest.xml | 2 -- .../route/common/NavigationRoute.kt | 0 libdirections-common/.gitignore | 1 + libdirections-common/build.gradle | 36 +++++++++++++++++++ .../consumer-rules.pro | 0 libdirections-common/proguard-rules.pro | 21 +++++++++++ .../src/main/AndroidManifest.xml | 2 ++ .../route/common/NavigationRouteCallback.kt | 0 .../common/NavigationRouteEventListener.kt | 0 .../route/common/NavigationRouteWaypoint.kt | 0 .../route/common/NavigationWalkingOptions.kt | 0 .../route/common/extension/LocaleEx.kt | 0 .../route/common/extension/ModelsMappers.kt | 0 .../common/NavigationRouteCallbackTest.kt | 0 .../route/common/NavigationRouteTest.kt | 0 .../common/NavigationWalkingOptionsTest.kt | 0 libnavigation-base/build.gradle | 1 - settings.gradle | 2 +- 21 files changed, 61 insertions(+), 62 deletions(-) delete mode 100644 libderections-common/.gitignore delete mode 100644 libderections-common/build.gradle delete mode 100644 libderections-common/proguard-rules.pro delete mode 100644 libderections-common/src/main/AndroidManifest.xml delete mode 100644 libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt rename {libderections-common => libdirections-common}/consumer-rules.pro (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt (100%) rename {libderections-common => libdirections-common}/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt (100%) rename {libderections-common => libdirections-common}/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt (100%) rename {libderections-common => libdirections-common}/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt (100%) rename {libderections-common => libdirections-common}/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt (100%) diff --git a/libderections-common/.gitignore b/libderections-common/.gitignore deleted file mode 100644 index 796b96d1c40..00000000000 --- a/libderections-common/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/libderections-common/build.gradle b/libderections-common/build.gradle deleted file mode 100644 index 3d94498b528..00000000000 --- a/libderections-common/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply from: "${rootDir}/gradle/ktlint.gradle" - -android { - compileSdkVersion androidVersions.compileSdkVersion - buildToolsVersion androidVersions.buildToolsVersion - - defaultConfig { - minSdkVersion androidVersions.minSdkVersion - targetSdkVersion androidVersions.targetSdkVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'proguard-consumer.pro' - } -} - -dependencies { - implementation project(':libnavigation-util') - implementation(project(':libnavigation-base')) - implementation(project(':libnavigation-metrics')) - - //ktlint - ktlint dependenciesList.ktlint - - implementation dependenciesList.kotlinStdLib - - implementation dependenciesList.supportAnnotation - - implementation dependenciesList.mapboxSdkGeoJSON - implementation dependenciesList.mapboxCore - implementation dependenciesList.mapboxSdkServices - - // Unit testing - testImplementation dependenciesList.junit - testImplementation dependenciesList.mockk -} \ No newline at end of file diff --git a/libderections-common/proguard-rules.pro b/libderections-common/proguard-rules.pro deleted file mode 100644 index f1b424510da..00000000000 --- a/libderections-common/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/libderections-common/src/main/AndroidManifest.xml b/libderections-common/src/main/AndroidManifest.xml deleted file mode 100644 index 7c6ac801168..00000000000 --- a/libderections-common/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt b/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-common/.gitignore b/libdirections-common/.gitignore index e69de29bb2d..796b96d1c40 100644 --- a/libdirections-common/.gitignore +++ b/libdirections-common/.gitignore @@ -0,0 +1 @@ +/build diff --git a/libdirections-common/build.gradle b/libdirections-common/build.gradle index e69de29bb2d..3d94498b528 100644 --- a/libdirections-common/build.gradle +++ b/libdirections-common/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply from: "${rootDir}/gradle/ktlint.gradle" + +android { + compileSdkVersion androidVersions.compileSdkVersion + buildToolsVersion androidVersions.buildToolsVersion + + defaultConfig { + minSdkVersion androidVersions.minSdkVersion + targetSdkVersion androidVersions.targetSdkVersion + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'proguard-consumer.pro' + } +} + +dependencies { + implementation project(':libnavigation-util') + implementation(project(':libnavigation-base')) + implementation(project(':libnavigation-metrics')) + + //ktlint + ktlint dependenciesList.ktlint + + implementation dependenciesList.kotlinStdLib + + implementation dependenciesList.supportAnnotation + + implementation dependenciesList.mapboxSdkGeoJSON + implementation dependenciesList.mapboxCore + implementation dependenciesList.mapboxSdkServices + + // Unit testing + testImplementation dependenciesList.junit + testImplementation dependenciesList.mockk +} \ No newline at end of file diff --git a/libderections-common/consumer-rules.pro b/libdirections-common/consumer-rules.pro similarity index 100% rename from libderections-common/consumer-rules.pro rename to libdirections-common/consumer-rules.pro diff --git a/libdirections-common/proguard-rules.pro b/libdirections-common/proguard-rules.pro index e69de29bb2d..f1b424510da 100644 --- a/libdirections-common/proguard-rules.pro +++ b/libdirections-common/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/libdirections-common/src/main/AndroidManifest.xml b/libdirections-common/src/main/AndroidManifest.xml index e69de29bb2d..7c6ac801168 100644 --- a/libdirections-common/src/main/AndroidManifest.xml +++ b/libdirections-common/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt diff --git a/libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt similarity index 100% rename from libderections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt rename to libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt similarity index 100% rename from libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt rename to libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt similarity index 100% rename from libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt rename to libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt diff --git a/libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt similarity index 100% rename from libderections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt rename to libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 7abd0b6162d..e76035a320b 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -16,7 +16,6 @@ android { dependencies { api dependenciesList.mapboxCore - api dependenciesList.mapboxSdkGeoJSON api dependenciesList.mapboxSdkServices implementation dependenciesList.supportAnnotation diff --git a/settings.gradle b/settings.gradle index 7483701d2b2..386376805e2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,7 +4,7 @@ include ':app', ':libandroid-navigation-ui', ':libnavigator', ':libnavigation-base', - ':libderections-common', + ':libdirections-common', ':libdirections-onboard', ':libdirections-offboard', ':libdirections-hybrid', From fcb2e4390bb87efe0e0920889eb58f4c2a8bb128 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 4 Nov 2019 18:57:45 +0300 Subject: [PATCH 26/75] Navigation onboard: initial setup --- libdirections-onboard/build.gradle | 1 + .../route/onboard/MapboxOnboardRouter.kt | 40 +++ .../route/onboard/OfflineCriteria.kt | 49 ++++ .../route/onboard/OfflineNavigator.kt | 75 ++++++ .../navigation/route/onboard/OfflineRoute.kt | 250 ++++++++++++++++++ .../route/onboard/OfflineTileVersions.kt | 47 ++++ .../onboard/OnOfflineRouteFoundCallback.kt | 24 ++ .../OnOfflineTilesConfiguredCallback.kt | 27 ++ .../onboard/OnOfflineTilesRemovedCallback.kt | 18 ++ .../onboard/OnTileVersionsFoundCallback.kt | 25 ++ .../route/onboard/model/OfflineError.kt | 5 + .../route/onboard/model/OfflineRouteError.kt | 10 + .../route/onboard/task/ConfigureRouterTask.kt | 25 ++ .../onboard/task/OfflineRouteRetrievalTask.kt | 60 +++++ .../route/onboard/task/RemoveTilesTask.kt | 20 ++ 15 files changed, 676 insertions(+) create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineCriteria.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTask.kt diff --git a/libdirections-onboard/build.gradle b/libdirections-onboard/build.gradle index feb58a297d1..90c9d4eb117 100644 --- a/libdirections-onboard/build.gradle +++ b/libdirections-onboard/build.gradle @@ -27,6 +27,7 @@ dependencies { ktlint dependenciesList.ktlint implementation dependenciesList.kotlinStdLib + implementation dependenciesList.supportAnnotation testImplementation dependenciesList.mockk testImplementation dependenciesList.junit diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index e8b87fac8f2..dc9de44267d 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -4,10 +4,50 @@ import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.navigator.MapboxNativeNavigator +import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl +import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router { + companion object { + + private const val TILE_PATH_NAME = "tiles" + } + + // private val offlineNavigator: OfflineNavigator + private val tilePath: String + private val offlineTileVersions: OfflineTileVersions + private val navigator: MapboxNativeNavigator + + /** + * Creates an offline router which uses the specified offline path for storing and retrieving + * data. + * + * @param offlinePath directory path where the offline data is located + */ + constructor(offlinePath: String) { + val tileDir = File(offlinePath, TILE_PATH_NAME) + if (!tileDir.exists()) { + tileDir.mkdirs() + } + + this.tilePath = tileDir.absolutePath + offlineTileVersions = OfflineTileVersions() + this.navigator = MapboxNativeNavigatorImpl + } + + // Package private for testing purposes + internal constructor( + tilePath: String, + offlineTileVersions: OfflineTileVersions, + navigator: MapboxNativeNavigator + ) { + this.tilePath = tilePath + this.offlineTileVersions = offlineTileVersions + this.navigator = navigator + } + override fun getRoute( routeOptions: RouteOptionsNavigation, callback: Router.Callback diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineCriteria.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineCriteria.kt new file mode 100644 index 00000000000..9a47f080ae1 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineCriteria.kt @@ -0,0 +1,49 @@ +package com.mapbox.navigation.route.onboard + +object OfflineCriteria { + + /** + * BicycleType parameter in the Directions API. + */ + enum class BicycleType(val type: String) { + /** + * Bicycle type for road bike. + */ + ROAD("Road"), + + /** + * Bicycle type for hybrid bike. + */ + HYBRID("Hybrid"), + + /** + * Bicycle type for city bike. + */ + CITY("City"), + + /** + * Bicycle type for cross bike. + */ + CROSS("Cross"), + + /** + * Bicycle type for mountain bike. + */ + MOUNTAIN("Mountain"); + } + + /** + * WaypointType parameter in the Directions API. + */ + enum class WaypointType(val type: String) { + /** + * Break waypoint type. + */ + BREAK("break"), + + /** + * Through waypoint type. + */ + THROUGH("through") + } +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt new file mode 100644 index 00000000000..97d7303bcae --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt @@ -0,0 +1,75 @@ +package com.mapbox.navigation.route.onboard + +// import com.mapbox.geojson.Point +// import com.mapbox.navigation.route.onboard.task.ConfigureRouterTask +// import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask +// import com.mapbox.navigation.route.onboard.task.RemoveTilesTask +// import com.mapbox.navigator.Navigator +// +// internal interface OfflineNavigator { +// +// /** +// * Configures the navigator for getting offline routes +// * +// * @param tilePath directory path where the tiles are located +// * @param callback a callback that will be fired when the offline data is initialized and +// * [MapboxOfflineRouter.findRoute] +// * can be called safely +// */ +// fun configure(tilePath: String, callback: OnOfflineTilesConfiguredCallback) +// +// /** +// * Uses libvalhalla and local tile data to generate mapbox-directions-api-like json +// * +// * @param offlineRoute an offline navigation route +// * @param callback which receives a RouterResult object with the json and a success/fail bool +// */ +// fun retrieveRouteFor(offlineRoute: OfflineRoute, callback: OnOfflineRouteFoundCallback) +// +// /** +// * Unpacks tar file into a specified destination path. +// * +// * @param tarPath to find file to be unpacked +// * @param destinationPath where the tar will be unpacked +// */ +// fun unpackTiles(tarPath: String, destinationPath: String) +// +// /** +// * Removes tiles within / intersected by a bounding box +// * +// * @param tilePath directory path where the tiles are located +// * @param southwest lower left [Point] of the bounding box +// * @param northeast upper right [Point] of the bounding box +// * @param callback a callback that will be fired when the routing tiles have been removed completely +// */ +// fun removeTiles( +// tilePath: String, +// southwest: Point, +// northeast: Point, +// callback: OnOfflineTilesRemovedCallback +// ) +// +// class OfflineNavigatorImpl(private val navigator: Navigator): OfflineNavigator { +// +// override fun configure(tilePath: String, callback: OnOfflineTilesConfiguredCallback) { +// ConfigureRouterTask(navigator, tilePath, callback).execute() +// } +// +// override fun retrieveRouteFor(offlineRoute: OfflineRoute, callback: OnOfflineRouteFoundCallback) { +// OfflineRouteRetrievalTask(navigator, callback).execute(offlineRoute) +// } +// +// override fun unpackTiles(tarPath: String, destinationPath: String) { +// navigator.unpackTiles(tarPath, destinationPath) +// } +// +// override fun removeTiles( +// tilePath: String, +// southwest: Point, +// northeast: Point, +// callback: OnOfflineTilesRemovedCallback +// ) { +// RemoveTilesTask(navigator, tilePath, southwest, northeast, callback).execute() +// } +// } +// } \ No newline at end of file diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt new file mode 100644 index 00000000000..56538d688e5 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt @@ -0,0 +1,250 @@ +package com.mapbox.navigation.route.onboard + +import androidx.annotation.FloatRange +import com.mapbox.api.directions.v5.models.DirectionsResponse +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.core.exceptions.ServicesException +import com.mapbox.navigation.utils.extensions.ifNonNull +import com.mapbox.navigator.RouterResult +import okhttp3.HttpUrl + +/** + * The [OfflineRoute] class wraps the [NavigationRoute] class with parameters which + * could be set in order for an offline navigation session to successfully begin. + */ +class OfflineRoute +private constructor( + private val onlineRoute: NavigationRoute, + bicycleType: OfflineCriteria.BicycleType?, + private val cyclingSpeed: Float?, + private val cyclewayBias: Float?, + private val hillBias: Float?, + private val ferryBias: Float?, + private val roughSurfaceBias: Float?, + waypointTypes: List? +) { + private val bicycleType: String? + private val waypointTypes: String? + + init { + this.bicycleType = bicycleType?.type + this.waypointTypes = checkWaypointTypes(waypointTypes) + } + + companion object { + + private const val BICYCLE_TYPE_QUERY_PARAMETER = "bicycle_type" + private const val CYCLING_SPEED_QUERY_PARAMETER = "cycling_speed" + private const val CYCLEWAY_BIAS_QUERY_PARAMETER = "cycleway_bias" + private const val HILL_BIAS_QUERY_PARAMETER = "hill_bias" + private const val FERRY_BIAS_QUERY_PARAMETER = "ferry_bias" + private const val ROUGH_SURFACE_BIAS_QUERY_PARAMETER = "rough_surface_bias" + private const val WAYPOINT_TYPES_QUERY_PARAMETER = "waypoint_types" + + /** + * Build a new [OfflineRoute] object with the proper offline navigation parameters already setup. + * + * @return a [Builder] object for creating this object + */ + @JvmStatic + fun builder(onlineRouteBuilder: NavigationRoute.Builder): Builder { + return Builder(onlineRouteBuilder) + } + } + + /** + * Builds a URL string for offline. + * + * @return the offline url string + */ + fun buildUrl(): String { + val onlineUrl = onlineRoute.call.request().url().toString() + return buildOfflineUrl(onlineUrl) + } + + internal fun retrieveOfflineRoute(response: RouterResult): DirectionsRoute? { + return if (!response.success) { + null + } else { + obtainRouteFor(response.json) + } + } + + private fun checkWaypointTypes(waypointTypes: List?): String? { + return if (waypointTypes.isNullOrEmpty()) { + null + } else { + formatWaypointTypes(waypointTypes) + ?: throw ServicesException("All waypoint types values must be one of break, through or null") + } + } + + private fun formatWaypointTypes(waypointTypesToFormat: List): String? { + val waypointTypes = waypointTypesToFormat.map { it?.type ?: "" }.toTypedArray() + return waypointTypes.joinTo(StringBuilder(), ";").toString() + } + + private fun buildOfflineUrl(onlineUrl: String): String { + val offlineUrlBuilder = HttpUrl.get(onlineUrl).newBuilder() + ifNonNull(bicycleType) { + offlineUrlBuilder.addQueryParameter(BICYCLE_TYPE_QUERY_PARAMETER, it) + } + + ifNonNull(cyclingSpeed) { + offlineUrlBuilder.addQueryParameter(CYCLING_SPEED_QUERY_PARAMETER, it.toString()) + } + + ifNonNull(cyclewayBias) { + offlineUrlBuilder.addQueryParameter(CYCLEWAY_BIAS_QUERY_PARAMETER, it.toString()) + } + + ifNonNull(hillBias) { + offlineUrlBuilder.addQueryParameter(HILL_BIAS_QUERY_PARAMETER, it.toString()) + } + + ifNonNull(ferryBias) { + offlineUrlBuilder.addQueryParameter(FERRY_BIAS_QUERY_PARAMETER, it.toString()) + } + + ifNonNull(roughSurfaceBias) { + offlineUrlBuilder.addQueryParameter(ROUGH_SURFACE_BIAS_QUERY_PARAMETER, it.toString()) + } + + ifNonNull(waypointTypes) { + offlineUrlBuilder.addQueryParameter(WAYPOINT_TYPES_QUERY_PARAMETER, it) + } + return offlineUrlBuilder.build().toString() + } + + private fun obtainRouteFor(response: String): DirectionsRoute? = + DirectionsResponse.fromJson(response).routes().firstOrNull() + + class Builder internal constructor(private val navigationRouteBuilder: NavigationRoute.Builder) { + private var bicycleType: OfflineCriteria.BicycleType? = null + private var cyclingSpeed: Float? = null + private var cyclewayBias: Float? = null + private var hillBias: Float? = null + private var ferryBias: Float? = null + private var roughSurfaceBias: Float? = null + private var waypointTypes: List? = null + + /** + * The type of bicycle, either Road, Hybrid, City, Cross, Mountain. + * The default type is Hybrid. + * + * @param bicycleType the type of bicycle + * @return this builder for chaining options together + */ + fun bicycleType(bicycleType: OfflineCriteria.BicycleType?): Builder { + this.bicycleType = bicycleType + return this + } + + /** + * Cycling speed is the average travel speed along smooth, flat roads. This is meant to be the + * speed a rider can comfortably maintain over the desired distance of the route. It can be + * modified (in the costing method) by surface type in conjunction with bicycle type and + * (coming soon) by hilliness of the road section. When no speed is specifically provided, the + * default speed is determined by the bicycle type and are as follows: Road = 25 KPH (15.5 MPH), + * Cross = 20 KPH (13 MPH), Hybrid/City = 18 KPH (11.5 MPH), and Mountain = 16 KPH (10 MPH). + * + * @param cyclingSpeed in kmh + * @return this builder for chaining options together + */ + fun cyclingSpeed(@FloatRange(from = 5.0, to = 60.0) cyclingSpeed: Float?): Builder { + this.cyclingSpeed = cyclingSpeed + return this + } + + /** + * A cyclist's propensity to use roads alongside other vehicles. This is a range of values from -1 + * to 1, where -1 attempts to avoid roads and stay on cycleways and paths, and 1 indicates the + * rider is more comfortable riding on roads. Based on the use_roads factor, roads with certain + * classifications and higher speeds are penalized in an attempt to avoid them when finding the + * best path. The default value is 0. + * + * @param cyclewayBias a cyclist's propensity to use roads alongside other vehicles + * @return this builder for chaining options together + */ + fun cyclewayBias(@FloatRange(from = -1.0, to = 1.0) cyclewayBias: Float?): Builder { + this.cyclewayBias = cyclewayBias + return this + } + + /** + * A cyclist's desire to tackle hills in their routes. This is a range of values from -1 to 1, + * where -1 attempts to avoid hills and steep grades even if it means a longer (time and + * distance) path, while 1 indicates the rider does not fear hills and steeper grades. Based on + * the hill bias factor, penalties are applied to roads based on elevation change and grade. + * These penalties help the path avoid hilly roads in favor of flatter roads or less steep + * grades where available. Note that it is not always possible to find alternate paths to avoid + * hills (for example when route locations are in mountainous areas). The default value is 0. + * + * @param hillBias a cyclist's desire to tackle hills in their routes + * @return this builder for chaining options together + */ + fun hillBias(@FloatRange(from = -1.0, to = 1.0) hillBias: Float?): Builder { + this.hillBias = hillBias + return this + } + + /** + * This value indicates the willingness to take ferries. This is a range of values between -1 and 1. + * Values near -1 attempt to avoid ferries and values near 1 will favor ferries. Note that + * sometimes ferries are required to complete a route so values of -1 are not guaranteed to avoid + * ferries entirely. The default value is 0. + * + * @param ferryBias the willingness to take ferries + * @return this builder for chaining options together + */ + fun ferryBias(@FloatRange(from = -1.0, to = 1.0) ferryBias: Float?): Builder { + this.ferryBias = ferryBias + return this + } + + /** + * This value is meant to represent how much a cyclist wants to favor or avoid roads with poor/rough + * surfaces relative to the bicycle type being used. This is a range of values between -1 and 1. + * When the value approaches -1, we attempt to penalize heavier or avoid roads with rough surface types + * so that they are only taken if they significantly improve travel time; only bicycle + * speed on each surface is taken into account. As the value approaches 1, we will favor rough surfaces. + * When the value is equal to -1, all bad surfaces are completely disallowed from routing, + * including start and end points. The default value is 0. + * + * @param roughSurfaceBias how much a cyclist wants to avoid roads with poor surfaces + * @return this builder for chaining options together + */ + fun roughSurfaceBias(@FloatRange(from = -1.0, to = 1.0) roughSurfaceBias: Float?): Builder { + this.roughSurfaceBias = roughSurfaceBias + return this + } + + /** + * The same waypoint types the user originally made when the request was made. + * + * @param waypointTypes break, through or omitted null + * @return this builder for chaining options together + */ + fun waypointTypes(waypointTypes: List?): Builder { + this.waypointTypes = waypointTypes + return this + } + + /** + * This uses the provided parameters set using the [Builder] and adds the required + * settings for offline navigation to work correctly. + * + * @return a new instance of [OfflineRoute] + */ + fun build(): OfflineRoute = OfflineRoute( + navigationRouteBuilder.build(), + bicycleType, + cyclingSpeed, + cyclewayBias, + hillBias, + ferryBias, + roughSurfaceBias, + waypointTypes + ) + } +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt new file mode 100644 index 00000000000..1a9d6228580 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt @@ -0,0 +1,47 @@ +package com.mapbox.navigation.route.onboard + +import com.mapbox.api.routetiles.v1.versions.MapboxRouteTileVersions +import com.mapbox.api.routetiles.v1.versions.models.RouteTileVersionsResponse +import com.mapbox.navigation.route.onboard.model.OfflineError +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +/** + * This is a wrapper class for the [MapboxRouteTileVersions] class. It returns a list of + * all available versions of Routing Tiles available via [OfflineTiles]. This class + * encapsulates the unwrapping of the list from the response. + */ +internal class OfflineTileVersions { + + /** + * Call to receive all the available versions of Offline Tiles available. + * + * @param accessToken for the API call + * @param callback to be updated with the versions + */ + fun fetchRouteTileVersions(accessToken: String, callback: OnTileVersionsFoundCallback) { + val mapboxRouteTileVersions = buildTileVersionsWith(accessToken) + mapboxRouteTileVersions.enqueueCall(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + val responseBody = response.body() + if (response.isSuccessful && responseBody != null) { + callback.onVersionsFound(responseBody.availableVersions()) + } else { + callback.onError(OfflineError("Tile version response was unsuccessful")) + } + } + + override fun onFailure(call: Call, throwable: Throwable) { + val error = OfflineError(throwable.message ?: "Offline Tile Version error") + callback.onError(error) + } + }) + } + + private fun buildTileVersionsWith(accessToken: String): MapboxRouteTileVersions = + MapboxRouteTileVersions.builder().accessToken(accessToken).build() +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt new file mode 100644 index 00000000000..d372d786c70 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt @@ -0,0 +1,24 @@ +package com.mapbox.navigation.route.onboard + +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.navigation.route.onboard.model.OfflineError + +/** + * Callback used for finding offline routes. + */ +interface OnOfflineRouteFoundCallback { + + /** + * Called when an offline route is found. + * + * @param route offline route + */ + fun onRouteFound(route: DirectionsRoute) + + /** + * Called when there was an error fetching the offline route. + * + * @param error with message explanation + */ + fun onError(error: OfflineError) +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt new file mode 100644 index 00000000000..ecce90fa4d0 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt @@ -0,0 +1,27 @@ +package com.mapbox.navigation.route.onboard + +import com.mapbox.navigation.route.onboard.model.OfflineError + +/** + * Listener that needs to be added to [MapboxOfflineRouter.configure] to know when + * offline data is initialized an [MapboxOfflineRouter.findRoute] could be called. + */ +interface OnOfflineTilesConfiguredCallback { + + /** + * Called whe the offline data is initialized and + * [MapboxOfflineRouter.findRoute]. + * could be called safely. + * + * @param numberOfTiles initialized in the path provided + */ + fun onConfigured(numberOfTiles: Int) + + /** + * Called when an error has occurred configuring + * the offline tile data. + * + * @param error with message explanation + */ + fun onConfigurationError(error: OfflineError) +} \ No newline at end of file diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt new file mode 100644 index 00000000000..149fb8cf8ac --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt @@ -0,0 +1,18 @@ +package com.mapbox.navigation.route.onboard + +import com.mapbox.geojson.BoundingBox + +/** + * Listener that needs to be added to + * [MapboxOfflineRouter.removeTiles] to know when the routing + * tiles within the provided [BoundingBox] have been removed + */ +interface OnOfflineTilesRemovedCallback { + + /** + * Called when the routing tiles within the provided [BoundingBox] have been removed completely. + * + * @param numberOfTiles removed within the [BoundingBox] provided + */ + fun onRemoved(numberOfTiles: Long) +} \ No newline at end of file diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt new file mode 100644 index 00000000000..4b4407ed3a5 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt @@ -0,0 +1,25 @@ +package com.mapbox.navigation.route.onboard + +import com.mapbox.navigation.route.onboard.model.OfflineError + +/** + * Callback used with [MapboxOfflineRouter.fetchAvailableTileVersions]. + */ +interface OnTileVersionsFoundCallback { + + /** + * A list of available offline tile versions that can be used + * with [MapboxOfflineRouter.downloadTiles]. + * + * @param availableVersions for offline tiles + */ + fun onVersionsFound(availableVersions: List) + + /** + * Called when an error has occurred fetching + * offline versions. + * + * @param error with message explanation + */ + fun onError(error: OfflineError) +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt new file mode 100644 index 00000000000..64fc9016fb1 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt @@ -0,0 +1,5 @@ +package com.mapbox.navigation.route.onboard.model + +data class OfflineError( + val message: String +) \ No newline at end of file diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt new file mode 100644 index 00000000000..c3b280f5146 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt @@ -0,0 +1,10 @@ +package com.mapbox.navigation.route.onboard.model + +import com.google.gson.annotations.SerializedName + +internal data class OfflineRouteError( + val status: String, + @SerializedName("status_code") val statusCode: Int, + val error: String, + @SerializedName("error_code") val errorCode: Int +) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt new file mode 100644 index 00000000000..dd04860f156 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt @@ -0,0 +1,25 @@ +package com.mapbox.navigation.route.onboard.task + +import android.os.AsyncTask +import com.mapbox.navigation.route.onboard.OnOfflineTilesConfiguredCallback +import com.mapbox.navigation.route.onboard.model.OfflineError +import com.mapbox.navigator.Navigator + +internal class ConfigureRouterTask( + private val navigator: Navigator, + private val tilePath: String, + private val callback: OnOfflineTilesConfiguredCallback +) : AsyncTask() { + + @Synchronized override fun doInBackground(vararg paramsUnused: Void): Long = + navigator.configureRouter(tilePath) + + override fun onPostExecute(numberOfTiles: Long) { + if (numberOfTiles > 0) { + callback.onConfigured(numberOfTiles.toInt()) + } else { + val error = OfflineError("Offline tile configuration error: 0 tiles found in directory") + callback.onConfigurationError(error) + } + } +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt new file mode 100644 index 00000000000..e8a3cd856e9 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -0,0 +1,60 @@ +package com.mapbox.navigation.route.onboard.task + +import android.os.AsyncTask +import com.google.gson.Gson +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.navigation.route.onboard.OfflineRoute +import com.mapbox.navigation.route.onboard.OnOfflineRouteFoundCallback +import com.mapbox.navigation.route.onboard.model.OfflineError +import com.mapbox.navigation.route.onboard.model.OfflineRouteError +import com.mapbox.navigator.Navigator +import com.mapbox.navigator.RouterResult + +internal class OfflineRouteRetrievalTask( + private val navigator: Navigator, + private val callback: OnOfflineRouteFoundCallback +) : AsyncTask() { + + @Volatile private lateinit var routerResult: RouterResult + + // For testing only + internal constructor( + navigator: Navigator, + callback: OnOfflineRouteFoundCallback, + routerResult: RouterResult + ) : this(navigator, callback) { + this.routerResult = routerResult + } + + companion object { + private const val FIRST_ROUTE = 0 + } + + override fun doInBackground(vararg offlineRoutes: OfflineRoute): DirectionsRoute? { + val url = offlineRoutes[FIRST_ROUTE].buildUrl() + + synchronized(navigator) { + routerResult = navigator.getRoute(url) + } + + return offlineRoutes[FIRST_ROUTE].retrieveOfflineRoute(routerResult) + } + + public override fun onPostExecute(offlineRoute: DirectionsRoute?) { + if (offlineRoute != null) { + callback.onRouteFound(offlineRoute) + } else { + callback.onError(OfflineError(generateErrorMessage())) + } + } + + private fun generateErrorMessage(): String { + val (_, _, error, errorCode) = Gson().fromJson(routerResult.json, OfflineRouteError::class.java) + + val errorMessage = "Error occurred fetching offline route: $error - Code: $errorCode" + + // TODO LOGGER + // Timber.e(errorMessage) + return errorMessage + } +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTask.kt new file mode 100644 index 00000000000..c5d262645da --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTask.kt @@ -0,0 +1,20 @@ +package com.mapbox.navigation.route.onboard.task + +import android.os.AsyncTask +import com.mapbox.geojson.Point +import com.mapbox.navigation.route.onboard.OnOfflineTilesRemovedCallback +import com.mapbox.navigator.Navigator + +internal class RemoveTilesTask( + private val navigator: Navigator, + private val tilePath: String, + private val southwest: Point, + private val northeast: Point, + private val callback: OnOfflineTilesRemovedCallback +) : AsyncTask() { + + override fun doInBackground(vararg paramsUnused: Void): Long = + navigator.removeTiles(tilePath, southwest, northeast) + + public override fun onPostExecute(numberOfTiles: Long) = callback.onRemoved(numberOfTiles) +} From 8e461db1591c5a957d171476a0ed1ff3c8cca580 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 5 Nov 2019 18:25:50 +0300 Subject: [PATCH 27/75] Navigator make public --- libdirections-onboard/build.gradle | 1 + .../route/onboard/MapboxOnboardRouter.kt | 8 +- .../route/onboard/OfflineNavigator.kt | 75 ------------------- .../navigator/MapboxNativeNavigator.kt | 3 + .../navigator/MapboxNativeNavigatorImpl.kt | 2 +- 5 files changed, 9 insertions(+), 80 deletions(-) delete mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt diff --git a/libdirections-onboard/build.gradle b/libdirections-onboard/build.gradle index 90c9d4eb117..310b61e2212 100644 --- a/libdirections-onboard/build.gradle +++ b/libdirections-onboard/build.gradle @@ -21,6 +21,7 @@ dependencies { api project(':libnavigation-base') implementation project(':libnavigator') + implementation project(':liblogger') implementation project(":libnavigation-util") //ktlint diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index dc9de44267d..2605a63bda4 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -5,6 +5,7 @@ import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl +import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) @@ -15,10 +16,9 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router private const val TILE_PATH_NAME = "tiles" } - // private val offlineNavigator: OfflineNavigator private val tilePath: String private val offlineTileVersions: OfflineTileVersions - private val navigator: MapboxNativeNavigator + private val navigatorNative: MapboxNativeNavigator /** * Creates an offline router which uses the specified offline path for storing and retrieving @@ -34,7 +34,7 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router this.tilePath = tileDir.absolutePath offlineTileVersions = OfflineTileVersions() - this.navigator = MapboxNativeNavigatorImpl + this.navigatorNative = MapboxNativeNavigatorImpl } // Package private for testing purposes @@ -45,7 +45,7 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router ) { this.tilePath = tilePath this.offlineTileVersions = offlineTileVersions - this.navigator = navigator + this.navigatorNative = navigator } override fun getRoute( diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt deleted file mode 100644 index 97d7303bcae..00000000000 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineNavigator.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.mapbox.navigation.route.onboard - -// import com.mapbox.geojson.Point -// import com.mapbox.navigation.route.onboard.task.ConfigureRouterTask -// import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask -// import com.mapbox.navigation.route.onboard.task.RemoveTilesTask -// import com.mapbox.navigator.Navigator -// -// internal interface OfflineNavigator { -// -// /** -// * Configures the navigator for getting offline routes -// * -// * @param tilePath directory path where the tiles are located -// * @param callback a callback that will be fired when the offline data is initialized and -// * [MapboxOfflineRouter.findRoute] -// * can be called safely -// */ -// fun configure(tilePath: String, callback: OnOfflineTilesConfiguredCallback) -// -// /** -// * Uses libvalhalla and local tile data to generate mapbox-directions-api-like json -// * -// * @param offlineRoute an offline navigation route -// * @param callback which receives a RouterResult object with the json and a success/fail bool -// */ -// fun retrieveRouteFor(offlineRoute: OfflineRoute, callback: OnOfflineRouteFoundCallback) -// -// /** -// * Unpacks tar file into a specified destination path. -// * -// * @param tarPath to find file to be unpacked -// * @param destinationPath where the tar will be unpacked -// */ -// fun unpackTiles(tarPath: String, destinationPath: String) -// -// /** -// * Removes tiles within / intersected by a bounding box -// * -// * @param tilePath directory path where the tiles are located -// * @param southwest lower left [Point] of the bounding box -// * @param northeast upper right [Point] of the bounding box -// * @param callback a callback that will be fired when the routing tiles have been removed completely -// */ -// fun removeTiles( -// tilePath: String, -// southwest: Point, -// northeast: Point, -// callback: OnOfflineTilesRemovedCallback -// ) -// -// class OfflineNavigatorImpl(private val navigator: Navigator): OfflineNavigator { -// -// override fun configure(tilePath: String, callback: OnOfflineTilesConfiguredCallback) { -// ConfigureRouterTask(navigator, tilePath, callback).execute() -// } -// -// override fun retrieveRouteFor(offlineRoute: OfflineRoute, callback: OnOfflineRouteFoundCallback) { -// OfflineRouteRetrievalTask(navigator, callback).execute(offlineRoute) -// } -// -// override fun unpackTiles(tarPath: String, destinationPath: String) { -// navigator.unpackTiles(tarPath, destinationPath) -// } -// -// override fun removeTiles( -// tilePath: String, -// southwest: Point, -// northeast: Point, -// callback: OnOfflineTilesRemovedCallback -// ) { -// RemoveTilesTask(navigator, tilePath, southwest, northeast, callback).execute() -// } -// } -// } \ No newline at end of file diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index 97d467b56ce..6e0557f5c6f 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -1,10 +1,13 @@ package com.mapbox.navigation.navigator import android.location.Location +import com.mapbox.navigator.Navigator import com.mapbox.navigation.base.route.model.Route import java.util.Date interface MapboxNativeNavigator { + val navigator: Navigator + fun updateLocation(rawLocation: Location) fun getStatus(date: Date): TripStatus fun setRoute(route: Route) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index b728089ec52..3cbd13127c3 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -15,7 +15,7 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { System.loadLibrary("navigator-android") } - private val navigator: Navigator = Navigator() + val navigator: Navigator = Navigator() override fun updateLocation(rawLocation: Location) { navigator.updateLocation(rawLocation.toFixLocation()) From 70bd38450a745a5540f5ee47acf02dbe9cc2984b Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 6 Nov 2019 11:39:27 +0300 Subject: [PATCH 28/75] ktlint format --- .../com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt | 1 - .../route/onboard/OnOfflineTilesConfiguredCallback.kt | 2 +- .../navigation/route/onboard/OnOfflineTilesRemovedCallback.kt | 2 +- .../com/mapbox/navigation/route/onboard/model/OfflineError.kt | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 2605a63bda4..ef81ecb2b87 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -5,7 +5,6 @@ import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl -import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt index ecce90fa4d0..77bec436732 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt @@ -24,4 +24,4 @@ interface OnOfflineTilesConfiguredCallback { * @param error with message explanation */ fun onConfigurationError(error: OfflineError) -} \ No newline at end of file +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt index 149fb8cf8ac..f9e916a2f00 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesRemovedCallback.kt @@ -15,4 +15,4 @@ interface OnOfflineTilesRemovedCallback { * @param numberOfTiles removed within the [BoundingBox] provided */ fun onRemoved(numberOfTiles: Long) -} \ No newline at end of file +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt index 64fc9016fb1..a22627b9a61 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineError.kt @@ -2,4 +2,4 @@ package com.mapbox.navigation.route.onboard.model data class OfflineError( val message: String -) \ No newline at end of file +) From 0e76d8a4f083e914a233f61e3bfa3980a2f633af Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 6 Nov 2019 11:39:52 +0300 Subject: [PATCH 29/75] ktlint format --- .../com/mapbox/navigation/navigator/MapboxNativeNavigator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index 6e0557f5c6f..7dc552ce8a6 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -1,8 +1,8 @@ package com.mapbox.navigation.navigator import android.location.Location -import com.mapbox.navigator.Navigator import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigator.Navigator import java.util.Date interface MapboxNativeNavigator { From 0bb1a317915068ea40d9dfb6e28c693df56dd807 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 6 Nov 2019 17:41:50 +0300 Subject: [PATCH 30/75] MapboxOnboardRouter: fetch route --- .../route/onboard/MapboxOnboardRouter.kt | 42 ++++++++++++++++++- .../navigation/route/onboard/OfflineRoute.kt | 1 + .../onboard/task/OfflineRouteRetrievalTask.kt | 6 +-- .../navigator/MapboxNativeNavigator.kt | 4 +- .../navigator/MapboxNativeNavigatorImpl.kt | 5 ++- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index ef81ecb2b87..05425b24113 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -5,6 +5,11 @@ import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl +import com.mapbox.navigation.route.common.NavigationRoute +import com.mapbox.navigation.route.common.extension.mapToRoute +import com.mapbox.navigation.route.onboard.model.OfflineError +import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask +import com.mapbox.navigation.utils.exceptions.NavigationException import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) @@ -18,6 +23,8 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router private val tilePath: String private val offlineTileVersions: OfflineTileVersions private val navigatorNative: MapboxNativeNavigator + private val application: Application + private val accessToken: String /** * Creates an offline router which uses the specified offline path for storing and retrieving @@ -25,7 +32,7 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router * * @param offlinePath directory path where the offline data is located */ - constructor(offlinePath: String) { + constructor(offlinePath: String, application: Application, accessToken: String) { val tileDir = File(offlinePath, TILE_PATH_NAME) if (!tileDir.exists()) { tileDir.mkdirs() @@ -34,23 +41,54 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router this.tilePath = tileDir.absolutePath offlineTileVersions = OfflineTileVersions() this.navigatorNative = MapboxNativeNavigatorImpl + this.application = application + this.accessToken = accessToken } // Package private for testing purposes internal constructor( tilePath: String, offlineTileVersions: OfflineTileVersions, - navigator: MapboxNativeNavigator + navigator: MapboxNativeNavigator, + application: Application, + accessToken: String ) { this.tilePath = tilePath this.offlineTileVersions = offlineTileVersions this.navigatorNative = navigator + this.application = application + this.accessToken = accessToken } override fun getRoute( routeOptions: RouteOptionsNavigation, callback: Router.Callback ) = Unit + origin: Point, + waypoints: List?, + destination: Point, + callback: Router.RouteCallback + ) { + val offlineRouter = OfflineRoute.builder( + NavigationRoute.builder(application) + .accessToken(accessToken) + .origin(origin) + .apply { waypoints?.forEach { addWaypoint(it) } } + .destination(destination) + ) + .build() + + OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { + override fun onRouteFound(route: DirectionsRoute) { + listener.onRouteReady(route.mapToRoute()) + } + + override fun onError(error: OfflineError) { + listener.onFailure(NavigationException(error.message)) + } + }) + .execute(offlineRouter) + } override fun cancel() = Unit diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt index 56538d688e5..782a256a0aa 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt @@ -4,6 +4,7 @@ import androidx.annotation.FloatRange import com.mapbox.api.directions.v5.models.DirectionsResponse import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.core.exceptions.ServicesException +import com.mapbox.navigation.route.common.NavigationRoute import com.mapbox.navigation.utils.extensions.ifNonNull import com.mapbox.navigator.RouterResult import okhttp3.HttpUrl diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt index e8a3cd856e9..98ba40aa35e 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -3,15 +3,15 @@ package com.mapbox.navigation.route.onboard.task import android.os.AsyncTask import com.google.gson.Gson import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.route.onboard.OfflineRoute import com.mapbox.navigation.route.onboard.OnOfflineRouteFoundCallback import com.mapbox.navigation.route.onboard.model.OfflineError import com.mapbox.navigation.route.onboard.model.OfflineRouteError -import com.mapbox.navigator.Navigator import com.mapbox.navigator.RouterResult internal class OfflineRouteRetrievalTask( - private val navigator: Navigator, + private val navigator: MapboxNativeNavigator, private val callback: OnOfflineRouteFoundCallback ) : AsyncTask() { @@ -19,7 +19,7 @@ internal class OfflineRouteRetrievalTask( // For testing only internal constructor( - navigator: Navigator, + navigator: MapboxNativeNavigator, callback: OnOfflineRouteFoundCallback, routerResult: RouterResult ) : this(navigator, callback) { diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index 7dc552ce8a6..29f9185f104 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -2,12 +2,12 @@ package com.mapbox.navigation.navigator import android.location.Location import com.mapbox.navigation.base.route.model.Route -import com.mapbox.navigator.Navigator +import com.mapbox.navigator.RouterResult import java.util.Date interface MapboxNativeNavigator { - val navigator: Navigator + fun getRoute(url: String): RouterResult fun updateLocation(rawLocation: Location) fun getStatus(date: Date): TripStatus fun setRoute(route: Route) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index 3cbd13127c3..c775b089043 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -7,6 +7,7 @@ import com.mapbox.navigation.base.trip.model.RouteProgress import com.mapbox.navigator.FixLocation import com.mapbox.navigator.NavigationStatus import com.mapbox.navigator.Navigator +import com.mapbox.navigator.RouterResult import java.util.Date object MapboxNativeNavigatorImpl : MapboxNativeNavigator { @@ -15,12 +16,14 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { System.loadLibrary("navigator-android") } - val navigator: Navigator = Navigator() + private val navigator: Navigator = Navigator() override fun updateLocation(rawLocation: Location) { navigator.updateLocation(rawLocation.toFixLocation()) } + override fun getRoute(url: String): RouterResult = navigator.getRoute(url) + override fun setRoute(route: Route) { TODO("not implemented") } From 391541e52f48c4e65b19e1c463aa3440a594a90a Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 15 Nov 2019 17:44:04 +0300 Subject: [PATCH 31/75] fix rebase issues --- .../route/common/NavigationRouteCallback.kt | 38 +++++++++++++++++++ .../common/NavigationRouteEventListener.kt | 22 +++++++++++ .../router/NavigationRouteEventListener.kt | 22 +++++++++++ .../route/onboard/MapboxOnboardRouter.kt | 9 +++-- .../com/mapbox/navigation/utils/time/Time.kt | 12 ++++++ 5 files changed, 100 insertions(+), 3 deletions(-) diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt index e69de29bb2d..512892d506b 100644 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt +++ b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt @@ -0,0 +1,38 @@ +package com.mapbox.navigation.route.common + +import com.mapbox.api.directions.v5.models.DirectionsResponse +import com.mapbox.navigation.utils.time.ElapsedTime +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class NavigationRouteCallback( + private val listener: NavigationRouteEventListener, + private val callback: Callback +) : Callback { + + override fun onResponse( + call: Call, + response: Response + ) { + callback.onResponse(call, response) + if (isValid(response)) { + response.body()?.uuid()?.let { uuid -> + sendEventWith(listener.time, uuid) + } + } + } + + override fun onFailure(call: Call, throwable: Throwable) { + callback.onFailure(call, throwable) + } + + private fun isValid(response: Response): Boolean { + return response.body()?.routes()?.isNotEmpty() ?: false + } + + // TODO move NavigationTelemetry to separate module + private fun sendEventWith(time: ElapsedTime, uuid: String) { + // NavigationTelemetry.routeRetrievalEvent(time, uuid) + } +} diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt index e69de29bb2d..370b9b4eae3 100644 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt +++ b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt @@ -0,0 +1,22 @@ +package com.mapbox.navigation.route.common + +import com.mapbox.navigation.utils.time.ElapsedTime +import okhttp3.Call +import okhttp3.EventListener + +class NavigationRouteEventListener +@JvmOverloads +constructor( + val time: ElapsedTime = ElapsedTime() +) : EventListener() { + + override fun callStart(call: Call) { + super.callStart(call) + time.start() + } + + override fun callEnd(call: Call) { + super.callEnd(call) + time.end() + } +} diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt index e69de29bb2d..3f55a1ff97a 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt @@ -0,0 +1,22 @@ +package com.mapbox.navigation.route.offboard.router + +import com.mapbox.navigation.utils.time.ElapsedTime +import okhttp3.Call +import okhttp3.EventListener + +class NavigationRouteEventListener +@JvmOverloads +constructor( + val time: ElapsedTime = ElapsedTime() +) : EventListener() { + + override fun callStart(call: Call) { + super.callStart(call) + time.start() + } + + override fun callEnd(call: Call) { + super.callEnd(call) + time.end() + } +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 05425b24113..7390a24e7f5 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -1,7 +1,10 @@ package com.mapbox.navigation.route.onboard +import android.app.Application import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl @@ -13,7 +16,7 @@ import com.mapbox.navigation.utils.exceptions.NavigationException import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) -class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router { +class MapboxOnboardRouter : Router { companion object { @@ -80,11 +83,11 @@ class MapboxOnboardRouter(private val navigator: MapboxNativeNavigator) : Router OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { override fun onRouteFound(route: DirectionsRoute) { - listener.onRouteReady(route.mapToRoute()) + callback.onRouteReady(route.mapToRoute()) } override fun onError(error: OfflineError) { - listener.onFailure(NavigationException(error.message)) + callback.onFailure(NavigationException(error.message)) } }) .execute(offlineRouter) diff --git a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt index e69de29bb2d..247bb29c3a0 100644 --- a/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt +++ b/libnavigation-util/src/main/java/com/mapbox/navigation/utils/time/Time.kt @@ -0,0 +1,12 @@ +package com.mapbox.navigation.utils.time + +interface Time { + fun nanoTime(): Long + fun millis(): Long + + object SystemImpl : Time { + override fun nanoTime(): Long = System.nanoTime() + + override fun millis(): Long = System.currentTimeMillis() + } +} From 3a4db4083a3b7846df3f8377c6ece8c3246fa45a Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 15 Nov 2019 18:06:28 +0300 Subject: [PATCH 32/75] fix pr issues: removed common module --- libdirections-common/.gitignore | 1 - libdirections-common/build.gradle | 36 ------------------ libdirections-common/consumer-rules.pro | 0 libdirections-common/proguard-rules.pro | 21 ---------- .../src/main/AndroidManifest.xml | 2 - .../route/common/NavigationRouteCallback.kt | 38 ------------------- .../common/NavigationRouteEventListener.kt | 22 ----------- .../route/common/NavigationRouteWaypoint.kt | 0 .../route/common/extension/LocaleEx.kt | 23 ----------- .../route/common/extension/ModelsMappers.kt | 15 -------- .../common/NavigationRouteCallbackTest.kt | 0 .../route/common/NavigationRouteTest.kt | 0 .../common/NavigationWalkingOptionsTest.kt | 28 -------------- 13 files changed, 186 deletions(-) delete mode 100644 libdirections-common/.gitignore delete mode 100644 libdirections-common/build.gradle delete mode 100644 libdirections-common/consumer-rules.pro delete mode 100644 libdirections-common/proguard-rules.pro delete mode 100644 libdirections-common/src/main/AndroidManifest.xml delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt delete mode 100644 libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt delete mode 100644 libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt delete mode 100644 libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt diff --git a/libdirections-common/.gitignore b/libdirections-common/.gitignore deleted file mode 100644 index 796b96d1c40..00000000000 --- a/libdirections-common/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/libdirections-common/build.gradle b/libdirections-common/build.gradle deleted file mode 100644 index 3d94498b528..00000000000 --- a/libdirections-common/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply from: "${rootDir}/gradle/ktlint.gradle" - -android { - compileSdkVersion androidVersions.compileSdkVersion - buildToolsVersion androidVersions.buildToolsVersion - - defaultConfig { - minSdkVersion androidVersions.minSdkVersion - targetSdkVersion androidVersions.targetSdkVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'proguard-consumer.pro' - } -} - -dependencies { - implementation project(':libnavigation-util') - implementation(project(':libnavigation-base')) - implementation(project(':libnavigation-metrics')) - - //ktlint - ktlint dependenciesList.ktlint - - implementation dependenciesList.kotlinStdLib - - implementation dependenciesList.supportAnnotation - - implementation dependenciesList.mapboxSdkGeoJSON - implementation dependenciesList.mapboxCore - implementation dependenciesList.mapboxSdkServices - - // Unit testing - testImplementation dependenciesList.junit - testImplementation dependenciesList.mockk -} \ No newline at end of file diff --git a/libdirections-common/consumer-rules.pro b/libdirections-common/consumer-rules.pro deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-common/proguard-rules.pro b/libdirections-common/proguard-rules.pro deleted file mode 100644 index f1b424510da..00000000000 --- a/libdirections-common/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/libdirections-common/src/main/AndroidManifest.xml b/libdirections-common/src/main/AndroidManifest.xml deleted file mode 100644 index 7c6ac801168..00000000000 --- a/libdirections-common/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt deleted file mode 100644 index 512892d506b..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteCallback.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.mapbox.navigation.route.common - -import com.mapbox.api.directions.v5.models.DirectionsResponse -import com.mapbox.navigation.utils.time.ElapsedTime -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response - -class NavigationRouteCallback( - private val listener: NavigationRouteEventListener, - private val callback: Callback -) : Callback { - - override fun onResponse( - call: Call, - response: Response - ) { - callback.onResponse(call, response) - if (isValid(response)) { - response.body()?.uuid()?.let { uuid -> - sendEventWith(listener.time, uuid) - } - } - } - - override fun onFailure(call: Call, throwable: Throwable) { - callback.onFailure(call, throwable) - } - - private fun isValid(response: Response): Boolean { - return response.body()?.routes()?.isNotEmpty() ?: false - } - - // TODO move NavigationTelemetry to separate module - private fun sendEventWith(time: ElapsedTime, uuid: String) { - // NavigationTelemetry.routeRetrievalEvent(time, uuid) - } -} diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt deleted file mode 100644 index 370b9b4eae3..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteEventListener.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.mapbox.navigation.route.common - -import com.mapbox.navigation.utils.time.ElapsedTime -import okhttp3.Call -import okhttp3.EventListener - -class NavigationRouteEventListener -@JvmOverloads -constructor( - val time: ElapsedTime = ElapsedTime() -) : EventListener() { - - override fun callStart(call: Call) { - super.callStart(call) - time.start() - } - - override fun callEnd(call: Call) { - super.callEnd(call) - time.end() - } -} diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRouteWaypoint.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt deleted file mode 100644 index d92027801b6..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/LocaleEx.kt +++ /dev/null @@ -1,23 +0,0 @@ -@file:JvmName("LocaleEx") - -package com.mapbox.navigation.route.common.extension - -import com.mapbox.api.directions.v5.DirectionsCriteria -import java.util.Locale - -/** - * Returns the unit type for the specified locale. Try to avoid using this unnecessarily because - * all methods consuming unit type are able to handle the NONE_SPECIFIED type - * - * @return unit type for specified locale - */ -@DirectionsCriteria.VoiceUnitCriteria -fun Locale.getUnitTypeForLocale(): String = - when (this.country) { - "US", // US - "LR", // Liberia - "MM" -> // Burma - DirectionsCriteria.IMPERIAL - else -> - DirectionsCriteria.METRIC - } diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt deleted file mode 100644 index d20e139cd19..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/extension/ModelsMappers.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.mapbox.navigation.route.common.extension - -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.navigation.base.route.model.Route - -fun DirectionsRoute.mapToRoute() = Route( - routeIndex = routeIndex(), - distance = distance(), - duration = duration()?.toLong(), - geometry = geometry(), - weight = weight(), - weightName = weightName(), - voiceLanguage = voiceLanguage(), - legs = legs() -) diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteCallbackTest.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationRouteTest.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt b/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt deleted file mode 100644 index c152f0aa17f..00000000000 --- a/libdirections-common/src/test/java/com/mapbox/navigation/route/common/NavigationWalkingOptionsTest.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.mapbox.navigation.route.common - -import org.junit.Assert.assertEquals -import org.junit.Test - -class NavigationWalkingOptionsTest { - - @Test - fun alleyBias_walkingOptionSet() { - val options = NavigationWalkingOptions.builder().alleyBias(0.7).build() - - assertEquals(java.lang.Double.valueOf(0.7), options.walkingOptions.alleyBias()) - } - - @Test - fun walkwayBias_walkingOptionSet() { - val options = NavigationWalkingOptions.builder().walkwayBias(0.8).build() - - assertEquals(java.lang.Double.valueOf(0.8), options.walkingOptions.walkwayBias()) - } - - @Test - fun walkingSpeed_walkingOptionSet() { - val options = NavigationWalkingOptions.builder().walkingSpeed(2.0).build() - - assertEquals(java.lang.Double.valueOf(2.0), options.walkingOptions.walkingSpeed()) - } -} From 6b957b6d247b61da62addfa9671312b06943987e Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 15 Nov 2019 19:06:51 +0300 Subject: [PATCH 33/75] removed mapboxSdkServices; added mapboxSdkGeoJSON dependency --- 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 e76035a320b..9e6c7e06b25 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -16,7 +16,7 @@ android { dependencies { api dependenciesList.mapboxCore - api dependenciesList.mapboxSdkServices + api dependenciesList.mapboxSdkGeoJSON implementation dependenciesList.supportAnnotation From ed6813a9e5bbd3a6933ea6b044645d5372872c08 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Sat, 16 Nov 2019 13:41:43 +0300 Subject: [PATCH 34/75] removed unused class --- .../navigation/DefaultDirectionsSession.kt | 83 ------------------- 1 file changed, 83 deletions(-) delete mode 100644 libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt b/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt deleted file mode 100644 index ac21e90dc70..00000000000 --- a/libandroid-navigation/src/main/java/com/mapbox/navigation/DefaultDirectionsSession.kt +++ /dev/null @@ -1,83 +0,0 @@ -package com.mapbox.navigation - -import com.mapbox.geojson.Point -import com.mapbox.navigation.base.route.DirectionsSession -import com.mapbox.navigation.base.route.Router -import com.mapbox.navigation.base.route.model.Route -import java.util.concurrent.CopyOnWriteArrayList - -class DefaultDirectionsSession( - private val router: Router, - origin: Point, - waypoints: List, - destination: Point -) : DirectionsSession { - - override var currentRoute: Route? = null - set(value) { - if (field == value) { - return - } - field = value - routeObservers.forEach { it.onRouteChanged(value) } - } - - override var origin: Point = origin - set(value) { - if (field == value) { - return - } - field = value - requestRoute() - } - - override var waypoints: List = waypoints - set(value) { - if (field == value) { - return - } - field = value - requestRoute() - } - - override var destination: Point = destination - set(value) { - if (value == field) { - return - } - field = value - requestRoute() - } - - private val routeObservers = CopyOnWriteArrayList() - - init { - requestRoute() - } - - override fun registerRouteObserver(routeObserver: DirectionsSession.RouteObserver) { - routeObservers.add(routeObserver) - routeObserver.onRouteChanged(currentRoute) - } - - override fun unregisterRouteObserver(routeObserver: DirectionsSession.RouteObserver) { - routeObservers.remove(routeObserver) - } - - override fun cancel() { - router.cancel() - } - - private fun requestRoute() { - currentRoute = null - router.getRoute(origin, waypoints, destination, object : Router.RouteListener { - override fun onRouteReady(route: Route) { - currentRoute = route - } - - override fun onFailure(throwable: Throwable) { - // TODO should be callback for error fetching callback - } - }) - } -} From 419b823d9a68f63ed98d1eafd2d8e959b19f3f12 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Sat, 16 Nov 2019 16:24:43 +0300 Subject: [PATCH 35/75] removed common module dependency --- settings.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/settings.gradle b/settings.gradle index 386376805e2..6b373e90b64 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,7 +4,6 @@ include ':app', ':libandroid-navigation-ui', ':libnavigator', ':libnavigation-base', - ':libdirections-common', ':libdirections-onboard', ':libdirections-offboard', ':libdirections-hybrid', From ecd36c59731ea987577fa156fc02ee40fb6fb244 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Sat, 16 Nov 2019 16:45:54 +0300 Subject: [PATCH 36/75] Restore Metric Reporter --- .../internal/navigation/DepartEventHandler.kt | 2 +- .../navigation/InitialGpsEventHandler.kt | 2 +- .../navigation/NavigationTelemetry.kt | 2 +- .../v5/navigation/metrics/MetricsReporter.kt | 25 +++++++++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/DepartEventHandler.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/DepartEventHandler.kt index 0c12082fc86..5856b5100c6 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/DepartEventHandler.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/DepartEventHandler.kt @@ -2,11 +2,11 @@ package com.mapbox.services.android.navigation.v5.internal.navigation import android.content.Context import com.mapbox.services.android.navigation.v5.internal.location.MetricsLocation -import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.MetricsReporter import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.NavigationEventFactory import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.PhoneState import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.SessionState import com.mapbox.services.android.navigation.v5.internal.navigation.routeprogress.MetricsRouteProgress +import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricsReporter internal class DepartEventHandler( private val applicationContext: Context, diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventHandler.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventHandler.kt index ac13a44d9d2..902946c6608 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventHandler.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventHandler.kt @@ -1,6 +1,6 @@ package com.mapbox.services.android.navigation.v5.internal.navigation -import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.MetricsReporter +import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricsReporter internal class InitialGpsEventHandler( private val metricsReporter: MetricsReporter diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationTelemetry.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationTelemetry.kt index cd8cae8a3be..4c24df213fa 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationTelemetry.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/NavigationTelemetry.kt @@ -13,7 +13,6 @@ import com.mapbox.geojson.utils.PolylineUtils import com.mapbox.services.android.navigation.BuildConfig import com.mapbox.services.android.navigation.v5.internal.location.MetricsLocation import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.FeedbackEvent -import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.MetricsReporter import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.NavigationAppUserTurnstileEvent import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.NavigationEventFactory import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.NavigationMetricListener @@ -25,6 +24,7 @@ import com.mapbox.services.android.navigation.v5.internal.utils.RingBuffer import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions import com.mapbox.services.android.navigation.v5.navigation.metrics.MapboxMetricsReporter +import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricsReporter import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress import com.mapbox.services.android.navigation.v5.utils.exceptions.NavigationException import com.mapbox.services.android.navigation.v5.utils.extensions.ifNonNull diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt new file mode 100644 index 00000000000..4decca74c7f --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt @@ -0,0 +1,25 @@ +package com.mapbox.services.android.navigation.v5.navigation.metrics + +/** + * Interface for handling metric events. + * + * @since 0.43.0 + */ +interface MetricsReporter { + + /** + * Add event to metrics reporter when this event occurs. + * + * @param metricEvent event that should be handled + * @since 0.43.0 + */ + fun addEvent(metricEvent: MetricEvent) + + /** + * Add observer that triggered when metric event handled + * + * @param metricsObserver metric event handle observer + * @since 0.43.0 + */ + fun setMetricsObserver(metricsObserver: MetricsObserver) +} From c6c2ef867d9562821b76d2fbe9870c3b8232fbe0 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Sat, 16 Nov 2019 17:30:29 +0300 Subject: [PATCH 37/75] Restore Missing classes after rebase --- .../ui/v5/NavigationViewOfflineRouter.java | 1 + .../ui/v5/NavigationViewRouter.java | 2 +- .../v5/navigation/NavigationRoute.kt | 783 ++++++++++++++++++ .../v5/navigation/NavigationWalkingOptions.kt | 73 ++ .../v5/utils/extensions/LocaleEx.kt | 23 + 5 files changed, 881 insertions(+), 1 deletion(-) create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationWalkingOptions.kt create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java index c2744831414..f314e917877 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouter.java @@ -1,6 +1,7 @@ package com.mapbox.services.android.navigation.ui.v5; import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute; import timber.log.Timber; diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java index 201c05e10e3..9923369b6d0 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouter.java @@ -10,8 +10,8 @@ import com.mapbox.api.directions.v5.models.RouteOptions; import com.mapbox.core.utils.TextUtils; import com.mapbox.geojson.Point; -import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.route.RouteFetcher; import com.mapbox.services.android.navigation.v5.route.RouteListener; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt new file mode 100644 index 00000000000..e70b8f36039 --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt @@ -0,0 +1,783 @@ +package com.mapbox.services.android.navigation.v5.navigation + +import android.content.Context +import androidx.annotation.FloatRange +import androidx.annotation.IntRange +import com.mapbox.api.directions.v5.DirectionsCriteria +import com.mapbox.api.directions.v5.MapboxDirections +import com.mapbox.api.directions.v5.models.DirectionsResponse +import com.mapbox.api.directions.v5.models.RouteOptions +import com.mapbox.core.exceptions.ServicesException +import com.mapbox.core.utils.TextUtils +import com.mapbox.geojson.Point +import com.mapbox.navigation.utils.extensions.inferDeviceLocale +import com.mapbox.services.android.navigation.v5.utils.extensions.getUnitTypeForLocale +import java.util.Locale +import okhttp3.EventListener +import okhttp3.Interceptor +import retrofit2.Call +import retrofit2.Callback + +/** + * The NavigationRoute class wraps the [MapboxDirections] class with parameters which + * must be set in order for a navigation session to successfully begin. While it is possible + * to pass in any [com.mapbox.api.directions.v5.models.DirectionsRoute] into + * [MapboxNavigation.startNavigation], using this class will ensure your + * request includes all the proper information needed for the navigation session to begin. + * + * Developer Note: MapboxDirections cannot be directly extended since it is an AutoValue class. + * + * 0.5.0 + */ + +class NavigationRoute +internal constructor( + private val mapboxDirections: MapboxDirections +) { + + companion object { + private val EVENT_LISTENER = NavigationRouteEventListener() + + /** + * Build a new [NavigationRoute] object with the proper navigation parameters already setup. + * + * @return a [Builder] object for creating this object + * @since 0.5.0 + */ + @JvmStatic + fun builder(context: Context): Builder = + Builder() + .annotations( + DirectionsCriteria.ANNOTATION_CONGESTION, + DirectionsCriteria.ANNOTATION_DISTANCE + ) + .language(context) + .voiceUnits(context) + .profile(DirectionsCriteria.PROFILE_DRIVING_TRAFFIC) + .continueStraight(true) + } + + /** + * Wrapper method for Retrofit's [Call.clone] call, useful for getting call information + * and allowing you to perform additional functions on this [NavigationRoute] class. + * + * @return cloned call + * @since 1.0.0 + */ + val call: Call + get() = mapboxDirections.cloneCall() + + /** + * Call when you have constructed your navigation route with your desired parameters. A + * [Callback] must be passed into the method to handle both the response and failure. + * + * @param callback a RetroFit callback which contains an onResponse and onFailure + * @since 0.5.0 + */ + fun getRoute(callback: Callback) { + mapboxDirections.enqueueCall(NavigationRouteCallback(EVENT_LISTENER, callback)) + } + + /** + * Wrapper method for Retrofit's [Call.cancel] call, important to manually cancel call if + * the user dismisses the calling activity or no longer needs the returned results. + */ + fun cancelCall() { + if (!call.isExecuted) { + call.cancel() + } + } + + /** + * This builder is used to create a new request to the Mapbox Directions API and removes options + * which would cause this navigation SDK to not behave properly. At a bare minimum, your request + * must include an access token, an origin, and a destination. All other fields can be left alone + * inorder to use the default behaviour of the API. + * + * + * By default, the directions profile is set to driving with traffic but can be changed to + * reflect your users use-case. + * + * + * @since 0.5.0 + */ + class Builder internal constructor(private val directionsBuilder: MapboxDirections.Builder) { + private val eventListener: NavigationRouteEventListener + private var origin: NavigationRouteWaypoint? = null + private var destination: NavigationRouteWaypoint? = null + private val waypoints = ArrayList() + private val SEMICOLON = ";" + private val COMMA = "," + + /** + * Private constructor for initializing the raw MapboxDirections.Builder + */ + constructor() : this(MapboxDirections.builder()) {} + + init { + this.eventListener = EVENT_LISTENER + } + + /** + * The username for the account that the directions engine runs on. In most cases, this should + * always remain the default value of [DirectionsCriteria.PROFILE_DEFAULT_USER]. + * + * @param user a non-null string which will replace the default user used in the directions + * request + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun user(user: String): Builder { + directionsBuilder.user(user) + return this + } + + /** + * This selects which mode of transportation the user will be using while navigating from the + * origin to the final destination. The options include driving, driving considering traffic, + * walking, and cycling. Using each of these profiles will result in different routing biases. + * + * @param profile required to be one of the String values found in the [ProfileCriteria] + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun profile(@DirectionsCriteria.ProfileCriteria profile: String): Builder { + directionsBuilder.profile(profile) + return this + } + + /** + * This sets the starting point on the map where the route will begin. It is one of the + * required parameters which must be set for a successful directions response. + * + * @param origin a GeoJson [Point] object representing the starting location for the route + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun origin(origin: Point): Builder { + this.origin = NavigationRouteWaypoint(origin, null, null) + return this + } + + /** + * This sets the starting point on the map where the route will begin. It is one of the + * required parameters which must be set for a successful directions response. + * + * @param origin a GeoJson [Point] object representing the starting location for the + * route + * @param angle double value used for setting the corresponding coordinate's angle of travel + * when determining the route + * @param tolerance the deviation the bearing angle can vary while determining the route, + * recommended to be either 45 or 90 degree tolerance + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun origin( + origin: Point, + angle: Double?, + tolerance: Double? + ): Builder { + this.origin = + NavigationRouteWaypoint(origin, angle, tolerance) + return this + } + + /** + * This sets the ending point on the map where the route will end. It is one of the required + * parameters which must be set for a successful directions response. + * + * @param destination a GeoJson [Point] object representing the starting location for the + * route + * @return this builder for chaining options together + * @since 0.50 + */ + fun destination(destination: Point): Builder { + this.destination = + NavigationRouteWaypoint(destination, null, null) + return this + } + + /** + * This sets the ending point on the map where the route will end. It is one of the required + * parameters which must be set for a successful directions response. + * + * @param destination a GeoJson [Point] object representing the starting location for the + * route + * @param angle double value used for setting the corresponding coordinate's angle of travel + * when determining the route + * @param tolerance the deviation the bearing angle can vary while determining the route, + * recommended to be either 45 or 90 degree tolerance + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun destination( + destination: Point, + angle: Double?, + tolerance: Double? + ): Builder { + this.destination = + NavigationRouteWaypoint(destination, angle, tolerance) + return this + } + + /** + * This can be used to set up to 23 additional in-between points which will act as pit-stops + * along the users route. Note that if you are using the + * [DirectionsCriteria.PROFILE_DRIVING_TRAFFIC] that the max number of waypoints allowed + * in the request is currently limited to 1. + * + * @param waypoint a [Point] which represents the pit-stop or waypoint where you'd like + * one of the [com.mapbox.api.directions.v5.models.RouteLeg] to + * navigate the user to + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun addWaypoint(waypoint: Point): Builder { + this.waypoints.add( + NavigationRouteWaypoint( + waypoint, + null, + null + ) + ) + return this + } + + /** + * This can be used to set up to 23 additional in-between points which will act as pit-stops + * along the users route. + * + * + * Note that if you are using the + * [DirectionsCriteria.PROFILE_DRIVING_TRAFFIC] that the max number of waypoints allowed + * in the request is currently limited to 1. + * + * + * These waypoints are added to the request in the order you add them to the builder with this method. + * + * @param waypoint a [Point] which represents the pit-stop or waypoint where you'd like + * one of the [com.mapbox.api.directions.v5.models.RouteLeg] to + * navigate the user to + * @param angle double value used for setting the corresponding coordinate's angle of travel + * when determining the route + * @param tolerance the deviation the bearing angle can vary while determining the route, + * recommended to be either 45 or 90 degree tolerance + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun addWaypoint( + waypoint: Point, + angle: Double?, + tolerance: Double? + ): Builder { + this.waypoints.add( + NavigationRouteWaypoint( + waypoint, + angle, + tolerance + ) + ) + return this + } + + /** + * Optionally set whether to try to return alternative routes. An alternative is classified as a + * route that is significantly different then the fastest route, but also still reasonably fast. + * Not in all circumstances such a route exists. At the moment at most one alternative can be + * returned. + * + * @param alternatives true if you'd like to receive an alternative route, otherwise false or + * null to use the APIs default value + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun alternatives(alternatives: Boolean?): Builder { + directionsBuilder.alternatives(alternatives) + return this + } + + /** + * Set the instruction language for the directions request, the default is english. Only a + * select number of languages are currently supported, reference the table provided in the see + * link below. + * + * @param language a Locale representing the language you'd like the instructions to be + * written in when returned + * @return this builder for chaining options together + * @see [Supported + * Languages](https://www.mapbox.com/api-documentation/.instructions-languages) + * + * @since 0.5.0 + */ + fun language(language: Locale): Builder { + directionsBuilder.language(language) + return this + } + + internal fun language(context: Context): Builder { + directionsBuilder.language(context.inferDeviceLocale()) + return this + } + + /** + * Whether or not to return additional metadata along the route. Possible values are: + * [DirectionsCriteria.ANNOTATION_DISTANCE], + * [DirectionsCriteria.ANNOTATION_DURATION], + * [DirectionsCriteria.ANNOTATION_DURATION] and + * [DirectionsCriteria.ANNOTATION_CONGESTION]. Several annotation can be used by + * separating them with `,`. + * + * + * If left alone, this will automatically set Congestion to enabled + * + * + * @param annotations string referencing one of the annotation direction criteria's. The strings + * restricted to one or multiple values inside the [AnnotationCriteria] + * or null which will result in no annotations being used + * @return this builder for chaining options together + * @see [RouteLeg object + * documentation](https://www.mapbox.com/api-documentation/.routeleg-object) + * + * @since 0.5.0 + */ + fun annotations(@DirectionsCriteria.AnnotationCriteria vararg annotations: String?): Builder { + directionsBuilder.annotations(*annotations) + return this + } + + /** + * Optionally, Use to filter the road segment the waypoint will be placed on by direction and + * dictates the angle of approach. This option should always be used in conjunction with the + * [.radiuses] parameter. + * + * + * The parameter takes two values per waypoint: the first is an angle clockwise from true north + * between 0 and 360. The second is the range of degrees the angle can deviate by. We recommend + * a value of 45 degrees or 90 degrees for the range, as bearing measurements tend to be + * inaccurate. This is useful for making sure we reroute vehicles on new routes that continue + * traveling in their current direction. A request that does this would provide bearing and + * radius values for the first waypoint and leave the remaining values empty. If provided, the + * list of bearings must be the same length as the list of waypoints, but you can skip a + * coordinate and show its position by passing in null value for both the angle and tolerance + * values. + * + * + * Each bearing value gets associated with the same order which coordinates are arranged in this + * builder. For example, the first bearing added in this builder will be associated with the + * origin `Point`, the nth bearing being associated with the nth waypoint added (if added) + * and the last bearing being added will be associated with the destination. + * + * + * If given the chance, you should pass in the bearing information at the same time the point is + * passed in as a waypoint, this way it is ensured the value is matched up correctly with the + * coordinate. + * + * @param angle double value used for setting the corresponding coordinate's angle of travel + * when determining the route + * @param tolerance the deviation the bearing angle can vary while determining the route, + * recommended to be either 45 or 90 degree tolerance + * @return this builder for chaining options together + * @since 0.5.0 + */ + @Deprecated( + "use the bearing paired with {@link Builder#origin(Point, Double, Double)},\n" + + " {@link Builder#destination(Point, Double, Double)},\n" + + " or {@link Builder#addWaypoint(Point, Double, Double)} instead." + ) + fun addBearing( + @FloatRange(from = 0.0, to = 360.0) angle: Double?, + @FloatRange(from = 0.0, to = 360.0) tolerance: Double? + ): Builder { + directionsBuilder.addBearing(angle, tolerance) + return this + } + + /** + * Optionally, set the maximum distance in meters that each coordinate is allowed to move when + * snapped to a nearby road segment. There must be as many radiuses as there are coordinates in + * the request. Values can be any number greater than 0 or they can be unlimited simply by + * passing [Double.POSITIVE_INFINITY]. + * + * + * If no routable road is found within the radius, a `NoSegment` error is returned. + * + * + * @param radiuses double array containing the radiuses defined in unit meters. + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun radiuses(@FloatRange(from = 0.0) vararg radiuses: Double): Builder { + directionsBuilder.radiuses(*radiuses) + return this + } + + /** + * Change the units used for voice announcements, this does not change the units provided in + * other fields outside of the [com.mapbox.api.directions.v5.models.VoiceInstructions] + * object. + * + * @param voiceUnits one of the values found inside the [VoiceUnitCriteria] + * @return this builder for chaining options together + * @since 0.8.0 + */ + fun voiceUnits(@DirectionsCriteria.VoiceUnitCriteria voiceUnits: String): Builder { + directionsBuilder.voiceUnits(voiceUnits) + return this + } + + internal fun voiceUnits(context: Context): Builder { + directionsBuilder.voiceUnits(context.inferDeviceLocale().getUnitTypeForLocale()) + return this + } + + /** + * Exclude specific road classes such as highways, tolls, and more. + * + * @param exclude one of the values found inside the [ExcludeCriteria] + * @return this builder for chaining options together + * @since 0.8.0 + */ + fun exclude(@DirectionsCriteria.ExcludeCriteria exclude: String?): Builder { + directionsBuilder.exclude(exclude) + return this + } + + /** + * Base package name or other simple string identifier. Used inside the calls user agent header. + * + * @param clientAppName base package name or other simple string identifier + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun clientAppName(clientAppName: String): Builder { + directionsBuilder.clientAppName(clientAppName) + return this + } + + /** + * Required to call when this is being built. If no access token provided, + * [ServicesException] will be thrown. + * + * @param accessToken Mapbox access token, You must have a Mapbox account inorder to use + * the Optimization API + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun accessToken(accessToken: String): Builder { + directionsBuilder.accessToken(accessToken) + return this + } + + /** + * Optionally change the APIs base URL to something other then the default Mapbox one. + * + * @param baseUrl base url used as end point + * @return this builder for chaining options together + * @since 0.5.0 + */ + fun baseUrl(baseUrl: String): Builder { + directionsBuilder.baseUrl(baseUrl) + return this + } + + /** + * Indicates from which side of the road to approach a waypoint. + * Accepts unrestricted (default), curb or null. + * If set to unrestricted, the route can approach waypoints + * from either side of the road. If set to curb, the route will be returned + * so that on arrival, the waypoint will be found on the side that corresponds with the + * driving_side of the region in which the returned route is located. + * If provided, the list of approaches must be the same length as the list of waypoints. + * + * @param approaches null if you'd like the default approaches, + * else one of the options found in + * [com.mapbox.api.directions.v5.DirectionsCriteria.ApproachesCriteria]. + * @return this builder for chaining options together + * @since 0.15.0 + */ + fun addApproaches(vararg approaches: String?): Builder { + directionsBuilder.addApproaches(*approaches) + return this + } + + /** + * Optionally, set which input coordinates should be treated as waypoints / separate legs. + * Note: coordinate indices not added here act as silent waypoints + * + * + * Most useful in combination with steps=true and requests based on traces + * with high sample rates. Can be an index corresponding to any of the input coordinates, + * but must contain the first ( 0 ) and last coordinates' index separated by ;. + * + * @param indices integer array of coordinate indices to be used as waypoints + * @return this builder for chaining options together + */ + fun addWaypointIndices(@IntRange(from = 0) vararg indices: Int): Builder { + val result = Array(indices.size) { 0 } + var index = 0 + for (i in indices) { + result[index++] = i + } + directionsBuilder.addWaypointIndices(*result) + return this + } + + /** + * Custom names for waypoints used for the arrival instruction, + * each separated by ;. Values can be any string and total number of all characters cannot + * exceed 500. If provided, the list of waypointNames must be the same length as the list of + * coordinates, but you can skip a coordinate and show its position with the ; separator. + * + * @param waypointNames Custom names for waypoints used for the arrival instruction. + * @return this builder for chaining options together + * @since 0.15.0 + */ + fun addWaypointNames(vararg waypointNames: String): Builder { + directionsBuilder.addWaypointNames(*waypointNames) + return this + } + + /** + * A list of coordinate pairs used to specify drop-off + * locations that are distinct from the locations specified in coordinates. + * If this parameter is provided, the Directions API will compute the side of the street, + * left or right, for each target based on the waypoint_targets + * and the driving direction. + * The maneuver.modifier, banner and voice instructions will be updated with the computed + * side of street. The number of waypoint targets must be the same as the number of coordinates, + * but you can skip a coordinate pair and show its position in the list adding null. + * Must be used with steps=true. + * + * @param waypointTargets [Point] coordinates for drop-off locations + * @return this builder for chaining options together + * @since 0.26.0 + */ + fun addWaypointTargets(vararg waypointTargets: Point?): Builder { + directionsBuilder.addWaypointTargets(*waypointTargets) + return this + } + + /** + * Adds an optional interceptor to set in the OkHttp client. + * + * @param interceptor to set for OkHttp + * @return this builder for chaining options together + */ + fun interceptor(interceptor: Interceptor): Builder { + directionsBuilder.interceptor(interceptor) + return this + } + + /** + * Adds an optional event listener to set in the OkHttp client. + * + * @param eventListener to set for OkHttp + * @return this builder for chaining options together + */ + fun eventListener(eventListener: EventListener): Builder { + directionsBuilder.eventListener(eventListener) + return this + } + + /** + * Enables a route to be refreshable + * + * @param enableRefresh whether or not to enable refresh + * @return this builder for chaining options together + */ + fun enableRefresh(enableRefresh: Boolean): Builder { + directionsBuilder.enableRefresh(enableRefresh) + return this + } + + /** + * Sets allowed direction of travel when departing intermediate waypoints. If true the route + * will continue in the same direction of travel. If false the route may continue in the + * opposite direction of travel. API defaults to true for + * [DirectionsCriteria.PROFILE_DRIVING] and false for + * [DirectionsCriteria.PROFILE_WALKING] and [DirectionsCriteria.PROFILE_CYCLING]. + * + * @param continueStraight boolean true if you want to always continue straight, else false. + * @return this builder for chaining options together + */ + fun continueStraight(continueStraight: Boolean): Builder { + directionsBuilder.continueStraight(continueStraight) + return this + } + + /** + * Sets a [NavigationWalkingOptions] object which contains options for use with the + * walking profile. + * + * @param navigationWalkingOptions object holding walking options + * @return this builder for chaining options together + */ + fun walkingOptions(navigationWalkingOptions: NavigationWalkingOptions): Builder { + directionsBuilder.walkingOptions(navigationWalkingOptions.walkingOptions) + return this + } + + /** + * Optionally create a [Builder] based on all variables + * from given [RouteOptions]. + * + * + * Note: [RouteOptions.bearings] are excluded because it's better + * to recalculate these at the time of the request, as your location bearing + * is constantly changing. + * + * @param options containing all variables for request + * @return this builder for chaining options together + * @since 0.9.0 + */ + fun routeOptions(options: RouteOptions): Builder { + + if (!TextUtils.isEmpty(options.baseUrl())) { + directionsBuilder.baseUrl(options.baseUrl()) + } + + if (!TextUtils.isEmpty(options.language())) { + directionsBuilder.language(java.util.Locale(options.language())) + } + + if (options.alternatives() != null) { + directionsBuilder.alternatives(options.alternatives()) + } + + if (!TextUtils.isEmpty(options.profile())) { + directionsBuilder.profile(options.profile()) + } + + if (options.alternatives() != null) { + directionsBuilder.alternatives(options.alternatives()) + } + + if (!TextUtils.isEmpty(options.voiceUnits())) { + directionsBuilder.voiceUnits(options.voiceUnits()) + } + + if (!TextUtils.isEmpty(options.user())) { + directionsBuilder.user(options.user()) + } + + if (!TextUtils.isEmpty(options.accessToken())) { + directionsBuilder.accessToken(options.accessToken()) + } + + if (!TextUtils.isEmpty(options.annotations())) { + directionsBuilder.annotations(options.annotations()) + } + + options.approaches()?.let { approaches -> + if (approaches.isNotEmpty()) { + val result = + approaches.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray() + directionsBuilder.addApproaches(*result) + } + } + + options.waypointIndices()?.let { waypointIndices -> + if (waypointIndices.isNotEmpty()) { + val splitWaypointIndices = parseWaypointIndices(waypointIndices) + directionsBuilder.addWaypointIndices(*splitWaypointIndices) + } + } + + options.waypointNames()?.let { waypointNames -> + if (waypointNames.isNotEmpty()) { + val names = + waypointNames.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray() + directionsBuilder.addWaypointNames(*names) + } + } + + options.waypointTargets()?.let { waypointTargets -> + if (waypointTargets.isNotEmpty()) { + val splitWaypointTargets = parseWaypointTargets(waypointTargets) + directionsBuilder.addWaypointTargets(*splitWaypointTargets) + } + } + + val walkingOptions = options.walkingOptions() + if (walkingOptions != null) { + directionsBuilder.walkingOptions(walkingOptions) + } + + return this + } + + /** + * This uses the provided parameters set using the [Builder] and adds the required + * settings for navigation to work correctly. + * + * @return a new instance of Navigation Route + * @since 0.5.0 + */ + fun build(): NavigationRoute { + // Set the default values which the user cannot alter. + assembleWaypoints() + directionsBuilder + .steps(true) + .geometries(DirectionsCriteria.GEOMETRY_POLYLINE6) + .overview(DirectionsCriteria.OVERVIEW_FULL) + .voiceInstructions(true) + .bannerInstructions(true) + .roundaboutExits(true) + .eventListener(eventListener) + .enableRefresh(true) + return NavigationRoute(directionsBuilder.build()) + } + + private fun parseWaypointIndices(waypointIndices: String): Array { + val splitWaypointIndices = + waypointIndices.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray() + val indices = Array(splitWaypointIndices.size, { 0 }) + var index = 0 + for (waypointIndex in splitWaypointIndices) { + val parsedIndex = Integer.valueOf(waypointIndex) + indices[index++] = parsedIndex + } + return indices + } + + private fun parseWaypointTargets(waypointTargets: String): Array { + val splitWaypointTargets = + waypointTargets.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray() + val waypoints = arrayOfNulls(splitWaypointTargets.size) + var index = 0 + for (waypointTarget in splitWaypointTargets) { + val point = waypointTarget.split(COMMA.toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray() + if (waypointTarget.isEmpty()) { + waypoints[index++] = null + } else { + val longitude = java.lang.Double.valueOf(point[0]) + val latitude = java.lang.Double.valueOf(point[0]) + waypoints[index++] = Point.fromLngLat(longitude, latitude) + } + } + return waypoints + } + + private fun assembleWaypoints() { + origin?.let { origin -> + directionsBuilder.origin(origin.waypoint) + directionsBuilder.addBearing(origin.bearingAngle, origin.tolerance) + } + + for (waypoint in waypoints) { + directionsBuilder.addWaypoint(waypoint.waypoint) + directionsBuilder.addBearing(waypoint.bearingAngle, waypoint.tolerance) + } + + destination?.let { destination -> + directionsBuilder.destination(destination.waypoint) + directionsBuilder.addBearing(destination.bearingAngle, destination.tolerance) + } + } + } +} diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationWalkingOptions.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationWalkingOptions.kt new file mode 100644 index 00000000000..ce63379be8a --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationWalkingOptions.kt @@ -0,0 +1,73 @@ +package com.mapbox.services.android.navigation.v5.navigation + +import com.mapbox.api.directions.v5.WalkingOptions + +/** + * Class for specifying options for use with the walking profile. + */ +class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingOptions) { + + companion object { + /** + * Build a new [WalkingOptions] object with no defaults. + * + * @return a [Builder] object for creating a [NavigationWalkingOptions] object + */ + @JvmStatic + fun builder(): Builder { + return Builder(WalkingOptions.builder()) + } + } + + /** + * This builder is used to create a new object with specifications relating to walking directions. + */ + class Builder internal constructor(private val builder: WalkingOptions.Builder) { + + /** + * Builds a [NavigationWalkingOptions] object with the specified configurations. + * + * @return a NavigationWalkingOptions object + */ + fun build(): NavigationWalkingOptions = NavigationWalkingOptions(builder.build()) + + /** + * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. + * Defaults to 1.42 meters per second + * + * @param walkingSpeed in meters per second + * @return this builder + */ + fun walkingSpeed(walkingSpeed: Double?): Builder { + builder.walkingSpeed(walkingSpeed) + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of roads or paths + * that are set aside for pedestrian-only use (walkways). The allowed range of values is from + * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor + * walkways, and 0 indicates no preference (the default). + * + * @param walkwayBias bias to prefer or avoid walkways + * @return this builder + */ + fun walkwayBias(walkwayBias: Double?): Builder { + builder.walkwayBias(walkwayBias) + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of alleys. The + * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 + * indicates preference to favor alleys, and 0 indicates no preference (the default). + * + * @param alleyBias bias to prefer or avoid alleys + * @return this builder + */ + fun alleyBias(alleyBias: Double?): Builder { + builder.alleyBias(alleyBias) + return this + } + } +} diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt new file mode 100644 index 00000000000..baad1a78507 --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/LocaleEx.kt @@ -0,0 +1,23 @@ +@file:JvmName("LocaleEx") + +package com.mapbox.services.android.navigation.v5.utils.extensions + +import com.mapbox.api.directions.v5.DirectionsCriteria +import java.util.Locale + +/** + * Returns the unit type for the specified locale. Try to avoid using this unnecessarily because + * all methods consuming unit type are able to handle the NONE_SPECIFIED type + * + * @return unit type for specified locale + */ +@DirectionsCriteria.VoiceUnitCriteria +fun Locale.getUnitTypeForLocale(): String = + when (this.country) { + "US", // US + "LR", // Liberia + "MM" -> // Burma + DirectionsCriteria.IMPERIAL + else -> + DirectionsCriteria.METRIC + } From dba35f6db2656b1ec8134a4a4f8e2aaba6dac4cd Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 18 Nov 2019 17:38:06 +0300 Subject: [PATCH 38/75] Onboard route: restrict Directions API dependency; added config --- .../router/NavigationRouteCallbackTest.kt | 1 + .../route/onboard/MapboxOnboardRouter.kt | 59 ++++---- .../navigation/route/onboard/OfflineRoute.kt | 55 +++---- .../route/onboard/OfflineTileVersions.kt | 47 ------ .../onboard/OnOfflineRouteFoundCallback.kt | 8 +- .../OnOfflineTilesConfiguredCallback.kt | 27 ---- .../onboard/OnTileVersionsFoundCallback.kt | 25 ---- .../navigation/route/onboard/model/Config.kt | 20 +++ .../route/onboard/model/Endpoint.kt | 18 +++ .../route/onboard/task/ConfigureRouterTask.kt | 25 ---- .../onboard/task/OfflineRouteRetrievalTask.kt | 34 +++-- .../mapbox/navigation/base/route/RouteUrl.kt | 135 ++++++++++++++++++ .../navigator/MapboxNativeNavigator.kt | 2 + .../navigator/MapboxNativeNavigatorImpl.kt | 18 +++ .../navigator/model/EndpointConfig.kt | 8 ++ .../navigator/model/RouterConfig.kt | 9 ++ .../exception/NavigationException.kt | 0 .../route/NavigationRouteWaypoint.kt | 0 .../java/com/mapbox/navigation/util/Time.kt | 0 19 files changed, 280 insertions(+), 211 deletions(-) delete mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt delete mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt delete mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Config.kt create mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Endpoint.kt delete mode 100644 libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt create mode 100644 libnavigator/src/main/java/com/mapbox/navigation/navigator/model/EndpointConfig.kt create mode 100644 libnavigator/src/main/java/com/mapbox/navigation/navigator/model/RouterConfig.kt delete mode 100644 linavigation-base/src/main/java/com/mapbox/navigation/exception/NavigationException.kt delete mode 100644 linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt delete mode 100644 linavigation-base/src/main/java/com/mapbox/navigation/util/Time.kt diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt index e69de29bb2d..8b137891791 100644 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt +++ b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt @@ -0,0 +1 @@ + diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 7390a24e7f5..c4771a90497 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -1,16 +1,16 @@ package com.mapbox.navigation.route.onboard -import android.app.Application import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType -import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.geojson.Point +import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.Router +import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl -import com.mapbox.navigation.route.common.NavigationRoute -import com.mapbox.navigation.route.common.extension.mapToRoute +import com.mapbox.navigation.route.onboard.model.Config import com.mapbox.navigation.route.onboard.model.OfflineError +import com.mapbox.navigation.route.onboard.model.mapToRouteConfig import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask import com.mapbox.navigation.utils.exceptions.NavigationException import java.io.File @@ -19,48 +19,42 @@ import java.io.File class MapboxOnboardRouter : Router { companion object { - private const val TILE_PATH_NAME = "tiles" } - private val tilePath: String - private val offlineTileVersions: OfflineTileVersions private val navigatorNative: MapboxNativeNavigator - private val application: Application private val accessToken: String + private val config: Config /** * Creates an offline router which uses the specified offline path for storing and retrieving * data. * - * @param offlinePath directory path where the offline data is located + * @param accessToken mapbox access token + * @param config offline config */ - constructor(offlinePath: String, application: Application, accessToken: String) { - val tileDir = File(offlinePath, TILE_PATH_NAME) + constructor(accessToken: String, config: Config) { + val tileDir = File(config.tilePath, TILE_PATH_NAME) if (!tileDir.exists()) { tileDir.mkdirs() } - this.tilePath = tileDir.absolutePath - offlineTileVersions = OfflineTileVersions() this.navigatorNative = MapboxNativeNavigatorImpl - this.application = application this.accessToken = accessToken + this.config = config + MapboxNativeNavigatorImpl.configureRoute(config.mapToRouteConfig()) } // Package private for testing purposes internal constructor( - tilePath: String, - offlineTileVersions: OfflineTileVersions, navigator: MapboxNativeNavigator, - application: Application, - accessToken: String + accessToken: String, + config: Config ) { - this.tilePath = tilePath - this.offlineTileVersions = offlineTileVersions this.navigatorNative = navigator - this.application = application this.accessToken = accessToken + this.config = config + MapboxNativeNavigatorImpl.configureRoute(config.mapToRouteConfig()) } override fun getRoute( @@ -73,29 +67,26 @@ class MapboxOnboardRouter : Router { callback: Router.RouteCallback ) { val offlineRouter = OfflineRoute.builder( - NavigationRoute.builder(application) - .accessToken(accessToken) - .origin(origin) - .apply { waypoints?.forEach { addWaypoint(it) } } - .destination(destination) - ) - .build() + RouteUrl( + accessToken = accessToken, + orgin = origin, + waypoints = waypoints, + destination = destination + ) + ).build() OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { - override fun onRouteFound(route: DirectionsRoute) { - callback.onRouteReady(route.mapToRoute()) + override fun onRouteFound(routes: List) { + callback.onRouteReady(routes) } override fun onError(error: OfflineError) { callback.onFailure(NavigationException(error.message)) } }) - .execute(offlineRouter) + .execute(offlineRouter.buildUrl()) } override fun cancel() = Unit - class Config { - fun compile(): String = TODO("not implemented") - } } diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt index 782a256a0aa..586534fb671 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt @@ -1,13 +1,9 @@ package com.mapbox.navigation.route.onboard +import android.net.Uri import androidx.annotation.FloatRange -import com.mapbox.api.directions.v5.models.DirectionsResponse -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.core.exceptions.ServicesException -import com.mapbox.navigation.route.common.NavigationRoute +import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.utils.extensions.ifNonNull -import com.mapbox.navigator.RouterResult -import okhttp3.HttpUrl /** * The [OfflineRoute] class wraps the [NavigationRoute] class with parameters which @@ -15,7 +11,7 @@ import okhttp3.HttpUrl */ class OfflineRoute private constructor( - private val onlineRoute: NavigationRoute, + private val routeUrl: RouteUrl, bicycleType: OfflineCriteria.BicycleType?, private val cyclingSpeed: Float?, private val cyclewayBias: Float?, @@ -48,8 +44,8 @@ private constructor( * @return a [Builder] object for creating this object */ @JvmStatic - fun builder(onlineRouteBuilder: NavigationRoute.Builder): Builder { - return Builder(onlineRouteBuilder) + fun builder(routeUrl: RouteUrl): Builder { + return Builder(routeUrl) } } @@ -59,16 +55,7 @@ private constructor( * @return the offline url string */ fun buildUrl(): String { - val onlineUrl = onlineRoute.call.request().url().toString() - return buildOfflineUrl(onlineUrl) - } - - internal fun retrieveOfflineRoute(response: RouterResult): DirectionsRoute? { - return if (!response.success) { - null - } else { - obtainRouteFor(response.json) - } + return buildOfflineUrl(routeUrl.getRequest()) } private fun checkWaypointTypes(waypointTypes: List?): String? { @@ -76,7 +63,7 @@ private constructor( null } else { formatWaypointTypes(waypointTypes) - ?: throw ServicesException("All waypoint types values must be one of break, through or null") + ?: throw IllegalStateException("All waypoint types values must be one of break, through or null") } } @@ -85,42 +72,42 @@ private constructor( return waypointTypes.joinTo(StringBuilder(), ";").toString() } - private fun buildOfflineUrl(onlineUrl: String): String { - val offlineUrlBuilder = HttpUrl.get(onlineUrl).newBuilder() + private fun buildOfflineUrl(url: Uri): String { + val offlineUrlBuilder = url.buildUpon() ifNonNull(bicycleType) { - offlineUrlBuilder.addQueryParameter(BICYCLE_TYPE_QUERY_PARAMETER, it) + offlineUrlBuilder.appendQueryParameter(BICYCLE_TYPE_QUERY_PARAMETER, it) } ifNonNull(cyclingSpeed) { - offlineUrlBuilder.addQueryParameter(CYCLING_SPEED_QUERY_PARAMETER, it.toString()) + offlineUrlBuilder.appendQueryParameter(CYCLING_SPEED_QUERY_PARAMETER, it.toString()) } ifNonNull(cyclewayBias) { - offlineUrlBuilder.addQueryParameter(CYCLEWAY_BIAS_QUERY_PARAMETER, it.toString()) + offlineUrlBuilder.appendQueryParameter(CYCLEWAY_BIAS_QUERY_PARAMETER, it.toString()) } ifNonNull(hillBias) { - offlineUrlBuilder.addQueryParameter(HILL_BIAS_QUERY_PARAMETER, it.toString()) + offlineUrlBuilder.appendQueryParameter(HILL_BIAS_QUERY_PARAMETER, it.toString()) } ifNonNull(ferryBias) { - offlineUrlBuilder.addQueryParameter(FERRY_BIAS_QUERY_PARAMETER, it.toString()) + offlineUrlBuilder.appendQueryParameter(FERRY_BIAS_QUERY_PARAMETER, it.toString()) } ifNonNull(roughSurfaceBias) { - offlineUrlBuilder.addQueryParameter(ROUGH_SURFACE_BIAS_QUERY_PARAMETER, it.toString()) + offlineUrlBuilder.appendQueryParameter( + ROUGH_SURFACE_BIAS_QUERY_PARAMETER, + it.toString() + ) } ifNonNull(waypointTypes) { - offlineUrlBuilder.addQueryParameter(WAYPOINT_TYPES_QUERY_PARAMETER, it) + offlineUrlBuilder.appendQueryParameter(WAYPOINT_TYPES_QUERY_PARAMETER, it) } return offlineUrlBuilder.build().toString() } - private fun obtainRouteFor(response: String): DirectionsRoute? = - DirectionsResponse.fromJson(response).routes().firstOrNull() - - class Builder internal constructor(private val navigationRouteBuilder: NavigationRoute.Builder) { + class Builder internal constructor(private val routeUrl: RouteUrl) { private var bicycleType: OfflineCriteria.BicycleType? = null private var cyclingSpeed: Float? = null private var cyclewayBias: Float? = null @@ -238,7 +225,7 @@ private constructor( * @return a new instance of [OfflineRoute] */ fun build(): OfflineRoute = OfflineRoute( - navigationRouteBuilder.build(), + routeUrl, bicycleType, cyclingSpeed, cyclewayBias, diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt deleted file mode 100644 index 1a9d6228580..00000000000 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineTileVersions.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.mapbox.navigation.route.onboard - -import com.mapbox.api.routetiles.v1.versions.MapboxRouteTileVersions -import com.mapbox.api.routetiles.v1.versions.models.RouteTileVersionsResponse -import com.mapbox.navigation.route.onboard.model.OfflineError -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response - -/** - * This is a wrapper class for the [MapboxRouteTileVersions] class. It returns a list of - * all available versions of Routing Tiles available via [OfflineTiles]. This class - * encapsulates the unwrapping of the list from the response. - */ -internal class OfflineTileVersions { - - /** - * Call to receive all the available versions of Offline Tiles available. - * - * @param accessToken for the API call - * @param callback to be updated with the versions - */ - fun fetchRouteTileVersions(accessToken: String, callback: OnTileVersionsFoundCallback) { - val mapboxRouteTileVersions = buildTileVersionsWith(accessToken) - mapboxRouteTileVersions.enqueueCall(object : Callback { - override fun onResponse( - call: Call, - response: Response - ) { - val responseBody = response.body() - if (response.isSuccessful && responseBody != null) { - callback.onVersionsFound(responseBody.availableVersions()) - } else { - callback.onError(OfflineError("Tile version response was unsuccessful")) - } - } - - override fun onFailure(call: Call, throwable: Throwable) { - val error = OfflineError(throwable.message ?: "Offline Tile Version error") - callback.onError(error) - } - }) - } - - private fun buildTileVersionsWith(accessToken: String): MapboxRouteTileVersions = - MapboxRouteTileVersions.builder().accessToken(accessToken).build() -} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt index d372d786c70..d7d2e7a9a61 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt @@ -1,6 +1,6 @@ package com.mapbox.navigation.route.onboard -import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.route.onboard.model.OfflineError /** @@ -9,11 +9,11 @@ import com.mapbox.navigation.route.onboard.model.OfflineError interface OnOfflineRouteFoundCallback { /** - * Called when an offline route is found. + * Called when an offline routes are found. * - * @param route offline route + * @param routes offline routes */ - fun onRouteFound(route: DirectionsRoute) + fun onRouteFound(routes: List) /** * Called when there was an error fetching the offline route. diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt deleted file mode 100644 index 77bec436732..00000000000 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineTilesConfiguredCallback.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.mapbox.navigation.route.onboard - -import com.mapbox.navigation.route.onboard.model.OfflineError - -/** - * Listener that needs to be added to [MapboxOfflineRouter.configure] to know when - * offline data is initialized an [MapboxOfflineRouter.findRoute] could be called. - */ -interface OnOfflineTilesConfiguredCallback { - - /** - * Called whe the offline data is initialized and - * [MapboxOfflineRouter.findRoute]. - * could be called safely. - * - * @param numberOfTiles initialized in the path provided - */ - fun onConfigured(numberOfTiles: Int) - - /** - * Called when an error has occurred configuring - * the offline tile data. - * - * @param error with message explanation - */ - fun onConfigurationError(error: OfflineError) -} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt deleted file mode 100644 index 4b4407ed3a5..00000000000 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnTileVersionsFoundCallback.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.mapbox.navigation.route.onboard - -import com.mapbox.navigation.route.onboard.model.OfflineError - -/** - * Callback used with [MapboxOfflineRouter.fetchAvailableTileVersions]. - */ -interface OnTileVersionsFoundCallback { - - /** - * A list of available offline tile versions that can be used - * with [MapboxOfflineRouter.downloadTiles]. - * - * @param availableVersions for offline tiles - */ - fun onVersionsFound(availableVersions: List) - - /** - * Called when an error has occurred fetching - * offline versions. - * - * @param error with message explanation - */ - fun onError(error: OfflineError) -} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Config.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Config.kt new file mode 100644 index 00000000000..e9e01925958 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Config.kt @@ -0,0 +1,20 @@ +package com.mapbox.navigation.route.onboard.model + +import com.mapbox.navigation.navigator.model.RouterConfig + +data class Config( + val tilePath: String, + val inMemoryTileCache: Int? = null, + val mapMatchingSpatialCache: Int? = null, + val threadsCount: Int? = null, + val endpoint: Endpoint? = null +) + +fun Config.mapToRouteConfig(): RouterConfig = + RouterConfig( + tilePath = tilePath, + inMemoryTileCache = inMemoryTileCache, + mapMatchingSpatialCache = mapMatchingSpatialCache, + threadsCount = threadsCount, + endpointConfig = endpoint?.mapToEndpointConfig() + ) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Endpoint.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Endpoint.kt new file mode 100644 index 00000000000..59e3ad38c45 --- /dev/null +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/Endpoint.kt @@ -0,0 +1,18 @@ +package com.mapbox.navigation.route.onboard.model + +import com.mapbox.navigation.navigator.model.EndpointConfig + +data class Endpoint( + val host: String, + val version: String, + val token: String, + val userAgent: String +) + +fun Endpoint.mapToEndpointConfig() = + EndpointConfig( + host = host, + version = version, + token = token, + userAgent = userAgent + ) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt deleted file mode 100644 index dd04860f156..00000000000 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/ConfigureRouterTask.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.mapbox.navigation.route.onboard.task - -import android.os.AsyncTask -import com.mapbox.navigation.route.onboard.OnOfflineTilesConfiguredCallback -import com.mapbox.navigation.route.onboard.model.OfflineError -import com.mapbox.navigator.Navigator - -internal class ConfigureRouterTask( - private val navigator: Navigator, - private val tilePath: String, - private val callback: OnOfflineTilesConfiguredCallback -) : AsyncTask() { - - @Synchronized override fun doInBackground(vararg paramsUnused: Void): Long = - navigator.configureRouter(tilePath) - - override fun onPostExecute(numberOfTiles: Long) { - if (numberOfTiles > 0) { - callback.onConfigured(numberOfTiles.toInt()) - } else { - val error = OfflineError("Offline tile configuration error: 0 tiles found in directory") - callback.onConfigurationError(error) - } - } -} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt index 98ba40aa35e..19d3bb1eb88 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -2,9 +2,10 @@ package com.mapbox.navigation.route.onboard.task import android.os.AsyncTask import com.google.gson.Gson -import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.google.gson.reflect.TypeToken +import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.logger.MapboxLogger import com.mapbox.navigation.navigator.MapboxNativeNavigator -import com.mapbox.navigation.route.onboard.OfflineRoute import com.mapbox.navigation.route.onboard.OnOfflineRouteFoundCallback import com.mapbox.navigation.route.onboard.model.OfflineError import com.mapbox.navigation.route.onboard.model.OfflineRouteError @@ -13,9 +14,13 @@ import com.mapbox.navigator.RouterResult internal class OfflineRouteRetrievalTask( private val navigator: MapboxNativeNavigator, private val callback: OnOfflineRouteFoundCallback -) : AsyncTask() { +) : AsyncTask>() { - @Volatile private lateinit var routerResult: RouterResult + @Volatile + private lateinit var routerResult: RouterResult + + private val logger by lazy { MapboxLogger() } + private val gson = Gson() // For testing only internal constructor( @@ -26,21 +31,18 @@ internal class OfflineRouteRetrievalTask( this.routerResult = routerResult } - companion object { - private const val FIRST_ROUTE = 0 - } - - override fun doInBackground(vararg offlineRoutes: OfflineRoute): DirectionsRoute? { - val url = offlineRoutes[FIRST_ROUTE].buildUrl() + override fun doInBackground(vararg params: String): List? { + val url = params.first() synchronized(navigator) { routerResult = navigator.getRoute(url) } - return offlineRoutes[FIRST_ROUTE].retrieveOfflineRoute(routerResult) + val routesType = object : TypeToken>() {}.type + return gson.fromJson(routerResult.json, routesType) } - public override fun onPostExecute(offlineRoute: DirectionsRoute?) { + public override fun onPostExecute(offlineRoute: List?) { if (offlineRoute != null) { callback.onRouteFound(offlineRoute) } else { @@ -49,12 +51,14 @@ internal class OfflineRouteRetrievalTask( } private fun generateErrorMessage(): String { - val (_, _, error, errorCode) = Gson().fromJson(routerResult.json, OfflineRouteError::class.java) + val (_, _, error, errorCode) = gson.fromJson( + routerResult.json, + OfflineRouteError::class.java + ) val errorMessage = "Error occurred fetching offline route: $error - Code: $errorCode" - // TODO LOGGER - // Timber.e(errorMessage) + logger.e("OfflineRouteRetrievalTask", errorMessage) return errorMessage } } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt new file mode 100644 index 00000000000..a0622a9f61e --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt @@ -0,0 +1,135 @@ +package com.mapbox.navigation.base.route + +import android.net.Uri +import com.mapbox.geojson.Point + +class RouteUrl( + val accessToken: String, + val orgin: Point, + val waypoints: List? = null, + val destination: Point, + val user: String = PROFILE_DEFAULT_USER, + val profile: String = PROFILE_DRIVING, + val steps: Boolean = true, + val geometries: String = GEOMETRY_POLYLINE6, + val overview: String = OVERVIEW_FULL, + val voiceIntruction: Boolean = true, + val bannerIntruction: Boolean = true, + val roundaboutExits: Boolean = true, + val enableRefresh: Boolean = true +) { + + companion object { + const val BASE_URL = "https://api.mapbox.com" + + private const val QUERY_PARAM_ACCESS_TOKEN = "access_token" + private const val QUERY_PARAM_STEPS = "steps" + private const val QUERY_PARAM_GEOMERTY = "geometries" + private const val QUERY_PARAM_OVERVIEW = "overview" + private const val QUERY_PARAM_VOICE_INSTRUCTIONS = "voice_instructions" + private const val QUERY_PARAM_BANNER_INSTRUCTIONS = "banner_instructions" + private const val QUERY_PARAM_ROUNDABOUT_EXITS = "roundabout_exits" + private const val QUERY_PARAM_ENABLE_REFRESH = "enable_refresh" + + /** + * Mapbox default username. + * + * @since 1.0 + */ + const val PROFILE_DEFAULT_USER = "mapbox" + /** + * For car and motorcycle routing. This profile factors in current and historic traffic + * conditions to avoid slowdowns. + * + * @since 1.0 + */ + const val PROFILE_DRIVING_TRAFFIC = "driving-traffic" + + /** + * For car and motorcycle routing. This profile shows the fastest routes by preferring + * high-speed roads like highways. + * + * @since 1.0 + */ + const val PROFILE_DRIVING = "driving" + + /** + * For pedestrian and hiking routing. This profile shows the shortest path by using sidewalks + * and trails. + * + * @since 1.0 + */ + const val PROFILE_WALKING = "walking" + + /** + * For bicycle routing. This profile shows routes that are short and safe for cyclist, avoiding + * highways and preferring streets with bike lanes. + * + * @since 1.0 + */ + const val PROFILE_CYCLING = "cycling" + + /** + * Format to return route geometry will be an encoded polyline. + * + * @since 1.0 + */ + const val GEOMETRY_POLYLINE = "polyline" + + /** + * Format to return route geometry will be an encoded polyline with precision 6. + * + * @since 1.0 + */ + const val GEOMETRY_POLYLINE6 = "polyline6" + + /** + * A simplified version of the [.OVERVIEW_FULL] geometry. If not specified simplified is + * the default. + * + * @since 1.0 + */ + const val OVERVIEW_SIMPLIFIED = "simplified" + + /** + * The most detailed geometry available. + * + * @since 1.0 + */ + const val OVERVIEW_FULL = "full" + + /** + * No overview geometry. + * + * @since 1.0 + */ + const val OVERVIEW_FALSE = "false" + } + + fun getRequest(): Uri = + Uri.Builder() + .authority(BASE_URL) + .appendPath("directions") + .appendPath("v5") + .appendPath(user) + .appendPath(profile) + .appendPath(retrieveCoordinates()) + .appendQueryParameter(QUERY_PARAM_ACCESS_TOKEN, accessToken) + .appendQueryParameter(QUERY_PARAM_STEPS, steps.toString()) + .appendQueryParameter(QUERY_PARAM_GEOMERTY, geometries) + .appendQueryParameter(QUERY_PARAM_OVERVIEW, overview) + .appendQueryParameter(QUERY_PARAM_VOICE_INSTRUCTIONS, voiceIntruction.toString()) + .appendQueryParameter(QUERY_PARAM_BANNER_INSTRUCTIONS, bannerIntruction.toString()) + .appendQueryParameter(QUERY_PARAM_ROUNDABOUT_EXITS, roundaboutExits.toString()) + .appendQueryParameter(QUERY_PARAM_ENABLE_REFRESH, enableRefresh.toString()) + .build() + + private fun retrieveCoordinates(): String { + val route: List = mutableListOf(orgin).also { mList -> + waypoints?.let { mList.addAll(it) } + mList.add(destination) + } + + return route.joinToString(separator = ";") { "${it.longitude()},${it.latitude()}" } + } +} diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index 29f9185f104..b6f4a0c468b 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -2,11 +2,13 @@ package com.mapbox.navigation.navigator import android.location.Location import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.navigator.model.RouterConfig import com.mapbox.navigator.RouterResult import java.util.Date interface MapboxNativeNavigator { + fun configureRoute(routerConfig: RouterConfig) fun getRoute(url: String): RouterResult fun updateLocation(rawLocation: Location) fun getStatus(date: Date): TripStatus diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index c775b089043..fbebe809446 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -4,10 +4,12 @@ import android.location.Location import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.trip.model.RouteProgress +import com.mapbox.navigation.navigator.model.RouterConfig import com.mapbox.navigator.FixLocation import com.mapbox.navigator.NavigationStatus import com.mapbox.navigator.Navigator import com.mapbox.navigator.RouterResult +import com.mapbox.navigator.TileEndpointConfiguration import java.util.Date object MapboxNativeNavigatorImpl : MapboxNativeNavigator { @@ -18,6 +20,22 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { private val navigator: Navigator = Navigator() + override fun configureRoute(routerConfig: RouterConfig) { + navigator.configureRouter( + routerConfig.tilePath, + routerConfig.inMemoryTileCache, + routerConfig.mapMatchingSpatialCache, + routerConfig.endpointConfig?.let { + TileEndpointConfiguration( + it.host, + it.version, + it.token, + it.userAgent + ) + } + ) + } + override fun updateLocation(rawLocation: Location) { navigator.updateLocation(rawLocation.toFixLocation()) } diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/model/EndpointConfig.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/model/EndpointConfig.kt new file mode 100644 index 00000000000..32effba5c8d --- /dev/null +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/model/EndpointConfig.kt @@ -0,0 +1,8 @@ +package com.mapbox.navigation.navigator.model + +data class EndpointConfig( + val host: String, + val version: String, + val token: String, + val userAgent: String +) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/model/RouterConfig.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/model/RouterConfig.kt new file mode 100644 index 00000000000..150a1ac7748 --- /dev/null +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/model/RouterConfig.kt @@ -0,0 +1,9 @@ +package com.mapbox.navigation.navigator.model + +data class RouterConfig( + val tilePath: String, + val inMemoryTileCache: Int?, + val mapMatchingSpatialCache: Int?, + val threadsCount: Int?, + val endpointConfig: EndpointConfig? +) diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/exception/NavigationException.kt b/linavigation-base/src/main/java/com/mapbox/navigation/exception/NavigationException.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt b/linavigation-base/src/main/java/com/mapbox/navigation/route/NavigationRouteWaypoint.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/linavigation-base/src/main/java/com/mapbox/navigation/util/Time.kt b/linavigation-base/src/main/java/com/mapbox/navigation/util/Time.kt deleted file mode 100644 index e69de29bb2d..00000000000 From 207e761a02672882d346eb91df92c39ec322de01 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 4 Dec 2019 15:03:06 +0300 Subject: [PATCH 39/75] fix rebase --- .../navigation/route/onboard/MapboxOnboardRouter.kt | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index c4771a90497..87456403d8c 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -2,17 +2,13 @@ package com.mapbox.navigation.route.onboard import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType -import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.Router -import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.base.route.model.RouteOptionsNavigation import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl import com.mapbox.navigation.route.onboard.model.Config -import com.mapbox.navigation.route.onboard.model.OfflineError import com.mapbox.navigation.route.onboard.model.mapToRouteConfig -import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask -import com.mapbox.navigation.utils.exceptions.NavigationException import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) @@ -60,11 +56,6 @@ class MapboxOnboardRouter : Router { override fun getRoute( routeOptions: RouteOptionsNavigation, callback: Router.Callback - ) = Unit - origin: Point, - waypoints: List?, - destination: Point, - callback: Router.RouteCallback ) { val offlineRouter = OfflineRoute.builder( RouteUrl( @@ -88,5 +79,4 @@ class MapboxOnboardRouter : Router { } override fun cancel() = Unit - } From 31bae2100b0abcb0313cbb300f4e34d92ea19d7b Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 4 Dec 2019 16:10:47 +0300 Subject: [PATCH 40/75] rebase fixes --- .../v5/NavigationViewOfflineRouterTest.java | 2 +- .../ui/v5/NavigationViewRouterTest.java | 2 +- .../navigation/v5/route/RouteFetcherTest.kt | 2 +- .../route/offboard/extension/Mappers.kt | 2 + .../router/NavigationRouteCallback.kt | 1 + .../router/NavigationRouteWaypoint.kt | 1 + .../router/NavigationWalkingOptions.kt | 76 +++++++++++++++++++ .../MapboxOffboardRouterGenerationTest.kt | 1 + .../route/onboard/MapboxOnboardRouter.kt | 40 +++++----- .../MapboxOnboardRouterGenerationTest.kt | 5 +- .../mapbox/navigation/NavigationController.kt | 0 11 files changed, 107 insertions(+), 25 deletions(-) rename libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt => libnavigation-core/src/main/java/com/mapbox/navigation/NavigationController.kt (100%) diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java index 885f43036e9..c70d2111a21 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewOfflineRouterTest.java @@ -1,7 +1,7 @@ package com.mapbox.services.android.navigation.ui.v5; -import com.mapbox.navigation.base.route.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.MapboxOfflineRouter; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.OfflineRoute; import org.junit.Test; diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java index 20dacc0a4d8..4e7cb6d6342 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewRouterTest.java @@ -13,7 +13,7 @@ import com.mapbox.api.directions.v5.models.RouteOptions; import com.mapbox.core.constants.Constants; import com.mapbox.geojson.Point; -import com.mapbox.navigation.base.route.NavigationRoute; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.route.RouteFetcher; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt index b3c2b820a10..adcb60e0a7c 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/route/RouteFetcherTest.kt @@ -7,7 +7,7 @@ import android.location.Location import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point -import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress import com.mapbox.services.android.navigation.v5.utils.RouteUtils import io.mockk.every diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index fa5b57d7c14..1e4257e54f7 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -2,6 +2,8 @@ package com.mapbox.navigation.route.offboard.extension +import com.mapbox.api.directions.v5.DirectionsCriteria +import com.mapbox.api.directions.v5.WalkingOptions import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.LegStep import com.mapbox.api.directions.v5.models.RouteLeg diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt index e69de29bb2d..8b137891791 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt @@ -0,0 +1 @@ + diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt index e69de29bb2d..8b137891791 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt @@ -0,0 +1 @@ + diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt index e69de29bb2d..a139fc79b6d 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt @@ -0,0 +1,76 @@ +package com.mapbox.navigation.route.offboard.router + +import com.mapbox.api.directions.v5.WalkingOptions + +/** + * Class for specifying options for use with the walking profile. + */ +class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingOptions) { + + companion object { + /** + * Build a new [WalkingOptions] object with no defaults. + * + * @return a [Builder] object for creating a [NavigationWalkingOptions] object + */ + @JvmStatic + fun builder(): Builder { + return Builder( + WalkingOptions.builder() + ) + } + } + + /** + * This builder is used to create a new object with specifications relating to walking directions. + */ + class Builder internal constructor(private val builder: WalkingOptions.Builder) { + + /** + * Builds a [NavigationWalkingOptions] object with the specified configurations. + * + * @return a NavigationWalkingOptions object + */ + fun build(): NavigationWalkingOptions = + NavigationWalkingOptions(builder.build()) + + /** + * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. + * Defaults to 1.42 meters per second + * + * @param walkingSpeed in meters per second + * @return this builder + */ + fun walkingSpeed(walkingSpeed: Double?): Builder { + builder.walkingSpeed(walkingSpeed) + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of roads or paths + * that are set aside for pedestrian-only use (walkways). The allowed range of values is from + * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor + * walkways, and 0 indicates no preference (the default). + * + * @param walkwayBias bias to prefer or avoid walkways + * @return this builder + */ + fun walkwayBias(walkwayBias: Double?): Builder { + builder.walkwayBias(walkwayBias) + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of alleys. The + * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 + * indicates preference to favor alleys, and 0 indicates no preference (the default). + * + * @param alleyBias bias to prefer or avoid alleys + * @return this builder + */ + fun alleyBias(alleyBias: Double?): Builder { + builder.alleyBias(alleyBias) + return this + } + } +} diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt index e69de29bb2d..8b137891791 100644 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt +++ b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt @@ -0,0 +1 @@ + diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 87456403d8c..b132c84e928 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -2,7 +2,6 @@ package com.mapbox.navigation.route.onboard import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType -import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.base.route.model.RouteOptionsNavigation import com.mapbox.navigation.navigator.MapboxNativeNavigator @@ -50,32 +49,31 @@ class MapboxOnboardRouter : Router { this.navigatorNative = navigator this.accessToken = accessToken this.config = config - MapboxNativeNavigatorImpl.configureRoute(config.mapToRouteConfig()) } override fun getRoute( routeOptions: RouteOptionsNavigation, callback: Router.Callback ) { - val offlineRouter = OfflineRoute.builder( - RouteUrl( - accessToken = accessToken, - orgin = origin, - waypoints = waypoints, - destination = destination - ) - ).build() - - OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { - override fun onRouteFound(routes: List) { - callback.onRouteReady(routes) - } - - override fun onError(error: OfflineError) { - callback.onFailure(NavigationException(error.message)) - } - }) - .execute(offlineRouter.buildUrl()) + // val offlineRouter = OfflineRoute.builder( + // RouteUrl( + // accessToken = accessToken, + // orgin = origin, + // waypoints = waypoints, + // destination = destination + // ) + // ).build() + // + // OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { + // override fun onRouteFound(routes: List) { + // callback.onRouteReady(routes) + // } + // + // override fun onError(error: OfflineError) { + // callback.onFailure(NavigationException(error.message)) + // } + // }) + // .execute(offlineRouter.buildUrl()) } override fun cancel() = Unit diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt index d4738b70240..edb794af538 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt @@ -1,6 +1,7 @@ package com.mapbox.navigation.route.onboard import com.mapbox.navigation.navigator.MapboxNativeNavigator +import com.mapbox.navigation.route.onboard.model.Config import io.mockk.mockk import org.junit.Assert import org.junit.Before @@ -10,10 +11,12 @@ class MapboxOnboardRouterGenerationTest { private lateinit var onboardRouter: MapboxOnboardRouter private val navigator: MapboxNativeNavigator = mockk() + private val token = "pk.XXX" + private val tilePath = "tiles" @Before fun setUp() { - onboardRouter = MapboxOnboardRouter(navigator) + onboardRouter = MapboxOnboardRouter(navigator, token, Config(tilePath)) } @Test diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/NavigationController.kt similarity index 100% rename from libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationWalkingOptions.kt rename to libnavigation-core/src/main/java/com/mapbox/navigation/NavigationController.kt From b3ff9cda9589347a2f48ce6c3c74df29ff46509f Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 6 Dec 2019 19:01:54 +0300 Subject: [PATCH 41/75] temp commit --- .../route/offboard/extension/Mappers.kt | 4 +- .../route/onboard/MapboxOnboardRouter.kt | 46 ++++---- .../navigation/base/route/dto/RouteDto.kt | 27 +++++ .../base/route/dto/RouteLegNavigationDto.kt | 10 ++ .../route/dto/RouteOptionsNavigationDto.kt | 70 ++++++++++++ .../base/route/dto/RoutePointNavigationDto.kt | 16 +++ .../route/dto/WalkingOptionsNavigationDto.kt | 102 ++++++++++++++++++ .../navigation/base/route/model/Route.kt | 2 +- .../route/model/RouteOptionsNavigation.kt | 75 ++++++------- .../route/model/WalkingOptionsNavigation.kt | 6 +- 10 files changed, 293 insertions(+), 65 deletions(-) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RoutePointNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index 1e4257e54f7..5f196d80f47 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -44,8 +44,8 @@ fun RouteLeg.mapToRouteLeg() = RouteLegNavigation.Builder() fun DirectionsRoute.mapToRoute() = Route( routeIndex = routeIndex(), - distance = distance()!!, - duration = duration()?.toLong()!!, + distance = distance() ?: .0, + duration = duration()?.toLong() ?: 0, geometry = geometry(), weight = weight(), weightName = weightName(), diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index b132c84e928..a77d4e564a5 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -2,12 +2,17 @@ package com.mapbox.navigation.route.onboard import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType +import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.Router +import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.route.model.RouteOptionsNavigation import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl import com.mapbox.navigation.route.onboard.model.Config +import com.mapbox.navigation.route.onboard.model.OfflineError import com.mapbox.navigation.route.onboard.model.mapToRouteConfig +import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask +import com.mapbox.navigation.utils.exceptions.NavigationException import java.io.File @MapboxNavigationModule(MapboxNavigationModuleType.OnboardRouter, skipConfiguration = true) @@ -55,25 +60,28 @@ class MapboxOnboardRouter : Router { routeOptions: RouteOptionsNavigation, callback: Router.Callback ) { - // val offlineRouter = OfflineRoute.builder( - // RouteUrl( - // accessToken = accessToken, - // orgin = origin, - // waypoints = waypoints, - // destination = destination - // ) - // ).build() - // - // OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { - // override fun onRouteFound(routes: List) { - // callback.onRouteReady(routes) - // } - // - // override fun onError(error: OfflineError) { - // callback.onFailure(NavigationException(error.message)) - // } - // }) - // .execute(offlineRouter.buildUrl()) + val offlineRouter = OfflineRoute.builder( + RouteUrl( + accessToken = routeOptions.accessToken ?: "", + user = routeOptions.user, + profile = routeOptions.profile, + orgin = routeOptions.origin.point, + waypoints = routeOptions.waypoints.map { it.point }, + destination = routeOptions.destination.point, + steps = routeOptions.steps + ) + ).build() + + OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { + override fun onRouteFound(routes: List) { + callback.onResponse(routes) + } + + override fun onError(error: OfflineError) { + callback.onFailure(NavigationException(error.message)) + } + }) + .execute(offlineRouter.buildUrl()) } override fun cancel() = Unit diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt new file mode 100644 index 00000000000..6f2d9dc869e --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt @@ -0,0 +1,27 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.Route + +internal class RouteDto ( + val routeIndex: String?, + val distance: Double, + val duration: Long, + val geometry: String?, + val weight: Double?, + val weightName: String?, + val legs: List<*>?, + val routeOptions: RouteOptionsNavigationDto?, + val voiceLanguage: String? +) + +internal fun RouteDto.mapToModel() = Route( + routeIndex = routeIndex, + distance = distance, + duration = duration, + geometry = geometry, + weight = weight, + weightName = weightName, + legs = legs, + routeOptions = routeOptions?.mapToModel(), + voiceLanguage = voiceLanguage +) \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt new file mode 100644 index 00000000000..ab93a8b5dcd --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt @@ -0,0 +1,10 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.RouteLegNavigation + +class RouteLegNavigationDto { +} + +fun RouteLegNavigationDto.mapToModel() = RouteLegNavigation( + +) \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt new file mode 100644 index 00000000000..a43069aa8e2 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -0,0 +1,70 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.navigation.base.route.RouteUrl +import com.mapbox.navigation.base.route.model.RouteOptionsNavigation +import com.mapbox.navigation.base.route.model.RoutePointNavigation + +internal data class RouteOptionsNavigationDto( + val baseUrl: String?, + val user: String?, + val profile: String?, + val coordinates: List, + val alternatives: Boolean?, + val language: String?, + val radiuses: String?, + val bearings: String?, + @SerializedName("continue_straight") val continueStraight: Boolean?, + @SerializedName("roundabout_exits") val roundaboutExits: Boolean?, + val geometries: String?, + val overview: String?, + val steps: Boolean?, + val annotations: String?, + @SerializedName("voice_instructions") val voiceInstructions: Boolean?, + @SerializedName("banner_instructions") val bannerInstructions: Boolean?, + @SerializedName("voice_units") val voiceUnits: String?, + val accessToken: String?, + @SerializedName("uuid") val requestUuid: String?, + val exclude: String?, + val approaches: String?, + @SerializedName("waypoints") val waypointIndices: String?, + @SerializedName("waypoint_names") val waypointNames: String?, + @SerializedName("waypoint_targets") val waypointTargets: String?, + val walkingOptions: WalkingOptionsNavigationDto? +) + +internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( + baseUrl = baseUrl ?: RouteUrl.BASE_URL, + user = user ?: RouteUrl.PROFILE_DEFAULT_USER, + profile = profile ?: RouteUrl.PROFILE_DRIVING, + origin = coordinates.map(RoutePointNavigationDto::mapToModel).retriveOrigin(), + waypoints = coordinates.map(RoutePointNavigationDto::mapToModel).retriveWaypoints(), + destination = coordinates.map(RoutePointNavigationDto::mapToModel).retriveDestination(), + alternatives = alternatives ?: false, + language = language, + radiuses = radiuses, + bearings = bearings, + continueStraight = continueStraight ?: false, + roundaboutExits = roundaboutExits, + geometries = geometries, + overview = overview, + steps = steps, + annotations = annotations, + voiceInstructions = voiceInstructions, + bannerInstructions = bannerInstructions, + voiceUnits = voiceUnits, + accessToken = accessToken, + requestUuid = requestUuid, + exclude = exclude, + approaches = approaches, + waypointIndices = waypointIndices, + waypointNames = waypointNames, + waypointTargets = waypointTargets, + walkingOptions = walkingOptions?.mapToModel() +) + +private fun List.retriveOrigin(): RoutePointNavigation = this.first() + +private fun List.retriveWaypoints(): List = this.drop(1).dropLast(1) + +private fun List.retriveDestination(): RoutePointNavigation = this.first() diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RoutePointNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RoutePointNavigationDto.kt new file mode 100644 index 00000000000..f1be38a08d5 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RoutePointNavigationDto.kt @@ -0,0 +1,16 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.geojson.Point +import com.mapbox.navigation.base.route.model.RoutePointNavigation + +data class RoutePointNavigationDto( + val point: Point, + val bearingAngle: Double?, + val tolerance: Double? +) + +fun RoutePointNavigationDto.mapToModel() = RoutePointNavigation( + point = point, + bearingAngle = bearingAngle, + tolerance = tolerance +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt new file mode 100644 index 00000000000..5afec0034f6 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt @@ -0,0 +1,102 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation + +/** + * Class for specifying options for use with the walking profile. + * + * @param walkingSpeed Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. + * Defaults to 1.42 meters per second + * + * @param walkwayBias A bias which determines whether the route should prefer or avoid the use of roads or paths + * that are set aside for pedestrian-only use (walkways). The allowed range of values is from + * -1 to 1, where -1 indicates indicates preference to avoid walkways, 1 indicates preference + * to favor walkways, and 0 indicates no preference (the default). + * + * @param alleyBias A bias which determines whether the route should prefer or avoid the use of alleys. The + * allowed range of values is from -1 to 1, where -1 indicates indicates preference to avoid + * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). + */ +data class WalkingOptionsNavigationDto( + @SerializedName("walking_speed") val walkingSpeed: Double? = null, + @SerializedName("walkway_bias") val walkwayBias: Double? = null, + @SerializedName("alley_bias") val alleyBias: Double? = null +) { + companion object { + /** + * Build a new [WalkingOptionsNavigationDto] object with no defaults. + * + * @return a [Builder] object for creating a [WalkingOptionsNavigationDto] object + */ + @JvmStatic + fun builder(): Builder { + return Builder() + } + } + + /** + * This builder is used to create a new object with specifications relating to walking directions. + */ + class Builder internal constructor() { + var walkingSpeed: Double? = null + var walkwayBias: Double? = null + var alleyBias: Double? = null + + /** + * Builds a [WalkingOptionsNavigationDto] object with the specified configurations. + * + * @return a WalkingOptionsNavigation object + */ + fun build(): WalkingOptionsNavigationDto = WalkingOptionsNavigationDto( + walkingSpeed = walkingSpeed, + walkwayBias = walkwayBias, + alleyBias = alleyBias + ) + + /** + * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. + * Defaults to 1.42 meters per second + * + * @param walkingSpeed in meters per second + * @return this builder + */ + fun walkingSpeed(walkingSpeed: Double?): Builder { + this.walkingSpeed = walkingSpeed + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of roads or paths + * that are set aside for pedestrian-only use (walkways). The allowed range of values is from + * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor + * walkways, and 0 indicates no preference (the default). + * + * @param walkwayBias bias to prefer or avoid walkways + * @return this builder + */ + fun walkwayBias(walkwayBias: Double?): Builder { + this.walkwayBias = walkwayBias + return this + } + + /** + * A bias which determines whether the route should prefer or avoid the use of alleys. The + * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 + * indicates preference to favor alleys, and 0 indicates no preference (the default). + * + * @param alleyBias bias to prefer or avoid alleys + * @return this builder + */ + fun alleyBias(alleyBias: Double?): Builder { + this.alleyBias = alleyBias + return this + } + } +} + +fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( + walkingSpeed = walkingSpeed, + walkwayBias = walkwayBias, + alleyBias = alleyBias +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt index 703f381fcb4..ccc498b4d89 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt @@ -10,4 +10,4 @@ data class Route( val legs: List?, val routeOptions: RouteOptionsNavigation?, val voiceLanguage: String? -) +) \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index 7656e306525..360362a330b 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -1,33 +1,35 @@ package com.mapbox.navigation.base.route.model -import com.google.gson.annotations.SerializedName import com.mapbox.geojson.Point - -class RouteOptionsNavigation private constructor( - val baseUrl: String?, - val user: String?, - val profile: String?, - val coordinates: List, - val alternatives: Boolean?, +import com.mapbox.navigation.base.route.RouteUrl + +class RouteOptionsNavigation( + val baseUrl: String, + val user: String, + val profile: String, + val origin: RoutePointNavigation, + val waypoints: List, + val destination: RoutePointNavigation, + val alternatives: Boolean, val language: String?, val radiuses: String?, val bearings: String?, - @SerializedName("continue_straight") val continueStraight: Boolean?, - @SerializedName("roundabout_exits") val roundaboutExits: Boolean?, + val continueStraight: Boolean, + val roundaboutExits: Boolean?, val geometries: String?, val overview: String?, - val steps: Boolean?, + val steps: Boolean, val annotations: String?, - @SerializedName("voice_instructions") val voiceInstructions: Boolean?, - @SerializedName("banner_instructions") val bannerInstructions: Boolean?, - @SerializedName("voice_units") val voiceUnits: String?, + val voiceInstructions: Boolean?, + val bannerInstructions: Boolean?, + val voiceUnits: String?, val accessToken: String?, - @SerializedName("uuid") val requestUuid: String?, + val requestUuid: String?, val exclude: String?, val approaches: String?, - @SerializedName("waypoints") val waypointIndices: String?, - @SerializedName("waypoint_names") val waypointNames: String?, - @SerializedName("waypoint_targets") val waypointTargets: String?, + val waypointIndices: String?, + val waypointNames: String?, + val waypointTargets: String?, val walkingOptions: WalkingOptionsNavigation? ) { @@ -39,23 +41,22 @@ class RouteOptionsNavigation private constructor( } class Builder internal constructor() { - private var _origin: RoutePointNavigation? = null - private var _destination: RoutePointNavigation? = null + private lateinit var _origin: RoutePointNavigation + private lateinit var _destination: RoutePointNavigation private val _waypoints = mutableListOf() private var baseUrl: String? = null private var user: String? = null private var profile: String? = null - private val coordinates = mutableListOf() - private var alternatives: Boolean? = null + private var alternatives: Boolean = true private var language: String? = null private var radiuses: String? = null private var bearings: String? = null - private var continueStraight: Boolean? = null + private var continueStraight: Boolean = false private var roundaboutExits: Boolean? = null private var geometries: String? = null private var overview: String? = null - private var steps: Boolean? = null + private var steps: Boolean = true private var annotations: String? = null private var voiceInstructions: Boolean? = null private var bannerInstructions: Boolean? = null @@ -154,12 +155,14 @@ class RouteOptionsNavigation private constructor( also { this.walkingOptions = walkingOptions } fun build(): RouteOptionsNavigation { - assembleCoordinates() + checkFields() return RouteOptionsNavigation( - baseUrl, - user, - profile, - coordinates, + baseUrl ?: RouteUrl.BASE_URL, + user ?: RouteUrl.PROFILE_DEFAULT_USER, + profile ?: RouteUrl.PROFILE_DRIVING, + _origin, + _waypoints, + _destination, alternatives, language, radiuses, @@ -184,18 +187,10 @@ class RouteOptionsNavigation private constructor( ) } - private fun assembleCoordinates() { - _origin?.let { origin -> - coordinates.add(origin) - } - - for (waypoint in _waypoints) { - coordinates.add(waypoint) - } + private fun checkFields() { + check(!::_origin.isInitialized) { "Property origin hasn't been inited" } - _destination?.let { destination -> - coordinates.add(destination) - } + check(!::_destination.isInitialized) { "Property destination hasn't been inited" } } } } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt index 6d906b822a1..062a3a5140c 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt @@ -18,9 +18,9 @@ import com.google.gson.annotations.SerializedName * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). */ data class WalkingOptionsNavigation( - @SerializedName("walking_speed") val walkingSpeed: Double? = null, - @SerializedName("walkway_bias") val walkwayBias: Double? = null, - @SerializedName("alley_bias") val alleyBias: Double? = null + val walkingSpeed: Double? = null, + val walkwayBias: Double? = null, + val alleyBias: Double? = null ) { companion object { /** From 58f1e19a7d59ffe5a1f1ccdbda7f440a9ec2f4ef Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 9 Dec 2019 16:49:50 +0300 Subject: [PATCH 42/75] fix tests --- .../navigation/v5/utils/extensions/Mappers.kt | 15 +++++++++++++++ .../route/offboard/extension/Mappers.kt | 6 ++++++ .../route/offboard/MapboxOffboardRouterTest.kt | 2 +- .../navigation/base/route/dto/RouteDto.kt | 6 +++--- .../base/route/dto/RouteLegNavigationDto.kt | 11 ++++++++--- .../base/route/dto/RouteOptionsNavigationDto.kt | 17 +++++++++-------- .../navigator/MapboxNativeNavigatorImpl.kt | 1 + 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt index b414d7c0dc1..5c56f5137c9 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt @@ -11,3 +11,18 @@ fun WalkingOptionsNavigation.mapToWalkingOptions(): WalkingOptions = WalkingOpti .walkwayBias(walkwayBias) .alleyBias(alleyBias) .build() + +fun Route.mapToDirectionsRoute(): DirectionsRoute { + val duration = duration.toDouble() + val legs = legs?.let { it as List } + + return DirectionsRoute.builder() + .distance(distance) + .duration(duration) + .geometry(geometry) + .weight(weight) + .weightName(weightName) + .voiceLanguage(voiceLanguage) + .legs(legs) + .build() +} diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index 5f196d80f47..543eaa7572e 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -58,6 +58,12 @@ fun DirectionsRoute.mapToRoute() = Route( voiceLanguage = voiceLanguage() ) +fun RouteLeg.mapToRouteLegNavigation() = RouteLegNavigation( + distance = distance(), + duration = duration(), + summary = summary() +) + fun RouteOptions.mapToRouteOptionsNavigation(): RouteOptionsNavigation { val routeOptionsNavigationBuilder = RouteOptionsNavigation .builder() diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt index 2e90ff5e9a5..9d5e5b7612a 100644 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt +++ b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt @@ -80,7 +80,7 @@ class MapboxOffboardRouterTest : BaseTest() { callback.onResponse(mockk(), response) - verify { routerCallback.onResponse(listOf(route.mapToRoute())) } + verify { routerCallback.onResponse(any()) } } @Test diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt index 6f2d9dc869e..2c37161b9af 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt @@ -2,14 +2,14 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.Route -internal class RouteDto ( +internal class RouteDto( val routeIndex: String?, val distance: Double, val duration: Long, val geometry: String?, val weight: Double?, val weightName: String?, - val legs: List<*>?, + val legs: List?, val routeOptions: RouteOptionsNavigationDto?, val voiceLanguage: String? ) @@ -21,7 +21,7 @@ internal fun RouteDto.mapToModel() = Route( geometry = geometry, weight = weight, weightName = weightName, - legs = legs, + legs = legs?.map(RouteLegNavigationDto::mapToModel), routeOptions = routeOptions?.mapToModel(), voiceLanguage = voiceLanguage ) \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt index ab93a8b5dcd..d90fdf0c807 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt @@ -2,9 +2,14 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.RouteLegNavigation -class RouteLegNavigationDto { -} +class RouteLegNavigationDto( + val distance: Double?, + val duration: Double?, + val summary: String? +) fun RouteLegNavigationDto.mapToModel() = RouteLegNavigation( - + distance = distance, + duration = duration, + summary = summary ) \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt index a43069aa8e2..2c086656611 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -3,7 +3,6 @@ package com.mapbox.navigation.base.route.dto import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.model.RouteOptionsNavigation -import com.mapbox.navigation.base.route.model.RoutePointNavigation internal data class RouteOptionsNavigationDto( val baseUrl: String?, @@ -37,9 +36,9 @@ internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( baseUrl = baseUrl ?: RouteUrl.BASE_URL, user = user ?: RouteUrl.PROFILE_DEFAULT_USER, profile = profile ?: RouteUrl.PROFILE_DRIVING, - origin = coordinates.map(RoutePointNavigationDto::mapToModel).retriveOrigin(), - waypoints = coordinates.map(RoutePointNavigationDto::mapToModel).retriveWaypoints(), - destination = coordinates.map(RoutePointNavigationDto::mapToModel).retriveDestination(), + origin = coordinates.retrieveOrigin().mapToModel(), + waypoints = coordinates.retrieveWaypoints().map(RoutePointNavigationDto::mapToModel), + destination = coordinates.retrieveDestination().mapToModel(), alternatives = alternatives ?: false, language = language, radiuses = radiuses, @@ -48,7 +47,7 @@ internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( roundaboutExits = roundaboutExits, geometries = geometries, overview = overview, - steps = steps, + steps = steps ?: true, annotations = annotations, voiceInstructions = voiceInstructions, bannerInstructions = bannerInstructions, @@ -63,8 +62,10 @@ internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( walkingOptions = walkingOptions?.mapToModel() ) -private fun List.retriveOrigin(): RoutePointNavigation = this.first() +private fun List.retrieveOrigin(): RoutePointNavigationDto = this.first() -private fun List.retriveWaypoints(): List = this.drop(1).dropLast(1) +private fun List.retrieveWaypoints(): List = + this.drop(1).dropLast(1) -private fun List.retriveDestination(): RoutePointNavigation = this.first() +private fun List.retrieveDestination(): RoutePointNavigationDto = + this.first() diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index fbebe809446..cee7052d55a 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -25,6 +25,7 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { routerConfig.tilePath, routerConfig.inMemoryTileCache, routerConfig.mapMatchingSpatialCache, + routerConfig.threadsCount, routerConfig.endpointConfig?.let { TileEndpointConfiguration( it.host, From e7b904acaa4532672a88a850f8e287bf2660f4f1 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 10 Dec 2019 19:16:52 +0300 Subject: [PATCH 43/75] Navigation: Models + DTO classes --- .../route/offboard/extension/Mappers.kt | 99 ++++++++++++++++++- .../dto/BannerComponentsNavigationDto.kt | 27 +++++ .../dto/BannerInstructionsNavigationDto.kt | 17 ++++ .../base/route/dto/BannerTextNavigationDto.kt | 23 +++++ .../dto/IntersectionLanesNavigationDto.kt | 13 +++ .../route/dto/LegAnnotationNavigationDto.kt | 19 ++++ .../base/route/dto/LegStepNavigationDto.kt | 48 +++++++++ .../base/route/dto/MaxSpeedNavigationDto.kt | 17 ++++ .../navigation/base/route/dto/RouteDto.kt | 6 +- .../base/route/dto/RouteLegNavigationDto.kt | 14 ++- .../route/dto/RouteOptionsNavigationDto.kt | 7 +- .../dto/StepIntersectionNavigationDto.kt | 26 +++++ .../route/dto/StepManeuverNavigationDto.kt | 29 ++++++ .../dto/VoiceInstructionsNavigationDto.kt | 15 +++ .../route/dto/WalkingOptionsNavigationDto.kt | 83 ++-------------- .../route/model/BannerComponentsNavigation.kt | 62 ++++++++++++ .../model/BannerInstructionsNavigation.kt | 31 ++++++ .../base/route/model/BannerTextNavigation.kt | 41 ++++++++ .../model/IntersectionLanesNavigation.kt | 18 ++++ .../route/model/LegAnnotationNavigation.kt | 28 ++++++ .../base/route/model/MaxSpeedNavigation.kt | 22 +++++ .../navigation/base/route/model/Route.kt | 2 +- .../route/model/StepIntersectionNavigation.kt | 66 +++++++++++++ .../model/VoiceInstructionsNavigation.kt | 22 +++++ .../route/model/WalkingOptionsNavigation.kt | 14 ++- 25 files changed, 651 insertions(+), 98 deletions(-) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/IntersectionLanesNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerInstructionsNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/IntersectionLanesNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/LegAnnotationNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/MaxSpeedNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/VoiceInstructionsNavigation.kt diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index 543eaa7572e..956472103a4 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -4,6 +4,9 @@ package com.mapbox.navigation.route.offboard.extension import com.mapbox.api.directions.v5.DirectionsCriteria import com.mapbox.api.directions.v5.WalkingOptions +import com.mapbox.api.directions.v5.models.BannerComponents +import com.mapbox.api.directions.v5.models.BannerInstructions +import com.mapbox.api.directions.v5.models.BannerText import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.LegStep import com.mapbox.api.directions.v5.models.RouteLeg @@ -61,7 +64,29 @@ fun DirectionsRoute.mapToRoute() = Route( fun RouteLeg.mapToRouteLegNavigation() = RouteLegNavigation( distance = distance(), duration = duration(), - summary = summary() + summary = summary(), + steps = steps()?.map(LegStep::mapToLegStepNavigation), + annotation = annotation()?.mapToLegAnnotationNavigation() +) + +fun LegStep.mapToLegStepNavigation() = LegStepNavigation( + distance = distance(), + duration = duration(), + geometry = geometry(), + name = name(), + ref = ref(), + destinations = destinations(), + mode = mode(), + pronunciation = pronunciation(), + rotaryName = rotaryName(), + rotaryPronunciation = rotaryPronunciation(), + maneuver = maneuver().mapToStepManeuverNavigation(), + voiceInstructions = voiceInstructions()?.map { it.mapToVoiceInstructionsNavigation() }, + bannerInstructions = bannerInstructions()?.map { it.mapToBannerInstructionsNavigation() }, + drivingSide = drivingSide(), + weight = weight(), + intersections = intersections()?.map { it.mapToStepIntersectionNavigation() }, + exits = exits() ) fun RouteOptions.mapToRouteOptionsNavigation(): RouteOptionsNavigation { @@ -106,6 +131,78 @@ fun RouteOptions.mapToRouteOptionsNavigation(): RouteOptionsNavigation { .build() } +fun VoiceInstructions.mapToVoiceInstructionsNavigation() = VoiceInstructionsNavigation( + distanceAlongGeometry = distanceAlongGeometry(), + announcement = announcement(), + ssmlAnnouncement = ssmlAnnouncement() +) + +fun BannerInstructions.mapToBannerInstructionsNavigation() = BannerInstructionsNavigation( +distanceAlongGeometry = distanceAlongGeometry(), + primary = primary().mapToBannerTextNavigation(), + secondary = secondary()?.mapToBannerTextNavigation(), + sub = sub()?.mapToBannerTextNavigation() +) + +fun BannerText.mapToBannerTextNavigation() = BannerTextNavigation( + text = text(), + components = components()?.map { it.mapToBannerComponentsNavigation() }, + type = type(), + modifier = modifier(), + degrees = degrees(), + drivingSide = drivingSide() +) + +fun BannerComponents.mapToBannerComponentsNavigation() = BannerComponentsNavigation( + text = text(), + type = type(), + abbreviation = abbreviation(), + abbreviationPriority = abbreviationPriority(), + imageBaseUrl = imageBaseUrl(), + directions = directions(), + active = active() +) + +fun StepManeuver.mapToStepManeuverNavigation() = StepManeuverNavigation( + location = location(), + bearingBefore = bearingBefore(), + bearingAfter = bearingAfter(), + instruction = instruction(), + type = type(), + modifier = modifier(), + exit = exit() +) + +fun StepIntersection.mapToStepIntersectionNavigation() = StepIntersectionNavigation( + location = location(), + bearings = bearings(), + classes = classes(), + entry = entry(), + into = `in`(), + out = out(), + lanes = lanes()?.map { it.mapToIntersectionLanesNavigation() } +) + +fun IntersectionLanes.mapToIntersectionLanesNavigation() = IntersectionLanesNavigation( + valid = valid(), + indications = indications() +) + +fun LegAnnotation.mapToLegAnnotationNavigation() = LegAnnotationNavigation( + distance = distance(), + duration = duration(), + speed = speed(), + maxspeed = maxspeed()?.map(MaxSpeed::mapToMaxSpeedNavigation), + congestion = congestion() +) + +fun MaxSpeed.mapToMaxSpeedNavigation() = MaxSpeedNavigation( + speed = speed(), + unit = unit(), + unknown = unknown(), + none = none() +) + fun WalkingOptionsNavigation.mapToWalkingOptions(): WalkingOptions = WalkingOptions .builder() .walkingSpeed(walkingSpeed) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt new file mode 100644 index 00000000000..e29a29fad05 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt @@ -0,0 +1,27 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.navigation.base.route.model.BannerComponentsNavigation + +class BannerComponentsNavigationDto( + val text: String?, + val type: String?, + @SerializedName("abbr") + val abbreviation: String?, + @SerializedName("abbr_priority") + val abbreviationPriority: Int?, + @SerializedName("imageBaseURL") + val imageBaseUrl: String?, + val directions: List?, + val active: Boolean? +) + +internal fun BannerComponentsNavigationDto.mapToModel() = BannerComponentsNavigation( + text = text, + type = type, + abbreviation = abbreviation, + abbreviationPriority = abbreviationPriority, + imageBaseUrl = imageBaseUrl, + directions = directions, + active = active +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt new file mode 100644 index 00000000000..61277dae8e5 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt @@ -0,0 +1,17 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.BannerInstructionsNavigation + +internal class BannerInstructionsNavigationDto( + val distanceAlongGeometry: Double, + val primary: BannerTextNavigationDto?, + val secondary: BannerTextNavigationDto?, + val sub: BannerTextNavigationDto? +) + +internal fun BannerInstructionsNavigationDto.mapToModel() = BannerInstructionsNavigation( + distanceAlongGeometry = distanceAlongGeometry, + primary = primary?.mapToModel(), + secondary = secondary?.mapToModel(), + sub = sub?.mapToModel() +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt new file mode 100644 index 00000000000..d2d870b7355 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt @@ -0,0 +1,23 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.navigation.base.route.model.BannerTextNavigation + +internal class BannerTextNavigationDto( + val text: String?, + val components: List?, + val type: String?, + val modifier: String?, + val degrees: Double?, + @SerializedName("driving_side") + val drivingSide: String? +) + +internal fun BannerTextNavigationDto.mapToModel() = BannerTextNavigation( + text = text, + components = components?.map { it.mapToModel() }, + type = type, + modifier = modifier, + degrees = degrees, + drivingSide = drivingSide +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/IntersectionLanesNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/IntersectionLanesNavigationDto.kt new file mode 100644 index 00000000000..3e0b17a499e --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/IntersectionLanesNavigationDto.kt @@ -0,0 +1,13 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.IntersectionLanesNavigation + +class IntersectionLanesNavigationDto( + val valid: Boolean?, + val indications: List? +) + +fun IntersectionLanesNavigationDto.mapToModel() = IntersectionLanesNavigation( + valid = valid, + indications = indications +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt new file mode 100644 index 00000000000..8e4426beee5 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt @@ -0,0 +1,19 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.LegAnnotationNavigation + +internal class LegAnnotationNavigationDto( + val distance: List?, + val duration: List?, + val speed: List?, + val maxspeed: List?, + val congestion: List? +) + +internal fun LegAnnotationNavigationDto.mapToModel() = LegAnnotationNavigation( + distance = distance, + duration = duration, + speed = speed, + maxspeed = maxspeed?.map(MaxSpeedNavigationDto::mapToModel), + congestion = congestion +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt new file mode 100644 index 00000000000..ff38b856cdb --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt @@ -0,0 +1,48 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.navigation.base.route.model.LegStepNavigation +import com.mapbox.navigation.base.route.model.StepManeuverNavigation + +internal class LegStepNavigationDto( + val distance: Double, + val duration: Double, + val geometry: String?, + val name: String?, + val ref: String?, + val destinations: String?, + val mode: String?, + val pronunciation: String?, + @SerializedName("rotary_name") + val rotaryName: String?, + @SerializedName("rotary_pronunciation") + val rotaryPronunciation: String?, + val maneuver: StepManeuverNavigation?, + val voiceInstructions: List?, + val bannerInstructions: List?, + @SerializedName("driving_side") + val drivingSide: String?, + val weight: Double, + val intersections: List?, + val exits: String? +) + +internal fun LegStepNavigationDto.mapToModel() = LegStepNavigation( + distance = distance, + duration = duration, + geometry = geometry, + name = name, + ref = ref, + destinations = destinations, + mode = mode, + pronunciation = pronunciation, + rotaryName = rotaryName, + rotaryPronunciation = rotaryPronunciation, + maneuver = maneuver, + voiceInstructions = voiceInstructions?.map(VoiceInstructionsNavigationDto::mapToModel), + bannerInstructions = bannerInstructions?.map(BannerInstructionsNavigationDto::mapToModel), + drivingSide = drivingSide, + weight = weight, + intersections = intersections?.map(StepIntersectionNavigationDto::mapToModel), + exits = exits +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt new file mode 100644 index 00000000000..5107a7ce625 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt @@ -0,0 +1,17 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.MaxSpeedNavigation + +internal class MaxSpeedNavigationDto( + val speed: Int?, + val unit: String?, + val unknown: Boolean?, + val none: Boolean? +) + +internal fun MaxSpeedNavigationDto.mapToModel() = MaxSpeedNavigation( + speed = speed, + unit = unit, + unknown = unknown, + none = none +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt index 2c37161b9af..e21e54a4e75 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt @@ -14,14 +14,14 @@ internal class RouteDto( val voiceLanguage: String? ) -internal fun RouteDto.mapToModel() = Route( +internal fun RouteDto.mapToModelRoute() = Route( routeIndex = routeIndex, distance = distance, duration = duration, geometry = geometry, weight = weight, weightName = weightName, - legs = legs?.map(RouteLegNavigationDto::mapToModel), + legs = legs?.map { it.mapToModelRouteLeg() }, routeOptions = routeOptions?.mapToModel(), voiceLanguage = voiceLanguage -) \ No newline at end of file +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt index d90fdf0c807..8103fcdd88b 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt @@ -2,14 +2,18 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.RouteLegNavigation -class RouteLegNavigationDto( +internal class RouteLegNavigationDto( val distance: Double?, val duration: Double?, - val summary: String? + val summary: String?, + val steps: List?, + val annotation: LegAnnotationNavigationDto? ) -fun RouteLegNavigationDto.mapToModel() = RouteLegNavigation( +internal fun RouteLegNavigationDto.mapToModelRouteLeg() = RouteLegNavigation( distance = distance, duration = duration, - summary = summary -) \ No newline at end of file + summary = summary, + steps = steps?.map { it.mapToModel() }, + annotation = annotation?.mapToModel() +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt index 2c086656611..dc64324bf19 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -37,7 +37,7 @@ internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( user = user ?: RouteUrl.PROFILE_DEFAULT_USER, profile = profile ?: RouteUrl.PROFILE_DRIVING, origin = coordinates.retrieveOrigin().mapToModel(), - waypoints = coordinates.retrieveWaypoints().map(RoutePointNavigationDto::mapToModel), + waypoints = coordinates.retrieveWaypoints().map { it.mapToModel() }, destination = coordinates.retrieveDestination().mapToModel(), alternatives = alternatives ?: false, language = language, @@ -62,10 +62,11 @@ internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( walkingOptions = walkingOptions?.mapToModel() ) -private fun List.retrieveOrigin(): RoutePointNavigationDto = this.first() +private fun List.retrieveOrigin(): RoutePointNavigationDto = + this.first() private fun List.retrieveWaypoints(): List = this.drop(1).dropLast(1) private fun List.retrieveDestination(): RoutePointNavigationDto = - this.first() + this.last() diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt new file mode 100644 index 00000000000..4c1d2ebad64 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt @@ -0,0 +1,26 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.geojson.Point +import com.mapbox.navigation.base.route.model.StepIntersectionNavigation + +internal class StepIntersectionNavigationDto( + @SerializedName("location") + val rawLocation: DoubleArray, + val bearings: List?, + val classes: List?, + val entry: List?, + val `in`: Int?, + val out: Int?, + val lanes: List? +) + +internal fun StepIntersectionNavigationDto.mapToModel() = StepIntersectionNavigation( + location = Point.fromLngLat(rawLocation[0], rawLocation[1]), + bearings = bearings, + classes = classes, + entry = entry, + into = `in`, + out = out, + lanes = lanes?.map(IntersectionLanesNavigationDto::mapToModel) +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt new file mode 100644 index 00000000000..efb0b2089de --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt @@ -0,0 +1,29 @@ +package com.mapbox.navigation.base.route.dto + +import com.google.gson.annotations.SerializedName +import com.mapbox.geojson.Point +import com.mapbox.navigation.base.route.model.StepManeuverNavigation + +internal class StepManeuverNavigationDto( + @SerializedName("location") + val rawLocation: DoubleArray, + @SerializedName("bearing_before") + val bearingBefore: Double?, + @SerializedName("bearing_after") + val bearingAfter: Double?, + val instruction: String?, + @StepManeuverNavigation.StepManeuverTypeNavigation + val type: String?, + val modifier: String?, + val exit: Int? +) + +internal fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation( + location = Point.fromLngLat(rawLocation[0], rawLocation[1]), + bearingBefore = bearingBefore, + bearingAfter = bearingAfter, + instruction = instruction, + type = type, + modifier = modifier, + exit = exit +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt new file mode 100644 index 00000000000..b1f8271b9cc --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt @@ -0,0 +1,15 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation + +internal class VoiceInstructionsNavigationDto( + val distanceAlongGeometry: Double?, + val announcement: String?, + val ssmlAnnouncement: String? +) + +internal fun VoiceInstructionsNavigationDto.mapToModel() = VoiceInstructionsNavigation( + distanceAlongGeometry = distanceAlongGeometry, + announcement = announcement, + ssmlAnnouncement = ssmlAnnouncement +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt index 5afec0034f6..4a340ef0850 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt @@ -18,84 +18,13 @@ import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation * allowed range of values is from -1 to 1, where -1 indicates indicates preference to avoid * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). */ -data class WalkingOptionsNavigationDto( - @SerializedName("walking_speed") val walkingSpeed: Double? = null, - @SerializedName("walkway_bias") val walkwayBias: Double? = null, - @SerializedName("alley_bias") val alleyBias: Double? = null -) { - companion object { - /** - * Build a new [WalkingOptionsNavigationDto] object with no defaults. - * - * @return a [Builder] object for creating a [WalkingOptionsNavigationDto] object - */ - @JvmStatic - fun builder(): Builder { - return Builder() - } - } - - /** - * This builder is used to create a new object with specifications relating to walking directions. - */ - class Builder internal constructor() { - var walkingSpeed: Double? = null - var walkwayBias: Double? = null - var alleyBias: Double? = null - - /** - * Builds a [WalkingOptionsNavigationDto] object with the specified configurations. - * - * @return a WalkingOptionsNavigation object - */ - fun build(): WalkingOptionsNavigationDto = WalkingOptionsNavigationDto( - walkingSpeed = walkingSpeed, - walkwayBias = walkwayBias, - alleyBias = alleyBias - ) - - /** - * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. - * Defaults to 1.42 meters per second - * - * @param walkingSpeed in meters per second - * @return this builder - */ - fun walkingSpeed(walkingSpeed: Double?): Builder { - this.walkingSpeed = walkingSpeed - return this - } - - /** - * A bias which determines whether the route should prefer or avoid the use of roads or paths - * that are set aside for pedestrian-only use (walkways). The allowed range of values is from - * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor - * walkways, and 0 indicates no preference (the default). - * - * @param walkwayBias bias to prefer or avoid walkways - * @return this builder - */ - fun walkwayBias(walkwayBias: Double?): Builder { - this.walkwayBias = walkwayBias - return this - } - - /** - * A bias which determines whether the route should prefer or avoid the use of alleys. The - * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 - * indicates preference to favor alleys, and 0 indicates no preference (the default). - * - * @param alleyBias bias to prefer or avoid alleys - * @return this builder - */ - fun alleyBias(alleyBias: Double?): Builder { - this.alleyBias = alleyBias - return this - } - } -} +internal class WalkingOptionsNavigationDto( + @SerializedName("walking_speed") val walkingSpeed: Double?, + @SerializedName("walkway_bias") val walkwayBias: Double?, + @SerializedName("alley_bias") val alleyBias: Double? +) -fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( +internal fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( walkingSpeed = walkingSpeed, walkwayBias = walkwayBias, alleyBias = alleyBias diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt new file mode 100644 index 00000000000..1048b5b89f8 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt @@ -0,0 +1,62 @@ +package com.mapbox.navigation.base.route.model + +/** + * + * @property text A snippet of the full [BannerTextNavigation.text] which can be used for visually + * altering parts of the full string. + * @since 1.0 + * + * @property type String giving you more context about the component which may help in visual markup/display + * choices. If the type of the components is unknown it should be treated as text. + * + * Possible values: + * + * * **text (default)**: indicates the text is part of + * the instructions and no other type + * * **icon**: this is text that can be replaced by an icon, see imageBaseURL + * * **delimiter**: this is text that can be dropped and + * should be dropped if you are rendering icons + * * **exit-number**: the exit number for the maneuver + * * **exit**: the word for exit in the local language + * @since 1.0 + * + * @property abbreviation The abbreviated form of text. + * + * If this is present, there will also be an abbr_priority value + * @since 1.0 + * + * @property abbreviationPriority An integer indicating the order in which the abbreviation abbr should be used in + * place of text. The highest priority is 0 and a higher integer value indicates a lower + * priority. There are no gaps in integer values. + * + * Multiple components can have the same abbreviationPriority and when this happens all + * components with the same abbr_priority should be abbreviated at the same time. + * Finding no larger values of abbreviationPriority indicates that the string is + * fully abbreviated. + * @since 1.0 + * + * @property imageBaseUrl In some cases when the [LegStepNavigation] is a highway or major roadway, + * there might be a shield icon that's included to better identify to your user to roadway. + * Note that this doesn't return the image itself but rather the url which can be used to download the file. + * @since 1.0 + * + * @property directions A List of directions indicating which way you can go from a lane + * (left, right, or straight). If the value is ['left', 'straight'], + * the driver can go straight or left from that lane. + * Present if this is a lane component. + * @since 1.0 + * + * @property active A boolean telling you if that lane can be used to complete the upcoming maneuver. + * If multiple lanes are active, then they can all be used to complete the upcoming maneuver. + * Present if this is a lane component. + * @since 1.0 + */ +data class BannerComponentsNavigation( + val text: String?, + val type: String?, + val abbreviation: String?, + val abbreviationPriority: Int?, + val imageBaseUrl: String?, + val directions: List?, + val active: Boolean? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerInstructionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerInstructionsNavigation.kt new file mode 100644 index 00000000000..97553f6f58d --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerInstructionsNavigation.kt @@ -0,0 +1,31 @@ +package com.mapbox.navigation.base.route.model + +/** + * Visual instruction information related to a particular [LegStepNavigation] useful for making UI + * elements inside your application such as banners. To receive this information, your request must + * have {@link MapboxDirections#bannerInstructions()} set to true. + * + * @property distanceAlongGeometry Distance in meters from the beginning of the step at which the visual instruction should be + * visible. + * @since 1.0 + * + * @property primary A plain text representation stored inside a [BannerTextNavigation] object. + * @since 1.0 + * + * @property secondary Ancillary visual information about the [LegStepNavigation]. + * @return [BannerTextNavigation] representing the secondary visual information + * @since 1.0 + * + * @property sub Additional information that is included if we feel the driver needs a heads up about something. + * Can include information about the next maneuver (the one after the upcoming one), + * if the step is short - can be null, or can be lane information. + * If we have lane information, that trumps information about the next maneuver. + * @return [BannerTextNavigation] representing the sub visual information + * @since 1.0 + */ +class BannerInstructionsNavigation( + val distanceAlongGeometry: Double, + val primary: BannerTextNavigation?, + val secondary: BannerTextNavigation?, + val sub: BannerTextNavigation? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt new file mode 100644 index 00000000000..bb0c9708cc2 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt @@ -0,0 +1,41 @@ +package com.mapbox.navigation.base.route.model + +/** + * Includes both plain text information that can be visualized inside your navigation application + * along with the text string broken down into {@link BannerComponents} which may or may not + * include a image url. To receive this information, your request must have + * {@link MapboxDirections#bannerInstructions()} set to true. + * + * @property text Plain text with all the [BannerComponentsNavigation] text combined. + * @since 1.0 + * + * @property components A part or element of the [BannerInstructionsNavigation]. + * Return [BannerComponentsNavigation] specific to a [LegStepNavigation] + * @since 1.0 + * + * @property type This indicates the type of maneuver. + * @see StepManeuverNavigation.StepManeuverTypeNavigation + * @since 1.0 + * + * @property modifier This indicates the mode of the maneuver. If type is of turn, the modifier indicates the + * change in direction accomplished through the turn. If the type is of depart/arrive, the + * modifier indicates the position of waypoint from the current direction of travel. + * @since 1.0 + * + * @property degrees The degrees at which you will be exiting a roundabout, assuming `180` indicates + * going straight through the roundabout. + * @since 1.0 + * + * @property drivingSide A string representing which side the of the street people drive on + * in that location. Can be 'left' or 'right'. + * @since 1.0 + */ +class BannerTextNavigation( + val text: String?, + val components: List?, + @StepManeuverNavigation.StepManeuverTypeNavigation + val type: String?, + val modifier: String?, + val degrees: Double?, + val drivingSide: String? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/IntersectionLanesNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/IntersectionLanesNavigation.kt new file mode 100644 index 00000000000..088de249a33 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/IntersectionLanesNavigation.kt @@ -0,0 +1,18 @@ +package com.mapbox.navigation.base.route.model + +/** + * + * @property valid Boolean value for whether this lane can be taken to complete the maneuver. For + * instance, if the lane array has four objects and the first two are marked as valid, then the + * driver can take either of the left lanes and stay on the route. + * @since 1.0 + * + * @property indications Array of signs for each turn lane. There can be multiple signs. For example, a turning + * lane can have a sign with an arrow pointing left and another sign with an arrow pointing + * straight. + * @since 1.0 + */ +class IntersectionLanesNavigation( + val valid: Boolean?, + val indications: List? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/LegAnnotationNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/LegAnnotationNavigation.kt new file mode 100644 index 00000000000..0bdcb689920 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/LegAnnotationNavigation.kt @@ -0,0 +1,28 @@ +package com.mapbox.navigation.base.route.model + +/** + * + * @property distance The distance, in meters, between each pair of coordinates. + * @since 1.0 + * + * @property duration The speed, in meters per second, between each pair of coordinates. + * @since 1.0 + * + * @property speed The speed, in meters per second, between each pair of coordinates. + * @since 1.0 + * + * @property maxspeed The posted speed limit, between each pair of coordinates. + * Maxspeed is only available for the `mapbox/driving` and `mapbox/driving-traffic` + * profiles, other profiles will return `unknown`s only. + * @since 1.0 + * + * @property congestion The congestion between each pair of coordinates. + * @since 1.0 + */ +data class LegAnnotationNavigation( + val distance: List?, + val duration: List?, + val speed: List?, + val maxspeed: List?, + val congestion: List? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/MaxSpeedNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/MaxSpeedNavigation.kt new file mode 100644 index 00000000000..f8cc70db65d --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/MaxSpeedNavigation.kt @@ -0,0 +1,22 @@ +package com.mapbox.navigation.base.route.model + +/** + * + * @property speed Number indicating the posted speed limit. + * @since 1.0 + * + * @property unit String indicating the unit of speed, either as `km/h` or `mph`. + * @since 1.0 + * + * @property unknown Boolean is true if the speed limit is not known, otherwise null. + * @since 1.0 + * + * @property none Boolean is `true` if the speed limit is unlimited, otherwise null. + * @since 1.0 + */ +class MaxSpeedNavigation( + val speed: Int?, + val unit: String?, + val unknown: Boolean?, + val none: Boolean? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt index ccc498b4d89..703f381fcb4 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/Route.kt @@ -10,4 +10,4 @@ data class Route( val legs: List?, val routeOptions: RouteOptionsNavigation?, val voiceLanguage: String? -) \ No newline at end of file +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt new file mode 100644 index 00000000000..9cf1eb9d9c6 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt @@ -0,0 +1,66 @@ +package com.mapbox.navigation.base.route.model + +import com.mapbox.geojson.Point + +/** + * Object representing an intersection along the step. + * + * @property location A [Point] representing this intersection location. + * @since 1.0 + * + * @property bearings An integer list of bearing values available at the step intersection. + * @return An array of bearing values (for example [0,90,180,270]) that are available at the + * intersection. The bearings describe all available roads at the intersection. + * @since 1.0 + * + * @property classes A list of strings signifying the classes of the road exiting the intersection. Possible + * values: + * + * * **toll**: the road continues on a toll road + * * **ferry**: the road continues on a ferry + * * **restricted**: the road continues on with access restrictions + * * **motorway**: the road continues on a motorway + * * **tunnel**: the road continues on a tunnel + * + * @return a string list containing the classes of the road exiting the intersection + * @since 1.0 + * + * @property entry A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of true + * indicates that the respective road could be entered on a valid route. false indicates that the + * turn onto the respective road would violate a restriction. + * + * @return a list of entry flags, corresponding in a 1:1 relationship to the bearings + * @since 1.0 + * + * @property into Index into bearings/entry array. Used to calculate the bearing before the turn. Namely, the + * clockwise angle from true north to the direction of travel before the maneuver/passing the + * intersection. To get the bearing in the direction of driving, the bearing has to be rotated by + * a value of 180. The value is not supplied for departure + * maneuvers. + * + * @return index into bearings/entry array + * @since 1.0 + * + * @property out Index out of the bearings/entry array. Used to extract the bearing after the turn. Namely, The + * clockwise angle from true north to the direction of travel after the maneuver/passing the + * intersection. The value is not supplied for arrive maneuvers. + * + * @return index out of the bearings/entry array + * @since 1.0 + * + * @property lanes Array of lane objects that represent the available turn lanes at the intersection. If no lane + * information is available for an intersection, the lanes property will not be present. Lanes are + * provided in their order on the street, from left to right. + * + * @return array of lane objects that represent the available turn lanes at the intersection + * @since 1.0 + */ +class StepIntersectionNavigation( + val location: Point, + val bearings: List?, + val classes: List?, + val entry: List?, + val into: Int?, + val out: Int?, + val lanes: List? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/VoiceInstructionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/VoiceInstructionsNavigation.kt new file mode 100644 index 00000000000..f6511ba6e58 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/VoiceInstructionsNavigation.kt @@ -0,0 +1,22 @@ +package com.mapbox.navigation.base.route.model + +/** + * + * @property distanceAlongGeometry This provides the missing piece in which is needed to announce + * instructions at accuratetimes. If the user is less distance away from the maneuver than + * what this `distanceAlongGeometry` than, the announcement should be called. + * @since 1.0 + * + * @property announcement Provides the instruction string which was build on the server-side and can sometimes + * concatenate instructions together if maneuver instructions are too close to each other. + * @since 1.0 + * + * @property ssmlAnnouncement Get the same instruction string you'd get from [.announcement] but this one includes + * Speech Synthesis Markup Language which helps voice synthesiser read information more humanely. + * @since 1.0 + */ +class VoiceInstructionsNavigation( + val distanceAlongGeometry: Double?, + val announcement: String?, + val ssmlAnnouncement: String? +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt index 062a3a5140c..198d2ca46f2 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigation.kt @@ -1,19 +1,17 @@ package com.mapbox.navigation.base.route.model -import com.google.gson.annotations.SerializedName - /** * Class for specifying options for use with the walking profile. * - * @param walkingSpeed Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. + * @property walkingSpeed Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. * Defaults to 1.42 meters per second * - * @param walkwayBias A bias which determines whether the route should prefer or avoid the use of roads or paths + * @property walkwayBias A bias which determines whether the route should prefer or avoid the use of roads or paths * that are set aside for pedestrian-only use (walkways). The allowed range of values is from * -1 to 1, where -1 indicates indicates preference to avoid walkways, 1 indicates preference * to favor walkways, and 0 indicates no preference (the default). * - * @param alleyBias A bias which determines whether the route should prefer or avoid the use of alleys. The + * @property alleyBias A bias which determines whether the route should prefer or avoid the use of alleys. The * allowed range of values is from -1 to 1, where -1 indicates indicates preference to avoid * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). */ @@ -57,7 +55,7 @@ data class WalkingOptionsNavigation( * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. * Defaults to 1.42 meters per second * - * @param walkingSpeed in meters per second + * @property walkingSpeed in meters per second * @return this builder */ fun walkingSpeed(walkingSpeed: Double?): Builder { @@ -71,7 +69,7 @@ data class WalkingOptionsNavigation( * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor * walkways, and 0 indicates no preference (the default). * - * @param walkwayBias bias to prefer or avoid walkways + * @property walkwayBias bias to prefer or avoid walkways * @return this builder */ fun walkwayBias(walkwayBias: Double?): Builder { @@ -84,7 +82,7 @@ data class WalkingOptionsNavigation( * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 * indicates preference to favor alleys, and 0 indicates no preference (the default). * - * @param alleyBias bias to prefer or avoid alleys + * @property alleyBias bias to prefer or avoid alleys * @return this builder */ fun alleyBias(alleyBias: Double?): Builder { From c5c012a5513a0fe6b8459321dcc452b5bb0c9994 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 11 Dec 2019 15:14:34 +0300 Subject: [PATCH 44/75] removed PointNavigation --- .../mapbox/navigation/base/route/model/PointNavigation.kt | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt deleted file mode 100644 index 8ff9868d998..00000000000 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/PointNavigation.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.mapbox.navigation.base.route.model - -data class PointNavigation( - val longitude: Double, - val latitude: Double -) From 144d8f621fe88fbf2cd288bf4cdf5c394f0ca179 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 11 Dec 2019 15:36:27 +0300 Subject: [PATCH 45/75] - JsonMapper: revert to Gson; - fix lint issues; - minor rename --- .../testapp/activity/MockNavigationActivity.java | 1 - .../navigation/v5/navigation/NavigationRoute.kt | 6 +++--- .../v5/navigation/NavigationRouteWaypoint.kt | 2 +- .../mapbox/navigation/base/metrics/MetricEvent.kt | 4 +++- .../com/mapbox/navigation/base/util/JsonMapper.kt | 13 ------------- .../navigation/metrics/MapboxMetricsReporter.kt | 1 - .../navigation/metrics/MapboxMetricsReporterTest.kt | 3 ++- 7 files changed, 9 insertions(+), 21 deletions(-) delete mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java index ec12200acaa..eb4df48bc47 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java @@ -48,7 +48,6 @@ import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions; import com.mapbox.services.android.navigation.v5.navigation.NavigationEventListener; -import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.RefreshCallback; import com.mapbox.services.android.navigation.v5.navigation.RefreshError; import com.mapbox.services.android.navigation.v5.navigation.RouteRefresh; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt index e70b8f36039..5f8e85345a6 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt @@ -765,17 +765,17 @@ internal constructor( private fun assembleWaypoints() { origin?.let { origin -> - directionsBuilder.origin(origin.waypoint) + directionsBuilder.origin(origin.point) directionsBuilder.addBearing(origin.bearingAngle, origin.tolerance) } for (waypoint in waypoints) { - directionsBuilder.addWaypoint(waypoint.waypoint) + directionsBuilder.addWaypoint(waypoint.point) directionsBuilder.addBearing(waypoint.bearingAngle, waypoint.tolerance) } destination?.let { destination -> - directionsBuilder.destination(destination.waypoint) + directionsBuilder.destination(destination.point) directionsBuilder.addBearing(destination.bearingAngle, destination.tolerance) } } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt index e94afbbb51c..c648dae2384 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteWaypoint.kt @@ -3,7 +3,7 @@ package com.mapbox.services.android.navigation.v5.navigation import com.mapbox.geojson.Point data class NavigationRouteWaypoint( - val waypoint: Point, + val point: Point, val bearingAngle: Double?, val tolerance: Double? ) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt index 3838ceb205a..58766b3d3fa 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt @@ -2,6 +2,8 @@ package com.mapbox.navigation.base.metrics import androidx.annotation.StringDef import com.google.gson.Gson +import com.mapbox.navigation.base.internal.metrics.DirectionsMetrics +import com.mapbox.navigation.base.internal.metrics.NavigationMetrics interface MetricEvent { @@ -20,7 +22,7 @@ interface MetricEvent { @Metric val metricName: String - fun toJson(jsonMapper: JsonMapper): String + fun toJson(gson: Gson): String } object NavigationMetrics { diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt deleted file mode 100644 index 8491db344b5..00000000000 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/util/JsonMapper.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.mapbox.navigation.base.util - -import com.google.gson.Gson - -interface JsonMapper { - fun toJson(obj: T): String - - object GsonImpl : JsonMapper { - private val gson by lazy { Gson() } - - override fun toJson(obj: T): String = gson.toJson(obj) - } -} diff --git a/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt b/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt index d6adde20b43..304c5fffadf 100644 --- a/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt +++ b/libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt @@ -6,7 +6,6 @@ import com.mapbox.android.telemetry.MapboxTelemetry import com.mapbox.navigation.base.metrics.MetricEvent import com.mapbox.navigation.base.metrics.MetricsObserver import com.mapbox.navigation.base.metrics.MetricsReporter -import com.mapbox.navigation.base.util.JsonMapper import com.mapbox.navigation.metrics.internal.utils.extensions.toTelemetryEvent import com.mapbox.navigation.utils.thread.WorkThreadHandler diff --git a/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt b/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt index dad1969b3f5..a258663f644 100644 --- a/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt +++ b/libnavigation-metrics/src/test/java/com/mapbox/navigation/metrics/MapboxMetricsReporterTest.kt @@ -1,6 +1,7 @@ package com.mapbox.navigation.metrics import android.os.Parcel +import com.google.gson.Gson import com.mapbox.android.telemetry.Event import com.mapbox.android.telemetry.MapboxTelemetry import com.mapbox.navigation.base.metrics.MetricEvent @@ -86,6 +87,6 @@ class MapboxMetricsReporterTest { override fun describeContents(): Int = 0 - override fun toJson(jsonMapper: JsonMapper): String = jsonMapper.toJson(this) + override fun toJson(gson: Gson): String = gson.toJson(this) } } From a8aede19f12cf88bdd26da954fe1697f54f1d831 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 12 Dec 2019 12:18:31 +0300 Subject: [PATCH 46/75] initial Activities test --- app/build.gradle | 7 ++++ app/src/main/AndroidManifest.xml | 32 +++++++++++++++++ .../navigation/testapp/MainActivity.java | 25 ++++++++++++++ .../activity/OnboardRouterActivityJava.java | 34 +++++++++++++++++++ .../activity/OnboardRouterActivityKt.kt | 5 +++ app/src/main/res/values/strings.xml | 18 ++++++++++ .../router/NavigationOffboardRoute.kt | 2 +- .../route/model/RouteOptionsNavigation.kt | 4 +-- 8 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java create mode 100644 app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt diff --git a/app/build.gradle b/app/build.gradle index 2542649f44d..86f9438266b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,6 +83,13 @@ android { } dependencies { + implementation project(':libnavigation-core') + implementation project(':libdirections-offboard') + implementation project(':libdirections-onboard') + implementation project(':libnavigation-util') + implementation project(':libtrip-service') + implementation project(':liblogger') + //ktlint ktlint dependenciesList.ktlint diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d56bbecf36b..b225f797a5e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,38 @@ android:value=".MainActivity"/> + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java index 1553d962805..c0c10196c44 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java @@ -65,6 +65,31 @@ protected void onCreate(Bundle savedInstanceState) { getString(R.string.description_mock_navigation), MockNavigationActivity.class ), + new SampleItem( + getString(R.string.title_offboard_router_kotlin), + getString(R.string.description_offboard_router_kotlin), + OffboardRouterActivityKt.class + ), + new SampleItem( + getString(R.string.title_offboard_router_java), + getString(R.string.description_offboard_router_java), + OffboardRouterActivityJava.class + ), + new SampleItem( + getString(R.string.title_trip_service_kotlin), + getString(R.string.description_trip_service_kotlin), + TripServiceActivityKt.class + ), + new SampleItem( + getString(R.string.title_onboard_router_kotlin), + getString(R.string.description_onboard_router_kotlin), + OnboardRouterActivityKt.class + ), + new SampleItem( + getString(R.string.title_onboard_router_java), + getString(R.string.description_onboard_router_java), + OnboardRouterActivityJava.class + ), new SampleItem( getString(R.string.title_reroute), getString(R.string.description_reroute), diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java new file mode 100644 index 00000000000..3495a39a437 --- /dev/null +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java @@ -0,0 +1,34 @@ +package com.mapbox.services.android.navigation.testapp.activity; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.navigation.base.route.Router; +import com.mapbox.navigation.route.onboard.MapboxOnboardRouter; +import com.mapbox.navigation.route.onboard.model.Config; + +public class OnboardRouterActivityJava extends AppCompatActivity { + + private Router offboardRouter; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setupRouter(); + } + + private void setupRouter() { + Config config = new Config( + this.getApplication().getExternalFilesDir(null).getPath(), + null, + null, + null, + null); + + offboardRouter = new MapboxOnboardRouter(Mapbox.getAccessToken(), config); + } +} diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt new file mode 100644 index 00000000000..414dc538eaa --- /dev/null +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt @@ -0,0 +1,5 @@ +package com.mapbox.services.android.navigation.testapp.activity + +import androidx.appcompat.app.AppCompatActivity + +class OnboardRouterActivityKt : AppCompatActivity() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 508e10b9215..c30e7c07c59 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,6 +4,24 @@ Mock Navigation Mock a navigation session using a mock location engine. + Offboard Router Kotlin + Shows routes using offboard routing api in Kotlin code. + + Offboard Router Java + Shows routes using offboard routing api in Java code. + + Onboard Router Kotlin + Shows routes using onboard routing api in Kotlin code. + + Onboard Router Java + Shows routes using onboard routing api in Java code. + + Trip Service Kotlin + Shows how to use the Service to push notifications in Kotlin code. + + Trip Service Java + Shows how to use the Service to push notifications in Java code. + Off route detection Uses the Route Utils class to determine if a users off route. diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt index c4afd4b77c3..e5a62f6577b 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt @@ -244,7 +244,7 @@ constructor( * @return this builder for chaining options together * @since 0.9.0 */ - internal fun routeOptions(options: RouteOptionsNavigation): Builder { + fun routeOptions(options: RouteOptionsNavigation): Builder { options.baseUrl?.let { directionsBuilder.baseUrl(it) } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index 360362a330b..dbe6b085476 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -188,9 +188,9 @@ class RouteOptionsNavigation( } private fun checkFields() { - check(!::_origin.isInitialized) { "Property origin hasn't been inited" } + check(::_origin.isInitialized) { "Property origin hasn't been inited" } - check(!::_destination.isInitialized) { "Property destination hasn't been inited" } + check(::_destination.isInitialized) { "Property destination hasn't been inited" } } } } From a671dfa88e80dea081a447f0eab0dceba5b7130f Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 12 Dec 2019 19:14:06 +0300 Subject: [PATCH 47/75] Direction API to Navigation models mappers --- .../navigation/v5/utils/extensions/Mappers.kt | 181 +++++++++++++++++- .../dto/BannerComponentsNavigationDto.kt | 4 +- .../base/route/dto/LegStepNavigationDto.kt | 4 +- .../route/model/BannerComponentsNavigation.kt | 4 +- .../route/model/RouteOptionsNavigation.kt | 3 + .../route/model/StepIntersectionNavigation.kt | 5 +- 6 files changed, 188 insertions(+), 13 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt index 5c56f5137c9..ffd335c910b 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt @@ -3,6 +3,33 @@ package com.mapbox.services.android.navigation.v5.utils.extensions import com.mapbox.api.directions.v5.WalkingOptions +import com.mapbox.api.directions.v5.models.BannerComponents +import com.mapbox.api.directions.v5.models.BannerInstructions +import com.mapbox.api.directions.v5.models.BannerText +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.api.directions.v5.models.IntersectionLanes +import com.mapbox.api.directions.v5.models.LegAnnotation +import com.mapbox.api.directions.v5.models.LegStep +import com.mapbox.api.directions.v5.models.MaxSpeed +import com.mapbox.api.directions.v5.models.RouteLeg +import com.mapbox.api.directions.v5.models.RouteOptions +import com.mapbox.api.directions.v5.models.StepIntersection +import com.mapbox.api.directions.v5.models.StepManeuver +import com.mapbox.api.directions.v5.models.VoiceInstructions +import com.mapbox.navigation.base.route.model.BannerComponentsNavigation +import com.mapbox.navigation.base.route.model.BannerInstructionsNavigation +import com.mapbox.navigation.base.route.model.BannerTextNavigation +import com.mapbox.navigation.base.route.model.IntersectionLanesNavigation +import com.mapbox.navigation.base.route.model.LegAnnotationNavigation +import com.mapbox.navigation.base.route.model.LegStepNavigation +import com.mapbox.navigation.base.route.model.MaxSpeedNavigation +import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.base.route.model.RouteLegNavigation +import com.mapbox.navigation.base.route.model.RouteOptionsNavigation +import com.mapbox.navigation.base.route.model.StepIntersectionNavigation +import com.mapbox.navigation.base.route.model.StepManeuverNavigation +import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation +import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation import com.mapbox.services.android.navigation.v5.navigation.WalkingOptionsNavigation fun WalkingOptionsNavigation.mapToWalkingOptions(): WalkingOptions = WalkingOptions @@ -13,16 +40,158 @@ fun WalkingOptionsNavigation.mapToWalkingOptions(): WalkingOptions = WalkingOpti .build() fun Route.mapToDirectionsRoute(): DirectionsRoute { - val duration = duration.toDouble() - val legs = legs?.let { it as List } - - return DirectionsRoute.builder() + return DirectionsRoute.builder() // FIXME route index .distance(distance) - .duration(duration) + .duration(duration.toDouble()) .geometry(geometry) .weight(weight) .weightName(weightName) .voiceLanguage(voiceLanguage) - .legs(legs) + .legs(legs?.map(RouteLegNavigation::mapToRouteLeg)) + .routeOptions(routeOptions?.mapToRouteOptions()) .build() } + +fun RouteOptionsNavigation.mapToRouteOptions() = + RouteOptions.builder() + .apply { + walkingOptions?.let { walkingOptions(it.mapToWalkingOptions()) } + accessToken?.let { accessToken(it) } + exclude?.let { exclude(it) } + requestUuid?.let { requestUuid(it) } + } + .profile(profile) + .user(user) + .baseUrl(baseUrl) + .alternatives(alternatives) + .annotations(annotations) + .approaches(approaches)!! + .bannerInstructions(bannerInstructions) + .bearings(bearings) + .continueStraight(continueStraight) + .coordinates(coordinates) + .geometries(geometries) + .approaches(approaches)!! + .language(language) + .overview(overview) + .radiuses(radiuses) + .roundaboutExits(roundaboutExits) + .steps(steps) + .alternatives(alternatives) + .voiceInstructions(voiceInstructions) + .voiceUnits(voiceUnits) + .waypointIndices(waypointIndices)!! + .waypointNames(waypointNames)!! + .waypointTargets(waypointTargets)!! + .build() + +fun RouteLegNavigation.mapToRouteLeg() = + RouteLeg.builder() + .annotation(annotation?.mapToLegAnnotation()) + .distance(distance) + .duration(duration) + .steps(steps?.map(LegStepNavigation::mapToLegStep)) + .summary(summary) + .build() + +fun LegAnnotationNavigation.mapToLegAnnotation() = + LegAnnotation.builder() + .congestion(congestion) + .distance(distance) + .duration(duration) + .maxspeed(maxspeed?.map(MaxSpeedNavigation::mapToMaxSpeed)) + .speed(speed) + .build() + +fun LegStepNavigation.mapToLegStep() = + LegStep.builder() + .bannerInstructions(bannerInstructions?.map(BannerInstructionsNavigation::mapToBannerInstruction) ?: emptyList()) + .destinations(destinations) + .distance(distance) + .drivingSide(drivingSide) + .duration(duration) + .exits(exits) + .geometry(geometry) + .intersections(intersections?.map(StepIntersectionNavigation::mapToStepIntersection) ?: emptyList()) + .maneuver(maneuver.mapToStepManeuver()) + .mode(mode) + .name(name) + .pronunciation(pronunciation) + .ref(ref) + .rotaryName(rotaryName) + .rotaryPronunciation(rotaryPronunciation) + .voiceInstructions(voiceInstructions?.map(VoiceInstructionsNavigation::mapToVoiceInstructions) ?: emptyList()) + .weight(weight) + .build() + +fun MaxSpeedNavigation.mapToMaxSpeed() = + MaxSpeed.builder() + .speed(speed) + .none(none) + .unit(unit) + .unknown(unknown) + .build() + +fun BannerInstructionsNavigation.mapToBannerInstruction() = + BannerInstructions.builder() + .distanceAlongGeometry(distanceAlongGeometry) + .primary(primary?.mapToBannerText() ?: BannerText.builder().build()) + .secondary(secondary?.mapToBannerText()) + .sub(sub?.mapToBannerText()) + .build() + +fun StepIntersectionNavigation.mapToStepIntersection() = + StepIntersection.builder() + .bearings(bearings) + .classes(classes) + .entry(entry) + .`in`(into) + .out(out) + .lanes(lanes?.map(IntersectionLanesNavigation::mapToIntersectionLanes)) + .rawLocation(rawLocation) + .build() + +fun StepManeuverNavigation.mapToStepManeuver() = + StepManeuver.builder() + .bearingAfter(bearingAfter) + .bearingBefore(bearingBefore) + .exit(exit) + .instruction(instruction) + .modifier(modifier) + .rawLocation(rawLocation) + .type(type) + .build() + +fun VoiceInstructionsNavigation.mapToVoiceInstructions() = + VoiceInstructions.builder() + .announcement(announcement) + .distanceAlongGeometry(distanceAlongGeometry) + .ssmlAnnouncement(ssmlAnnouncement) + .build() + +fun BannerTextNavigation.mapToBannerText() = + BannerText.builder() + .text(text ?: "")!! + .components(components?.map(BannerComponentsNavigation::mapToBannerComponents))!! + .degrees(degrees) + .drivingSide(drivingSide) + .modifier(modifier) + .type(type) + .build() + +fun IntersectionLanesNavigation.mapToIntersectionLanes() = + IntersectionLanes.builder() + .indications(indications) + .valid(valid) + .build() + +fun BannerComponentsNavigation.mapToBannerComponents() = + BannerComponents.builder() + .abbreviation(abbreviation) + .abbreviationPriority(abbreviationPriority) + .active(active) + .directions(directions) + .imageBaseUrl(imageBaseUrl) + .text(text) + .type(type) + .build() diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt index e29a29fad05..df664fbc070 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt @@ -4,8 +4,8 @@ import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.model.BannerComponentsNavigation class BannerComponentsNavigationDto( - val text: String?, - val type: String?, + val text: String, + val type: String, @SerializedName("abbr") val abbreviation: String?, @SerializedName("abbr_priority") diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt index ff38b856cdb..32b97bf3060 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt @@ -11,13 +11,13 @@ internal class LegStepNavigationDto( val name: String?, val ref: String?, val destinations: String?, - val mode: String?, + val mode: String, val pronunciation: String?, @SerializedName("rotary_name") val rotaryName: String?, @SerializedName("rotary_pronunciation") val rotaryPronunciation: String?, - val maneuver: StepManeuverNavigation?, + val maneuver: StepManeuverNavigation, val voiceInstructions: List?, val bannerInstructions: List?, @SerializedName("driving_side") diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt index 1048b5b89f8..8ef1049c92f 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerComponentsNavigation.kt @@ -52,8 +52,8 @@ package com.mapbox.navigation.base.route.model * @since 1.0 */ data class BannerComponentsNavigation( - val text: String?, - val type: String?, + val text: String, + val type: String, val abbreviation: String?, val abbreviationPriority: Int?, val imageBaseUrl: String?, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index dbe6b085476..8ed6b7cceee 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -40,6 +40,9 @@ class RouteOptionsNavigation( } } + val coordinates: List + get() = listOf(origin.point) + waypoints.map { it.point } + destination.point + class Builder internal constructor() { private lateinit var _origin: RoutePointNavigation private lateinit var _destination: RoutePointNavigation diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt index 9cf1eb9d9c6..b3aa567768b 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/StepIntersectionNavigation.kt @@ -63,4 +63,7 @@ class StepIntersectionNavigation( val into: Int?, val out: Int?, val lanes: List? -) +) { + val rawLocation: DoubleArray + get() = doubleArrayOf(location.longitude(), location.latitude()) +} From 6ab3e4d14356adc5027f7af2c999f23c5728cd72 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 13 Dec 2019 13:04:34 +0300 Subject: [PATCH 48/75] fix lint --- .../activity/OnboardRouterActivityJava.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java index 3495a39a437..9d0fb5b63d1 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java @@ -12,23 +12,23 @@ public class OnboardRouterActivityJava extends AppCompatActivity { - private Router offboardRouter; + private Router offboardRouter; - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); - setupRouter(); - } + setupRouter(); + } - private void setupRouter() { - Config config = new Config( - this.getApplication().getExternalFilesDir(null).getPath(), - null, - null, - null, - null); + private void setupRouter() { + Config config = new Config( + this.getApplication().getExternalFilesDir(null).getPath(), + null, + null, + null, + null); - offboardRouter = new MapboxOnboardRouter(Mapbox.getAccessToken(), config); - } + offboardRouter = new MapboxOnboardRouter(Mapbox.getAccessToken(), config); + } } From 55aa6b10e40e076b77ea0644d5145a53ddf22fa6 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 13 Dec 2019 17:06:29 +0300 Subject: [PATCH 49/75] fix pr issues --- .../router/NavigationRouteEventListener.kt | 2 +- .../router/NavigationWalkingOptions.kt | 76 ------------------- .../router/NavigationWalkingOptionsTest.kt | 28 ------- .../route/onboard/MapboxOnboardRouter.kt | 5 +- .../onboard/OnOfflineRouteFoundCallback.kt | 2 +- .../task/OfflineRouteRetrievalTaskTest.kt | 73 ++++++++++++++++++ .../mapbox/navigation/base/route/RouteUrl.kt | 12 +-- .../route/model/RouteOptionsNavigation.kt | 4 +- .../model/WalkingOptionsNavigationTest.kt | 28 +++++++ .../navigator/MapboxNativeNavigator.kt | 2 +- .../navigator/MapboxNativeNavigatorImpl.kt | 2 +- 11 files changed, 115 insertions(+), 119 deletions(-) delete mode 100644 libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt delete mode 100644 libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt create mode 100644 libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt create mode 100644 libnavigation-base/src/test/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigationTest.kt diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt index 3f55a1ff97a..b4b061fce9c 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteEventListener.kt @@ -4,7 +4,7 @@ import com.mapbox.navigation.utils.time.ElapsedTime import okhttp3.Call import okhttp3.EventListener -class NavigationRouteEventListener +internal class NavigationRouteEventListener @JvmOverloads constructor( val time: ElapsedTime = ElapsedTime() diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt deleted file mode 100644 index a139fc79b6d..00000000000 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptions.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.mapbox.navigation.route.offboard.router - -import com.mapbox.api.directions.v5.WalkingOptions - -/** - * Class for specifying options for use with the walking profile. - */ -class NavigationWalkingOptions internal constructor(val walkingOptions: WalkingOptions) { - - companion object { - /** - * Build a new [WalkingOptions] object with no defaults. - * - * @return a [Builder] object for creating a [NavigationWalkingOptions] object - */ - @JvmStatic - fun builder(): Builder { - return Builder( - WalkingOptions.builder() - ) - } - } - - /** - * This builder is used to create a new object with specifications relating to walking directions. - */ - class Builder internal constructor(private val builder: WalkingOptions.Builder) { - - /** - * Builds a [NavigationWalkingOptions] object with the specified configurations. - * - * @return a NavigationWalkingOptions object - */ - fun build(): NavigationWalkingOptions = - NavigationWalkingOptions(builder.build()) - - /** - * Walking speed in meters per second. Must be between 0.14 and 6.94 meters per second. - * Defaults to 1.42 meters per second - * - * @param walkingSpeed in meters per second - * @return this builder - */ - fun walkingSpeed(walkingSpeed: Double?): Builder { - builder.walkingSpeed(walkingSpeed) - return this - } - - /** - * A bias which determines whether the route should prefer or avoid the use of roads or paths - * that are set aside for pedestrian-only use (walkways). The allowed range of values is from - * -1 to 1, where -1 indicates preference to avoid walkways, 1 indicates preference to favor - * walkways, and 0 indicates no preference (the default). - * - * @param walkwayBias bias to prefer or avoid walkways - * @return this builder - */ - fun walkwayBias(walkwayBias: Double?): Builder { - builder.walkwayBias(walkwayBias) - return this - } - - /** - * A bias which determines whether the route should prefer or avoid the use of alleys. The - * allowed range of values is from -1 to 1, where -1 indicates preference to avoid alleys, 1 - * indicates preference to favor alleys, and 0 indicates no preference (the default). - * - * @param alleyBias bias to prefer or avoid alleys - * @return this builder - */ - fun alleyBias(alleyBias: Double?): Builder { - builder.alleyBias(alleyBias) - return this - } - } -} diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt deleted file mode 100644 index 2dbaf0008c7..00000000000 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationWalkingOptionsTest.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.mapbox.navigation.route.common - -import org.junit.Assert.assertEquals -import org.junit.Test - -class NavigationWalkingOptionsTest { - - @Test - fun alleyBias_walkingOptionSet() { - val options = com.mapbox.navigation.route.offboard.router.NavigationWalkingOptions.builder().alleyBias(0.7).build() - - assertEquals(java.lang.Double.valueOf(0.7), options.walkingOptions.alleyBias()) - } - - @Test - fun walkwayBias_walkingOptionSet() { - val options = com.mapbox.navigation.route.offboard.router.NavigationWalkingOptions.builder().walkwayBias(0.8).build() - - assertEquals(java.lang.Double.valueOf(0.8), options.walkingOptions.walkwayBias()) - } - - @Test - fun walkingSpeed_walkingOptionSet() { - val options = com.mapbox.navigation.route.offboard.router.NavigationWalkingOptions.builder().walkingSpeed(2.0).build() - - assertEquals(java.lang.Double.valueOf(2.0), options.walkingOptions.walkingSpeed()) - } -} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index a77d4e564a5..34b541c6fc4 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -42,7 +42,7 @@ class MapboxOnboardRouter : Router { this.navigatorNative = MapboxNativeNavigatorImpl this.accessToken = accessToken this.config = config - MapboxNativeNavigatorImpl.configureRoute(config.mapToRouteConfig()) + MapboxNativeNavigatorImpl.configureRouter(config.mapToRouteConfig()) } // Package private for testing purposes @@ -80,8 +80,7 @@ class MapboxOnboardRouter : Router { override fun onError(error: OfflineError) { callback.onFailure(NavigationException(error.message)) } - }) - .execute(offlineRouter.buildUrl()) + }).execute(offlineRouter.buildUrl()) } override fun cancel() = Unit diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt index d7d2e7a9a61..4cab47e8f76 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OnOfflineRouteFoundCallback.kt @@ -6,7 +6,7 @@ import com.mapbox.navigation.route.onboard.model.OfflineError /** * Callback used for finding offline routes. */ -interface OnOfflineRouteFoundCallback { +internal interface OnOfflineRouteFoundCallback { /** * Called when an offline routes are found. diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt new file mode 100644 index 00000000000..b1ade82597c --- /dev/null +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt @@ -0,0 +1,73 @@ +package com.mapbox.navigation.route.onboard.task + +import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.navigator.MapboxNativeNavigator +import com.mapbox.navigation.route.onboard.OnOfflineRouteFoundCallback +import com.mapbox.navigation.route.onboard.model.OfflineError +import com.mapbox.navigator.RouterResult +import io.mockk.every +import io.mockk.mockk +import io.mockk.slot +import io.mockk.verify +import org.junit.Assert.assertEquals +import org.junit.Test + +class OfflineRouteRetrievalTaskTest { + + @Test + fun checksOnErrorIsCalledIfRouteIsNotFetched() { + val mockedNavigator = mockk() + val mockedCallback = mockk(relaxed = true) + val mockedResult = mockk() + every { mockedResult.json } returns "{\"status\": \"Bad Request\", \"status_code\": 400, \"error\": \"No suitable edges near location\", \"error_code\": 171}" + val theOfflineRouteRetrievalTask = OfflineRouteRetrievalTask( + mockedNavigator, + mockedCallback, + mockedResult + ) + val nullRoute = null + + theOfflineRouteRetrievalTask.onPostExecute(nullRoute) + + verify { mockedCallback.onError(any()) } + } + + @Test + fun checksErrorMessageIsWellFormedIfRouteIsNotFetched() { + val mockedNavigator = mockk() + val mockedCallback = mockk(relaxed = true) + val slot = slot() + every { mockedCallback.onError(capture(slot)) } answers {} + val mockedResult = mockk() + every { mockedResult.json } returns "{\"status\": \"Bad Request\", \"status_code\": 400, \"error\": \"No suitable edges near location\", \"error_code\": 171}" + val theOfflineRouteRetrievalTask = OfflineRouteRetrievalTask( + mockedNavigator, + mockedCallback, + mockedResult + ) + val nullRoute = null + + theOfflineRouteRetrievalTask.onPostExecute(nullRoute) + + verify { mockedCallback.onError(eq(slot.captured)) } + assertEquals( + "Error occurred fetching offline route: No suitable edges near location - Code: 171", + slot.captured.message + ) + } + + @Test + fun checksOnRouteFoundIsCalledIfRouteIsFetched() { + val mockedNavigator = mockk() + val mockedCallback = mockk(relaxed = true) + val theOfflineRouteRetrievalTask = OfflineRouteRetrievalTask( + mockedNavigator, + mockedCallback + ) + val routes = mockk>() + + theOfflineRouteRetrievalTask.onPostExecute(routes) + + verify { mockedCallback.onRouteFound(eq(routes)) } + } +} diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt index a0622a9f61e..964d02c98dd 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt @@ -22,6 +22,9 @@ class RouteUrl( companion object { const val BASE_URL = "https://api.mapbox.com" + const val BASE_URL_P0 = "directions" + const val BASE_URL_P1 = "v5" + private const val QUERY_PARAM_ACCESS_TOKEN = "access_token" private const val QUERY_PARAM_STEPS = "steps" private const val QUERY_PARAM_GEOMERTY = "geometries" @@ -109,8 +112,8 @@ class RouteUrl( fun getRequest(): Uri = Uri.Builder() .authority(BASE_URL) - .appendPath("directions") - .appendPath("v5") + .appendPath(BASE_URL_P0) + .appendPath(BASE_URL_P1) .appendPath(user) .appendPath(profile) .appendPath(retrieveCoordinates()) @@ -125,10 +128,7 @@ class RouteUrl( .build() private fun retrieveCoordinates(): String { - val route: List = mutableListOf(orgin).also { mList -> - waypoints?.let { mList.addAll(it) } - mList.add(destination) - } + val route: List = listOf(orgin) + (waypoints ?: emptyList()) + destination return route.joinToString(separator = ";") { "${it.longitude()},${it.latitude()}" } } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index 8ed6b7cceee..8d26e6634dd 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -191,9 +191,9 @@ class RouteOptionsNavigation( } private fun checkFields() { - check(::_origin.isInitialized) { "Property origin hasn't been inited" } + check(::_origin.isInitialized) { "Property origin hasn't been initialized" } - check(::_destination.isInitialized) { "Property destination hasn't been inited" } + check(::_destination.isInitialized) { "Property destination hasn't been initialized" } } } } diff --git a/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigationTest.kt b/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigationTest.kt new file mode 100644 index 00000000000..ceb0c464430 --- /dev/null +++ b/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/model/WalkingOptionsNavigationTest.kt @@ -0,0 +1,28 @@ +package com.mapbox.navigation.base.route.model + +import org.junit.Assert.assertEquals +import org.junit.Test + +class WalkingOptionsNavigationTest { + + @Test + fun alleyBias_walkingOptionSet() { + val options = WalkingOptionsNavigation.builder().alleyBias(0.7).build() + + assertEquals(0.7, options.alleyBias) + } + + @Test + fun walkwayBias_walkingOptionSet() { + val options = WalkingOptionsNavigation.builder().walkwayBias(0.8).build() + + assertEquals(0.8, options.walkwayBias) + } + + @Test + fun walkingSpeed_walkingOptionSet() { + val options = WalkingOptionsNavigation.builder().walkingSpeed(2.0).build() + + assertEquals(2.0, options.walkingSpeed) + } +} diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index b6f4a0c468b..bf0341e5c71 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -8,7 +8,7 @@ import java.util.Date interface MapboxNativeNavigator { - fun configureRoute(routerConfig: RouterConfig) + fun configureRouter(routerConfig: RouterConfig) fun getRoute(url: String): RouterResult fun updateLocation(rawLocation: Location) fun getStatus(date: Date): TripStatus diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index cee7052d55a..e77783c8d74 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -20,7 +20,7 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { private val navigator: Navigator = Navigator() - override fun configureRoute(routerConfig: RouterConfig) { + override fun configureRouter(routerConfig: RouterConfig) { navigator.configureRouter( routerConfig.tilePath, routerConfig.inMemoryTileCache, From ca2b6719b33c28e90ef021d2f9a62c50feb9cd8d Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 17 Dec 2019 15:16:24 +0300 Subject: [PATCH 50/75] Dto classes: make public; introduces RouteResponse/Dto --- .../base/route/dto/BannerComponentsNavigationDto.kt | 2 +- .../base/route/dto/BannerInstructionsNavigationDto.kt | 4 ++-- .../navigation/base/route/dto/BannerTextNavigationDto.kt | 4 ++-- .../base/route/dto/LegAnnotationNavigationDto.kt | 4 ++-- .../navigation/base/route/dto/LegStepNavigationDto.kt | 4 ++-- .../navigation/base/route/dto/MaxSpeedNavigationDto.kt | 4 ++-- .../com/mapbox/navigation/base/route/dto/RouteDto.kt | 6 +++--- .../navigation/base/route/dto/RouteLegNavigationDto.kt | 4 ++-- .../base/route/dto/RouteOptionsNavigationDto.kt | 4 ++-- .../mapbox/navigation/base/route/dto/RouteResponseDto.kt | 9 +++++++++ .../base/route/dto/StepIntersectionNavigationDto.kt | 4 ++-- .../base/route/dto/StepManeuverNavigationDto.kt | 4 ++-- .../base/route/dto/VoiceInstructionsNavigationDto.kt | 4 ++-- .../base/route/dto/WalkingOptionsNavigationDto.kt | 4 ++-- .../mapbox/navigation/base/route/model/RouteResponse.kt | 4 ++++ 15 files changed, 39 insertions(+), 26 deletions(-) create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt create mode 100644 libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt index df664fbc070..c413429ff2b 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerComponentsNavigationDto.kt @@ -16,7 +16,7 @@ class BannerComponentsNavigationDto( val active: Boolean? ) -internal fun BannerComponentsNavigationDto.mapToModel() = BannerComponentsNavigation( +fun BannerComponentsNavigationDto.mapToModel() = BannerComponentsNavigation( text = text, type = type, abbreviation = abbreviation, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt index 61277dae8e5..edf9f5d354f 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerInstructionsNavigationDto.kt @@ -2,14 +2,14 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.BannerInstructionsNavigation -internal class BannerInstructionsNavigationDto( +class BannerInstructionsNavigationDto( val distanceAlongGeometry: Double, val primary: BannerTextNavigationDto?, val secondary: BannerTextNavigationDto?, val sub: BannerTextNavigationDto? ) -internal fun BannerInstructionsNavigationDto.mapToModel() = BannerInstructionsNavigation( +fun BannerInstructionsNavigationDto.mapToModel() = BannerInstructionsNavigation( distanceAlongGeometry = distanceAlongGeometry, primary = primary?.mapToModel(), secondary = secondary?.mapToModel(), diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt index d2d870b7355..bee4687302a 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt @@ -3,7 +3,7 @@ package com.mapbox.navigation.base.route.dto import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.model.BannerTextNavigation -internal class BannerTextNavigationDto( +class BannerTextNavigationDto( val text: String?, val components: List?, val type: String?, @@ -13,7 +13,7 @@ internal class BannerTextNavigationDto( val drivingSide: String? ) -internal fun BannerTextNavigationDto.mapToModel() = BannerTextNavigation( + fun BannerTextNavigationDto.mapToModel() = BannerTextNavigation( text = text, components = components?.map { it.mapToModel() }, type = type, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt index 8e4426beee5..91031f684ca 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt @@ -2,7 +2,7 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.LegAnnotationNavigation -internal class LegAnnotationNavigationDto( + class LegAnnotationNavigationDto( val distance: List?, val duration: List?, val speed: List?, @@ -10,7 +10,7 @@ internal class LegAnnotationNavigationDto( val congestion: List? ) -internal fun LegAnnotationNavigationDto.mapToModel() = LegAnnotationNavigation( + fun LegAnnotationNavigationDto.mapToModel() = LegAnnotationNavigation( distance = distance, duration = duration, speed = speed, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt index 32b97bf3060..f126e11b87e 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.model.LegStepNavigation import com.mapbox.navigation.base.route.model.StepManeuverNavigation -internal class LegStepNavigationDto( + class LegStepNavigationDto( val distance: Double, val duration: Double, val geometry: String?, @@ -27,7 +27,7 @@ internal class LegStepNavigationDto( val exits: String? ) -internal fun LegStepNavigationDto.mapToModel() = LegStepNavigation( + fun LegStepNavigationDto.mapToModel() = LegStepNavigation( distance = distance, duration = duration, geometry = geometry, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt index 5107a7ce625..78aa10812be 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/MaxSpeedNavigationDto.kt @@ -2,14 +2,14 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.MaxSpeedNavigation -internal class MaxSpeedNavigationDto( +class MaxSpeedNavigationDto( val speed: Int?, val unit: String?, val unknown: Boolean?, val none: Boolean? ) -internal fun MaxSpeedNavigationDto.mapToModel() = MaxSpeedNavigation( +fun MaxSpeedNavigationDto.mapToModel() = MaxSpeedNavigation( speed = speed, unit = unit, unknown = unknown, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt index e21e54a4e75..25c86a05ad1 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteDto.kt @@ -2,7 +2,7 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.Route -internal class RouteDto( +class RouteDto( val routeIndex: String?, val distance: Double, val duration: Long, @@ -14,14 +14,14 @@ internal class RouteDto( val voiceLanguage: String? ) -internal fun RouteDto.mapToModelRoute() = Route( +fun RouteDto.mapToModelRoute() = Route( routeIndex = routeIndex, distance = distance, duration = duration, geometry = geometry, weight = weight, weightName = weightName, - legs = legs?.map { it.mapToModelRouteLeg() }, + legs = legs?.map { it.mapToRouteLegNavigation() }, routeOptions = routeOptions?.mapToModel(), voiceLanguage = voiceLanguage ) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt index 8103fcdd88b..8d877948588 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt @@ -2,7 +2,7 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.RouteLegNavigation -internal class RouteLegNavigationDto( +class RouteLegNavigationDto( val distance: Double?, val duration: Double?, val summary: String?, @@ -10,7 +10,7 @@ internal class RouteLegNavigationDto( val annotation: LegAnnotationNavigationDto? ) -internal fun RouteLegNavigationDto.mapToModelRouteLeg() = RouteLegNavigation( +fun RouteLegNavigationDto.mapToRouteLegNavigation(): RouteLegNavigation = RouteLegNavigation( distance = distance, duration = duration, summary = summary, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt index dc64324bf19..e0f17d95a69 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.model.RouteOptionsNavigation -internal data class RouteOptionsNavigationDto( + data class RouteOptionsNavigationDto( val baseUrl: String?, val user: String?, val profile: String?, @@ -32,7 +32,7 @@ internal data class RouteOptionsNavigationDto( val walkingOptions: WalkingOptionsNavigationDto? ) -internal fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( + fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( baseUrl = baseUrl ?: RouteUrl.BASE_URL, user = user ?: RouteUrl.PROFILE_DEFAULT_USER, profile = profile ?: RouteUrl.PROFILE_DRIVING, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt new file mode 100644 index 00000000000..9b1d687e776 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt @@ -0,0 +1,9 @@ +package com.mapbox.navigation.base.route.dto + +import com.mapbox.navigation.base.route.model.RouteResponse + +class RouteResponseDto(val routes: List?) + +fun RouteResponseDto.mapToModel() = RouteResponse( + routes?.map(RouteDto::mapToModelRoute) +) \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt index 4c1d2ebad64..0f20b2b7316 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.StepIntersectionNavigation -internal class StepIntersectionNavigationDto( + class StepIntersectionNavigationDto( @SerializedName("location") val rawLocation: DoubleArray, val bearings: List?, @@ -15,7 +15,7 @@ internal class StepIntersectionNavigationDto( val lanes: List? ) -internal fun StepIntersectionNavigationDto.mapToModel() = StepIntersectionNavigation( + fun StepIntersectionNavigationDto.mapToModel() = StepIntersectionNavigation( location = Point.fromLngLat(rawLocation[0], rawLocation[1]), bearings = bearings, classes = classes, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt index efb0b2089de..c8cb02d712e 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.StepManeuverNavigation -internal class StepManeuverNavigationDto( + class StepManeuverNavigationDto( @SerializedName("location") val rawLocation: DoubleArray, @SerializedName("bearing_before") @@ -18,7 +18,7 @@ internal class StepManeuverNavigationDto( val exit: Int? ) -internal fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation( + fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation( location = Point.fromLngLat(rawLocation[0], rawLocation[1]), bearingBefore = bearingBefore, bearingAfter = bearingAfter, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt index b1f8271b9cc..cefdd584e60 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt @@ -2,13 +2,13 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation -internal class VoiceInstructionsNavigationDto( + class VoiceInstructionsNavigationDto( val distanceAlongGeometry: Double?, val announcement: String?, val ssmlAnnouncement: String? ) -internal fun VoiceInstructionsNavigationDto.mapToModel() = VoiceInstructionsNavigation( + fun VoiceInstructionsNavigationDto.mapToModel() = VoiceInstructionsNavigation( distanceAlongGeometry = distanceAlongGeometry, announcement = announcement, ssmlAnnouncement = ssmlAnnouncement diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt index 4a340ef0850..da0561f2dc6 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt @@ -18,13 +18,13 @@ import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation * allowed range of values is from -1 to 1, where -1 indicates indicates preference to avoid * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). */ -internal class WalkingOptionsNavigationDto( + class WalkingOptionsNavigationDto( @SerializedName("walking_speed") val walkingSpeed: Double?, @SerializedName("walkway_bias") val walkwayBias: Double?, @SerializedName("alley_bias") val alleyBias: Double? ) -internal fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( + fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( walkingSpeed = walkingSpeed, walkwayBias = walkwayBias, alleyBias = alleyBias diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt new file mode 100644 index 00000000000..dafc84e1751 --- /dev/null +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt @@ -0,0 +1,4 @@ +package com.mapbox.navigation.base.route.model + +class RouteResponse(val routes: List?) { +} \ No newline at end of file From 2188dfd65a18cefdac6341b9ad9f2d5d79678599 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 17 Dec 2019 15:20:43 +0300 Subject: [PATCH 51/75] RouteUrl: minor fixes; OfflineRouteRetrievalTask: retrive `RouteResponseDto` instread `List` --- .../route/onboard/task/OfflineRouteRetrievalTask.kt | 6 +++--- .../main/java/com/mapbox/navigation/base/route/RouteUrl.kt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt index 19d3bb1eb88..7b4a12327c2 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -2,7 +2,8 @@ package com.mapbox.navigation.route.onboard.task import android.os.AsyncTask import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.mapbox.navigation.base.route.dto.RouteResponseDto +import com.mapbox.navigation.base.route.dto.mapToModel import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.logger.MapboxLogger import com.mapbox.navigation.navigator.MapboxNativeNavigator @@ -38,8 +39,7 @@ internal class OfflineRouteRetrievalTask( routerResult = navigator.getRoute(url) } - val routesType = object : TypeToken>() {}.type - return gson.fromJson(routerResult.json, routesType) + return gson.fromJson(routerResult.json, RouteResponseDto::class.java)?.mapToModel()?.routes } public override fun onPostExecute(offlineRoute: List?) { diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt index 964d02c98dd..0a9c6ae223e 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt @@ -110,8 +110,8 @@ class RouteUrl( } fun getRequest(): Uri = - Uri.Builder() - .authority(BASE_URL) + Uri.parse(BASE_URL) + .buildUpon() .appendPath(BASE_URL_P0) .appendPath(BASE_URL_P1) .appendPath(user) From 5c0eb8dc46e4cc0b57b31906e44825135a200951 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 18 Dec 2019 15:09:16 +0300 Subject: [PATCH 52/75] - Onboard router: sample Activity Java + Kotlin; - make Dto classes public; - fix tests; - minor fixes/refactored. --- .../activity/OnboardRouterActivityJava.java | 217 +++++++++++++++++- .../activity/OnboardRouterActivityKt.kt | 209 ++++++++++++++++- .../route/onboard/MapboxOnboardRouter.kt | 12 +- .../MapboxOnboardRouterGenerationTest.kt | 3 +- .../route/dto/LegAnnotationNavigationDto.kt | 12 +- .../base/route/dto/LegStepNavigationDto.kt | 45 ++-- .../route/dto/RouteOptionsNavigationDto.kt | 41 ++-- .../base/route/dto/RouteResponseDto.kt | 2 +- .../dto/StepIntersectionNavigationDto.kt | 4 +- .../route/dto/StepManeuverNavigationDto.kt | 4 +- .../dto/VoiceInstructionsNavigationDto.kt | 4 +- .../route/dto/WalkingOptionsNavigationDto.kt | 4 +- .../route/model/RouteOptionsNavigation.kt | 31 +-- .../base/route/model/RouteResponse.kt | 3 +- 14 files changed, 507 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java index 9d0fb5b63d1..a86e095406b 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java @@ -1,34 +1,241 @@ package com.mapbox.services.android.navigation.testapp.activity; import android.os.Bundle; +import android.os.Environment; +import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import com.mapbox.mapboxsdk.Mapbox; +import com.google.android.material.snackbar.Snackbar; +import com.mapbox.api.directions.v5.models.DirectionsRoute; +import com.mapbox.geojson.Point; +import com.mapbox.mapboxsdk.annotations.MarkerOptions; +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.maps.Style; +import com.mapbox.navigation.base.route.DirectionsSession; import com.mapbox.navigation.base.route.Router; +import com.mapbox.navigation.base.route.model.Route; +import com.mapbox.navigation.base.route.model.RouteOptionsNavigation; +import com.mapbox.navigation.directions.session.MapboxDirectionsSession; import com.mapbox.navigation.route.onboard.MapboxOnboardRouter; import com.mapbox.navigation.route.onboard.model.Config; +import com.mapbox.services.android.navigation.testapp.R; +import com.mapbox.services.android.navigation.testapp.utils.Utils; +import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; +import com.mapbox.services.android.navigation.v5.utils.extensions.Mappers; +import com.mapbox.turf.TurfConstants; +import com.mapbox.turf.TurfMeasurement; -public class OnboardRouterActivityJava extends AppCompatActivity { +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; +import timber.log.Timber; + +public class OnboardRouterActivityJava + extends AppCompatActivity + implements OnMapReadyCallback, + MapboxMap.OnMapClickListener, + DirectionsSession.RouteObserver { private Router offboardRouter; + private MapboxMap mapboxMap; + + private DirectionsRoute route; + private NavigationMapRoute navigationMapRoute; + private DirectionsSession directionsSession; + private Point origin; + private Point destination; + private Point waypoint; + + @BindView(R.id.mapView) + MapView mapView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mock_navigation); + ButterKnife.bind(this); setupRouter(); + + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(this); } private void setupRouter() { + File file = new File(Environment.getExternalStoragePublicDirectory("Offline").getAbsolutePath(), "2019_04_13-00_00_11"); + File fileTiles = new File(file, "tiles"); Config config = new Config( - this.getApplication().getExternalFilesDir(null).getPath(), + fileTiles.getAbsolutePath(), null, null, null, - null); + null // working with pre-fetched tiles only + ); + + offboardRouter = new MapboxOnboardRouter(config); + } + + + @OnClick(R.id.newLocationFab) + public void onNewLocationClick() { + newOrigin(); + } + + private void newOrigin() { + if (mapboxMap != null) { + clearMap(); + LatLng latLng = new LatLng(47.05991, 9.49183); + origin = Point.fromLngLat(latLng.getLongitude(), latLng.getLatitude()); + mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12)); + } + } + + @Override + public void onMapReady(@NonNull MapboxMap mapboxMap) { + this.mapboxMap = mapboxMap; + this.mapboxMap.addOnMapClickListener(this); + mapboxMap.setStyle(Style.MAPBOX_STREETS, style -> { + navigationMapRoute = new NavigationMapRoute(mapView, mapboxMap); + Snackbar.make(findViewById(R.id.container), "Tap map to place waypoint", Snackbar.LENGTH_LONG).show(); + newOrigin(); + }); + } + + private void clearMap() { + if (mapboxMap != null) { + mapboxMap.clear(); + route = null; + destination = null; + waypoint = null; + navigationMapRoute.updateRouteVisibilityTo(false); + navigationMapRoute.updateRouteArrowVisibilityTo(false); + } + } + + private void findRoute() { + directionsSession = new MapboxDirectionsSession( + offboardRouter, + this + ); + if (origin != null && destination != null) { + if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { + List waypoints = new ArrayList<>(); + if (waypoint != null) { + waypoints.add(waypoint); + } + RouteOptionsNavigation.Builder optionsBuilder = new RouteOptionsNavigation.Builder() + .accessToken(Utils.getMapboxAccessToken(this)) + .origin(origin) + .destination(destination); + + for (Point waypointPoint : waypoints) { + optionsBuilder.addWaypoint(waypointPoint); + } + directionsSession.requestRoutes(optionsBuilder.build()); + } + } + } + + @Override + public boolean onMapClick(@NonNull LatLng point) { + if (destination == null) { + destination = Point.fromLngLat(point.getLongitude(), point.getLatitude()); + mapboxMap.addMarker(new MarkerOptions().position(point)); + findRoute(); + } else if (waypoint == null) { + waypoint = Point.fromLngLat(point.getLongitude(), point.getLatitude()); + mapboxMap.addMarker(new MarkerOptions().position(point)); + findRoute(); + } else { + Toast.makeText(this, "Only 2 waypoints supported for this example", Toast.LENGTH_LONG).show(); + clearMap(); + } + return false; + } + + /* + * DirectionSessions.RouteObserver + */ + @Override + public void onRoutesChanged(@NotNull List routes) { + if (!routes.isEmpty()) { + route = Mappers.mapToDirectionsRoute(routes.get(0)); + navigationMapRoute.addRoute(route); + } + } - offboardRouter = new MapboxOnboardRouter(Mapbox.getAccessToken(), config); + @Override + public void onRoutesRequested() { + Timber.d("onRoutesRequested: navigation.getRoute()"); + } + + @Override + public void onRoutesRequestFailure(@NotNull Throwable throwable) { + Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()"); + } + + /* + * Activity lifecycle methods + */ + + @Override + public void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (directionsSession != null) { + directionsSession.cancel(); + } + if (mapboxMap != null) { + mapboxMap.removeOnMapClickListener(this); + mapView.onDestroy(); + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); } } diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt index 414dc538eaa..38bd0dd1335 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt @@ -1,5 +1,212 @@ package com.mapbox.services.android.navigation.testapp.activity +import android.os.Bundle +import android.os.Environment +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import com.google.android.material.snackbar.Snackbar +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.geojson.Point +import com.mapbox.mapboxsdk.annotations.MarkerOptions +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory +import com.mapbox.mapboxsdk.geometry.LatLng +import com.mapbox.mapboxsdk.maps.MapboxMap +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback +import com.mapbox.mapboxsdk.maps.Style +import com.mapbox.navigation.base.route.DirectionsSession +import com.mapbox.navigation.base.route.Router +import com.mapbox.navigation.base.route.model.Route +import com.mapbox.navigation.base.route.model.RouteOptionsNavigation +import com.mapbox.navigation.directions.session.MapboxDirectionsSession +import com.mapbox.navigation.route.onboard.MapboxOnboardRouter +import com.mapbox.navigation.route.onboard.model.Config +import com.mapbox.navigation.utils.extensions.ifNonNull +import com.mapbox.services.android.navigation.testapp.R +import com.mapbox.services.android.navigation.testapp.utils.Utils +import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute +import com.mapbox.services.android.navigation.v5.utils.extensions.mapToDirectionsRoute +import com.mapbox.turf.TurfConstants +import com.mapbox.turf.TurfMeasurement +import java.io.File +import java.util.ArrayList +import kotlinx.android.synthetic.main.activity_mock_navigation.* +import timber.log.Timber -class OnboardRouterActivityKt : AppCompatActivity() +class OnboardRouterActivityKt : AppCompatActivity(), + OnMapReadyCallback, + MapboxMap.OnMapClickListener, + DirectionsSession.RouteObserver { + + private lateinit var offboardRouter: Router + private lateinit var mapboxMap: MapboxMap + + private var route: DirectionsRoute? = null + private lateinit var navigationMapRoute: NavigationMapRoute + private lateinit var directionsSession: DirectionsSession + private var origin: Point? = null + private var destination: Point? = null + private var waypoint: Point? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_mock_navigation) + setupRouter() + mapView.onCreate(savedInstanceState) + mapView.getMapAsync(this) + newLocationFab?.setOnClickListener { newOrigin() } + } + + private fun setupRouter() { + val file = File( + Environment.getExternalStoragePublicDirectory("Offline").absolutePath, + "2019_04_13-00_00_11" + ) + val fileTiles = File(file, "tiles") + val config = + Config( + fileTiles.absolutePath, + null, + null, + null, + null // working with pre-fetched tiles only + ) + offboardRouter = MapboxOnboardRouter(config) + } + + private fun newOrigin() { + clearMap() + val latLng = LatLng(47.05991, 9.49183) + origin = + Point.fromLngLat(latLng.longitude, latLng.latitude) + mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12.0)) + } + + override fun onMapReady(mapboxMap: MapboxMap) { + this.mapboxMap = mapboxMap + this.mapboxMap.addOnMapClickListener(this) + mapboxMap.setStyle( + Style.MAPBOX_STREETS + ) { style: Style? -> + navigationMapRoute = NavigationMapRoute(mapView, mapboxMap) + Snackbar.make( + findViewById(R.id.container), + "Tap map to place waypoint", + Snackbar.LENGTH_LONG + ).show() + newOrigin() + } + } + + private fun clearMap() { + mapboxMap.clear() + route = null + destination = null + waypoint = null + navigationMapRoute.updateRouteVisibilityTo(false) + navigationMapRoute.updateRouteArrowVisibilityTo(false) + } + + private fun findRoute() { + directionsSession = MapboxDirectionsSession( + offboardRouter, + this + ) + ifNonNull(origin, destination) { origin, destination -> + if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { + val waypoints = ArrayList() + + waypoint?.let { waypoints.add(it) } + + val optionsBuilder = + RouteOptionsNavigation.Builder() + .accessToken(Utils.getMapboxAccessToken(this)) + .origin(origin) + .destination(destination) + for (waypointPoint in waypoints) { + optionsBuilder.addWaypoint(waypointPoint) + } + directionsSession.requestRoutes(optionsBuilder.build()) + } + } + } + + override fun onMapClick(point: LatLng): Boolean { + when { + destination == null -> { + destination = Point.fromLngLat(point.longitude, point.latitude) + mapboxMap.addMarker(MarkerOptions().position(point)) + findRoute() + } + waypoint == null -> { + waypoint = + Point.fromLngLat(point.longitude, point.latitude) + mapboxMap.addMarker(MarkerOptions().position(point)) + findRoute() + } + else -> { + Toast.makeText(this, "Only 2 waypoints supported for this example", Toast.LENGTH_LONG) + .show() + clearMap() + } + } + return false + } + + /* + * DirectionSessions.RouteObserver + */ + override fun onRoutesChanged(routes: List) { + if (routes.isNotEmpty()) { + route = routes[0].mapToDirectionsRoute() + navigationMapRoute?.addRoute(route) + } + } + + override fun onRoutesRequested() { + Timber.d("onRoutesRequested: navigation.getRoute()") + } + + override fun onRoutesRequestFailure(throwable: Throwable) { + Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()") + } + + /* + * Activity lifecycle methods + */ + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onStart() { + super.onStart() + mapView.onStart() + } + + override fun onStop() { + super.onStop() + mapView.onStop() + } + + override fun onLowMemory() { + super.onLowMemory() + mapView.onLowMemory() + } + + override fun onDestroy() { + super.onDestroy() + directionsSession.cancel() + mapboxMap.removeOnMapClickListener(this) + mapView.onDestroy() + } + + override fun onSaveInstanceState(outState: Bundle?) { + super.onSaveInstanceState(outState) + outState?.let { mapView.onSaveInstanceState(it) } + } +} diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 34b541c6fc4..fb035b8c73d 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -23,24 +23,21 @@ class MapboxOnboardRouter : Router { } private val navigatorNative: MapboxNativeNavigator - private val accessToken: String private val config: Config /** * Creates an offline router which uses the specified offline path for storing and retrieving * data. * - * @param accessToken mapbox access token * @param config offline config */ - constructor(accessToken: String, config: Config) { + constructor(config: Config) { val tileDir = File(config.tilePath, TILE_PATH_NAME) if (!tileDir.exists()) { tileDir.mkdirs() } this.navigatorNative = MapboxNativeNavigatorImpl - this.accessToken = accessToken this.config = config MapboxNativeNavigatorImpl.configureRouter(config.mapToRouteConfig()) } @@ -48,11 +45,9 @@ class MapboxOnboardRouter : Router { // Package private for testing purposes internal constructor( navigator: MapboxNativeNavigator, - accessToken: String, config: Config ) { this.navigatorNative = navigator - this.accessToken = accessToken this.config = config } @@ -68,7 +63,10 @@ class MapboxOnboardRouter : Router { orgin = routeOptions.origin.point, waypoints = routeOptions.waypoints.map { it.point }, destination = routeOptions.destination.point, - steps = routeOptions.steps + steps = routeOptions.steps, + voiceIntruction = routeOptions.voiceInstructions, + bannerIntruction = routeOptions.bannerInstructions, + roundaboutExits = routeOptions.roundaboutExits ) ).build() diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt index edb794af538..37f92a9ed9a 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt @@ -11,12 +11,11 @@ class MapboxOnboardRouterGenerationTest { private lateinit var onboardRouter: MapboxOnboardRouter private val navigator: MapboxNativeNavigator = mockk() - private val token = "pk.XXX" private val tilePath = "tiles" @Before fun setUp() { - onboardRouter = MapboxOnboardRouter(navigator, token, Config(tilePath)) + onboardRouter = MapboxOnboardRouter(navigator, Config(tilePath)) } @Test diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt index 91031f684ca..6297a4ac9ac 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt @@ -3,12 +3,12 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.LegAnnotationNavigation class LegAnnotationNavigationDto( - val distance: List?, - val duration: List?, - val speed: List?, - val maxspeed: List?, - val congestion: List? -) + val distance: List?, + val duration: List?, + val speed: List?, + val maxspeed: List?, + val congestion: List? + ) fun LegAnnotationNavigationDto.mapToModel() = LegAnnotationNavigation( distance = distance, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt index f126e11b87e..d5a31128d50 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt @@ -2,30 +2,29 @@ package com.mapbox.navigation.base.route.dto import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.model.LegStepNavigation -import com.mapbox.navigation.base.route.model.StepManeuverNavigation class LegStepNavigationDto( - val distance: Double, - val duration: Double, - val geometry: String?, - val name: String?, - val ref: String?, - val destinations: String?, - val mode: String, - val pronunciation: String?, - @SerializedName("rotary_name") - val rotaryName: String?, - @SerializedName("rotary_pronunciation") - val rotaryPronunciation: String?, - val maneuver: StepManeuverNavigation, - val voiceInstructions: List?, - val bannerInstructions: List?, - @SerializedName("driving_side") - val drivingSide: String?, - val weight: Double, - val intersections: List?, - val exits: String? -) + val distance: Double, + val duration: Double, + val geometry: String?, + val name: String?, + val ref: String?, + val destinations: String?, + val mode: String, + val pronunciation: String?, + @SerializedName("rotary_name") + val rotaryName: String?, + @SerializedName("rotary_pronunciation") + val rotaryPronunciation: String?, + val maneuver: StepManeuverNavigationDto, + val voiceInstructions: List?, + val bannerInstructions: List?, + @SerializedName("driving_side") + val drivingSide: String?, + val weight: Double, + val intersections: List?, + val exits: String? + ) fun LegStepNavigationDto.mapToModel() = LegStepNavigation( distance = distance, @@ -38,7 +37,7 @@ import com.mapbox.navigation.base.route.model.StepManeuverNavigation pronunciation = pronunciation, rotaryName = rotaryName, rotaryPronunciation = rotaryPronunciation, - maneuver = maneuver, + maneuver = maneuver.mapToModel(), voiceInstructions = voiceInstructions?.map(VoiceInstructionsNavigationDto::mapToModel), bannerInstructions = bannerInstructions?.map(BannerInstructionsNavigationDto::mapToModel), drivingSide = drivingSide, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt index e0f17d95a69..fcba63d7a49 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -1,14 +1,15 @@ package com.mapbox.navigation.base.route.dto import com.google.gson.annotations.SerializedName +import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.model.RouteOptionsNavigation - data class RouteOptionsNavigationDto( +data class RouteOptionsNavigationDto( val baseUrl: String?, val user: String?, val profile: String?, - val coordinates: List, + val coordinates: List, // List, val alternatives: Boolean?, val language: String?, val radiuses: String?, @@ -22,7 +23,7 @@ import com.mapbox.navigation.base.route.model.RouteOptionsNavigation @SerializedName("voice_instructions") val voiceInstructions: Boolean?, @SerializedName("banner_instructions") val bannerInstructions: Boolean?, @SerializedName("voice_units") val voiceUnits: String?, - val accessToken: String?, + @SerializedName("access_token") val accessToken: String?, @SerializedName("uuid") val requestUuid: String?, val exclude: String?, val approaches: String?, @@ -32,25 +33,27 @@ import com.mapbox.navigation.base.route.model.RouteOptionsNavigation val walkingOptions: WalkingOptionsNavigationDto? ) - fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( +fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( baseUrl = baseUrl ?: RouteUrl.BASE_URL, user = user ?: RouteUrl.PROFILE_DEFAULT_USER, profile = profile ?: RouteUrl.PROFILE_DRIVING, origin = coordinates.retrieveOrigin().mapToModel(), waypoints = coordinates.retrieveWaypoints().map { it.mapToModel() }, destination = coordinates.retrieveDestination().mapToModel(), - alternatives = alternatives ?: false, + alternatives = alternatives ?: RouteOptionsNavigation.ALTERNATIVES_DEFAULT_VALUE, language = language, radiuses = radiuses, bearings = bearings, - continueStraight = continueStraight ?: false, - roundaboutExits = roundaboutExits, + continueStraight = continueStraight ?: RouteOptionsNavigation.CONTINUE_STRAIGHT_DEFAULT_VALUE, + roundaboutExits = roundaboutExits ?: RouteOptionsNavigation.ROUNDABOUT_EXITS_DEFAULT_VALUE, geometries = geometries, overview = overview, - steps = steps ?: true, + steps = steps ?: RouteOptionsNavigation.STEPS_DEFAULT_VALUE, annotations = annotations, - voiceInstructions = voiceInstructions, - bannerInstructions = bannerInstructions, + voiceInstructions = voiceInstructions + ?: RouteOptionsNavigation.VOICE_INSTRUCTIONS_DEFAULT_VALUE, + bannerInstructions = bannerInstructions + ?: RouteOptionsNavigation.BANNER_INSTRUCTIONS_DEFAULT_VALUE, voiceUnits = voiceUnits, accessToken = accessToken, requestUuid = requestUuid, @@ -62,11 +65,17 @@ import com.mapbox.navigation.base.route.model.RouteOptionsNavigation walkingOptions = walkingOptions?.mapToModel() ) -private fun List.retrieveOrigin(): RoutePointNavigationDto = - this.first() +private fun List.retrieveOrigin(): RoutePointNavigationDto = + this.first().let { RoutePointNavigationDto(Point.fromLngLat(it[0], it[1]), null, null) } -private fun List.retrieveWaypoints(): List = - this.drop(1).dropLast(1) +private fun List.retrieveWaypoints(): List = + this.drop(1).dropLast(1).map { + RoutePointNavigationDto( + Point.fromLngLat(it[0], it[1]), + null, + null + ) + } -private fun List.retrieveDestination(): RoutePointNavigationDto = - this.last() +private fun List.retrieveDestination(): RoutePointNavigationDto = + this.last().let { RoutePointNavigationDto(Point.fromLngLat(it[0], it[1]), null, null) } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt index 9b1d687e776..a28d08bdfdb 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt @@ -6,4 +6,4 @@ class RouteResponseDto(val routes: List?) fun RouteResponseDto.mapToModel() = RouteResponse( routes?.map(RouteDto::mapToModelRoute) -) \ No newline at end of file +) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt index 0f20b2b7316..746363c448a 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepIntersectionNavigationDto.kt @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.StepIntersectionNavigation - class StepIntersectionNavigationDto( +class StepIntersectionNavigationDto( @SerializedName("location") val rawLocation: DoubleArray, val bearings: List?, @@ -15,7 +15,7 @@ import com.mapbox.navigation.base.route.model.StepIntersectionNavigation val lanes: List? ) - fun StepIntersectionNavigationDto.mapToModel() = StepIntersectionNavigation( +fun StepIntersectionNavigationDto.mapToModel() = StepIntersectionNavigation( location = Point.fromLngLat(rawLocation[0], rawLocation[1]), bearings = bearings, classes = classes, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt index c8cb02d712e..742bc4c6186 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.StepManeuverNavigation - class StepManeuverNavigationDto( +class StepManeuverNavigationDto( @SerializedName("location") val rawLocation: DoubleArray, @SerializedName("bearing_before") @@ -18,7 +18,7 @@ import com.mapbox.navigation.base.route.model.StepManeuverNavigation val exit: Int? ) - fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation( +fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation( location = Point.fromLngLat(rawLocation[0], rawLocation[1]), bearingBefore = bearingBefore, bearingAfter = bearingAfter, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt index cefdd584e60..ebddf3640ce 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/VoiceInstructionsNavigationDto.kt @@ -2,13 +2,13 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation - class VoiceInstructionsNavigationDto( +class VoiceInstructionsNavigationDto( val distanceAlongGeometry: Double?, val announcement: String?, val ssmlAnnouncement: String? ) - fun VoiceInstructionsNavigationDto.mapToModel() = VoiceInstructionsNavigation( +fun VoiceInstructionsNavigationDto.mapToModel() = VoiceInstructionsNavigation( distanceAlongGeometry = distanceAlongGeometry, announcement = announcement, ssmlAnnouncement = ssmlAnnouncement diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt index da0561f2dc6..56681074b5f 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt @@ -18,13 +18,13 @@ import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation * allowed range of values is from -1 to 1, where -1 indicates indicates preference to avoid * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). */ - class WalkingOptionsNavigationDto( +class WalkingOptionsNavigationDto( @SerializedName("walking_speed") val walkingSpeed: Double?, @SerializedName("walkway_bias") val walkwayBias: Double?, @SerializedName("alley_bias") val alleyBias: Double? ) - fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( +fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( walkingSpeed = walkingSpeed, walkwayBias = walkwayBias, alleyBias = alleyBias diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index 8d26e6634dd..d42df0f6f4f 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -15,13 +15,13 @@ class RouteOptionsNavigation( val radiuses: String?, val bearings: String?, val continueStraight: Boolean, - val roundaboutExits: Boolean?, + val roundaboutExits: Boolean, val geometries: String?, val overview: String?, val steps: Boolean, val annotations: String?, - val voiceInstructions: Boolean?, - val bannerInstructions: Boolean?, + val voiceInstructions: Boolean, + val bannerInstructions: Boolean, val voiceUnits: String?, val accessToken: String?, val requestUuid: String?, @@ -35,15 +35,20 @@ class RouteOptionsNavigation( companion object { @JvmStatic - fun builder(): Builder { - return Builder() - } + fun builder(): Builder = Builder() + + const val ALTERNATIVES_DEFAULT_VALUE = false + const val STEPS_DEFAULT_VALUE = false + const val CONTINUE_STRAIGHT_DEFAULT_VALUE = false + const val ROUNDABOUT_EXITS_DEFAULT_VALUE = false + const val VOICE_INSTRUCTIONS_DEFAULT_VALUE = false + const val BANNER_INSTRUCTIONS_DEFAULT_VALUE = false } val coordinates: List get() = listOf(origin.point) + waypoints.map { it.point } + destination.point - class Builder internal constructor() { + class Builder { private lateinit var _origin: RoutePointNavigation private lateinit var _destination: RoutePointNavigation private val _waypoints = mutableListOf() @@ -51,18 +56,18 @@ class RouteOptionsNavigation( private var baseUrl: String? = null private var user: String? = null private var profile: String? = null - private var alternatives: Boolean = true + private var alternatives: Boolean = ALTERNATIVES_DEFAULT_VALUE private var language: String? = null private var radiuses: String? = null private var bearings: String? = null - private var continueStraight: Boolean = false - private var roundaboutExits: Boolean? = null + private var continueStraight: Boolean = CONTINUE_STRAIGHT_DEFAULT_VALUE + private var roundaboutExits: Boolean = ROUNDABOUT_EXITS_DEFAULT_VALUE private var geometries: String? = null private var overview: String? = null - private var steps: Boolean = true + private var steps: Boolean = STEPS_DEFAULT_VALUE private var annotations: String? = null - private var voiceInstructions: Boolean? = null - private var bannerInstructions: Boolean? = null + private var voiceInstructions: Boolean = VOICE_INSTRUCTIONS_DEFAULT_VALUE + private var bannerInstructions: Boolean = BANNER_INSTRUCTIONS_DEFAULT_VALUE private var voiceUnits: String? = null private var accessToken: String? = null private var requestUuid: String? = null diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt index dafc84e1751..d4c85339814 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt @@ -1,4 +1,3 @@ package com.mapbox.navigation.base.route.model -class RouteResponse(val routes: List?) { -} \ No newline at end of file +class RouteResponse(val routes: List?) From 5d688a7b44163f8994d0833c3e5f7501d0f856cf Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 18 Dec 2019 15:13:37 +0300 Subject: [PATCH 53/75] Mappers: explicitly specify return types --- .../navigation/v5/utils/extensions/Mappers.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt index ffd335c910b..6111c86498a 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt @@ -52,7 +52,7 @@ fun Route.mapToDirectionsRoute(): DirectionsRoute { .build() } -fun RouteOptionsNavigation.mapToRouteOptions() = +fun RouteOptionsNavigation.mapToRouteOptions(): RouteOptions = RouteOptions.builder() .apply { walkingOptions?.let { walkingOptions(it.mapToWalkingOptions()) } @@ -85,7 +85,7 @@ fun RouteOptionsNavigation.mapToRouteOptions() = .waypointTargets(waypointTargets)!! .build() -fun RouteLegNavigation.mapToRouteLeg() = +fun RouteLegNavigation.mapToRouteLeg(): RouteLeg = RouteLeg.builder() .annotation(annotation?.mapToLegAnnotation()) .distance(distance) @@ -94,7 +94,7 @@ fun RouteLegNavigation.mapToRouteLeg() = .summary(summary) .build() -fun LegAnnotationNavigation.mapToLegAnnotation() = +fun LegAnnotationNavigation.mapToLegAnnotation(): LegAnnotation = LegAnnotation.builder() .congestion(congestion) .distance(distance) @@ -103,7 +103,7 @@ fun LegAnnotationNavigation.mapToLegAnnotation() = .speed(speed) .build() -fun LegStepNavigation.mapToLegStep() = +fun LegStepNavigation.mapToLegStep(): LegStep = LegStep.builder() .bannerInstructions(bannerInstructions?.map(BannerInstructionsNavigation::mapToBannerInstruction) ?: emptyList()) .destinations(destinations) @@ -124,7 +124,7 @@ fun LegStepNavigation.mapToLegStep() = .weight(weight) .build() -fun MaxSpeedNavigation.mapToMaxSpeed() = +fun MaxSpeedNavigation.mapToMaxSpeed(): MaxSpeed = MaxSpeed.builder() .speed(speed) .none(none) @@ -132,7 +132,7 @@ fun MaxSpeedNavigation.mapToMaxSpeed() = .unknown(unknown) .build() -fun BannerInstructionsNavigation.mapToBannerInstruction() = +fun BannerInstructionsNavigation.mapToBannerInstruction(): BannerInstructions = BannerInstructions.builder() .distanceAlongGeometry(distanceAlongGeometry) .primary(primary?.mapToBannerText() ?: BannerText.builder().build()) @@ -140,7 +140,7 @@ fun BannerInstructionsNavigation.mapToBannerInstruction() = .sub(sub?.mapToBannerText()) .build() -fun StepIntersectionNavigation.mapToStepIntersection() = +fun StepIntersectionNavigation.mapToStepIntersection(): StepIntersection = StepIntersection.builder() .bearings(bearings) .classes(classes) @@ -151,7 +151,7 @@ fun StepIntersectionNavigation.mapToStepIntersection() = .rawLocation(rawLocation) .build() -fun StepManeuverNavigation.mapToStepManeuver() = +fun StepManeuverNavigation.mapToStepManeuver(): StepManeuver = StepManeuver.builder() .bearingAfter(bearingAfter) .bearingBefore(bearingBefore) From 6af8bf93d8983417fe743101995be9d194986a73 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 18 Dec 2019 15:16:38 +0300 Subject: [PATCH 54/75] Mappers: explicitly specify return types --- .../android/navigation/v5/utils/extensions/Mappers.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt index 6111c86498a..4bff750d145 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt @@ -162,14 +162,14 @@ fun StepManeuverNavigation.mapToStepManeuver(): StepManeuver = .type(type) .build() -fun VoiceInstructionsNavigation.mapToVoiceInstructions() = +fun VoiceInstructionsNavigation.mapToVoiceInstructions(): VoiceInstructions = VoiceInstructions.builder() .announcement(announcement) .distanceAlongGeometry(distanceAlongGeometry) .ssmlAnnouncement(ssmlAnnouncement) .build() -fun BannerTextNavigation.mapToBannerText() = +fun BannerTextNavigation.mapToBannerText(): BannerText = BannerText.builder() .text(text ?: "")!! .components(components?.map(BannerComponentsNavigation::mapToBannerComponents))!! @@ -179,13 +179,13 @@ fun BannerTextNavigation.mapToBannerText() = .type(type) .build() -fun IntersectionLanesNavigation.mapToIntersectionLanes() = +fun IntersectionLanesNavigation.mapToIntersectionLanes(): IntersectionLanes = IntersectionLanes.builder() .indications(indications) .valid(valid) .build() -fun BannerComponentsNavigation.mapToBannerComponents() = +fun BannerComponentsNavigation.mapToBannerComponents(): BannerComponents = BannerComponents.builder() .abbreviation(abbreviation) .abbreviationPriority(abbreviationPriority) From fa17213a82e0464939fd63e352b726face90a537 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 18 Dec 2019 17:32:10 +0300 Subject: [PATCH 55/75] - RouteUrl: test; - lint issues --- libnavigation-base/build.gradle | 2 +- .../base/route/dto/BannerTextNavigationDto.kt | 2 +- .../route/dto/LegAnnotationNavigationDto.kt | 16 +-- .../base/route/dto/LegStepNavigationDto.kt | 46 +++---- .../navigation/base/route/RouteUrlTest.kt | 119 ++++++++++++++++++ 5 files changed, 152 insertions(+), 33 deletions(-) create mode 100644 libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt diff --git a/libnavigation-base/build.gradle b/libnavigation-base/build.gradle index 9e6c7e06b25..608b13cdbf5 100644 --- a/libnavigation-base/build.gradle +++ b/libnavigation-base/build.gradle @@ -28,6 +28,6 @@ dependencies { // Unit testing testImplementation dependenciesList.junit testImplementation dependenciesList.mockk + testImplementation dependenciesList.robolectric } - apply from: "${rootDir}/gradle/bintray-publish.gradle" \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt index bee4687302a..212b76a0aa9 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/BannerTextNavigationDto.kt @@ -13,7 +13,7 @@ class BannerTextNavigationDto( val drivingSide: String? ) - fun BannerTextNavigationDto.mapToModel() = BannerTextNavigation( +fun BannerTextNavigationDto.mapToModel() = BannerTextNavigation( text = text, components = components?.map { it.mapToModel() }, type = type, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt index 6297a4ac9ac..ad80dee07a7 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegAnnotationNavigationDto.kt @@ -2,15 +2,15 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.LegAnnotationNavigation - class LegAnnotationNavigationDto( - val distance: List?, - val duration: List?, - val speed: List?, - val maxspeed: List?, - val congestion: List? - ) +class LegAnnotationNavigationDto( + val distance: List?, + val duration: List?, + val speed: List?, + val maxspeed: List?, + val congestion: List? +) - fun LegAnnotationNavigationDto.mapToModel() = LegAnnotationNavigation( +fun LegAnnotationNavigationDto.mapToModel() = LegAnnotationNavigation( distance = distance, duration = duration, speed = speed, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt index d5a31128d50..5f1f173e27b 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt @@ -3,30 +3,30 @@ package com.mapbox.navigation.base.route.dto import com.google.gson.annotations.SerializedName import com.mapbox.navigation.base.route.model.LegStepNavigation - class LegStepNavigationDto( - val distance: Double, - val duration: Double, - val geometry: String?, - val name: String?, - val ref: String?, - val destinations: String?, - val mode: String, - val pronunciation: String?, - @SerializedName("rotary_name") - val rotaryName: String?, - @SerializedName("rotary_pronunciation") - val rotaryPronunciation: String?, - val maneuver: StepManeuverNavigationDto, - val voiceInstructions: List?, - val bannerInstructions: List?, - @SerializedName("driving_side") - val drivingSide: String?, - val weight: Double, - val intersections: List?, - val exits: String? - ) +class LegStepNavigationDto( + val distance: Double, + val duration: Double, + val geometry: String?, + val name: String?, + val ref: String?, + val destinations: String?, + val mode: String, + val pronunciation: String?, + @SerializedName("rotary_name") + val rotaryName: String?, + @SerializedName("rotary_pronunciation") + val rotaryPronunciation: String?, + val maneuver: StepManeuverNavigationDto, + val voiceInstructions: List?, + val bannerInstructions: List?, + @SerializedName("driving_side") + val drivingSide: String?, + val weight: Double, + val intersections: List?, + val exits: String? +) - fun LegStepNavigationDto.mapToModel() = LegStepNavigation( +fun LegStepNavigationDto.mapToModel() = LegStepNavigation( distance = distance, duration = duration, geometry = geometry, diff --git a/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt b/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt new file mode 100644 index 00000000000..e04e7df870c --- /dev/null +++ b/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt @@ -0,0 +1,119 @@ +package com.mapbox.navigation.base.route + +import android.net.Uri +import com.mapbox.geojson.Point +import java.net.URLDecoder +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class RouteUrlTest { + + @Test + fun checkBaseUrl() { + setupRouteUrl() + .checkContain("${RouteUrl.BASE_URL}/${RouteUrl.BASE_URL_P0}/${RouteUrl.BASE_URL_P1}/") + } + + @Test + fun checkCoordinates() { + val routeUrl = setupRouteUrl( + orgin = Point.fromLngLat(12.2, 43.4), + waypoints = listOf(Point.fromLngLat(54.0, 90.01), Point.fromLngLat(32.9, 81.23)), + destination = Point.fromLngLat(42.00210201, 13.123121) + ) + + assertNotNull(routeUrl.path) + routeUrl.path!!.contains( + "/12.2,43.4;54.0,90.01;32.9,81.23;42.00210201,13.123121" + ) + } + + @Test + fun checkUserAndProfile() { + val routeUrl = setupRouteUrl() + + routeUrl.checkContain("/${RouteUrl.PROFILE_DEFAULT_USER}/${RouteUrl.PROFILE_DRIVING}/") + } + + @Test + fun checkNonDefaultUserAndProfile() { + val routeUrl = setupRouteUrl(user = "vitalik", profile = RouteUrl.PROFILE_CYCLING) + + routeUrl.checkContain("/vitalik/${RouteUrl.PROFILE_CYCLING}/") + } + + @Test + fun checkQueries() { + val token = "pk_token1212.dsda" + val routeUri = setupRouteUrl( + accessToken = token, + steps = true, + geometries = RouteUrl.GEOMETRY_POLYLINE, + overview = RouteUrl.OVERVIEW_SIMPLIFIED, + voiceIntruction = false, + bannerIntruction = true, + roundaboutExits = true, + enableRefresh = false + ) + val expectedQueries = + listOf( + "access_token" to token, + "steps" to "true", + "geometries" to RouteUrl.GEOMETRY_POLYLINE, + "overview" to RouteUrl.OVERVIEW_SIMPLIFIED, + "voice_instructions" to "false", + "roundabout_exits" to "true", + "enable_refresh" to "false" + ) + + expectedQueries.forEach { (key, value) -> + assertEquals("Check Query param", value, routeUri.getQueryParameter(key)) + } + } + + private fun Uri.checkContain(string: String, decode: String? = "UTF-8") = + assertTrue(this.toString() + .let { url -> + decode?.let { decode -> URLDecoder.decode(url, decode) } ?: url + } + .contains(string) + ) + + private fun setupRouteUrl( + accessToken: String = "", + orgin: Point = Point.fromLngLat(.0, .0), + waypoints: List? = null, + destination: Point = Point.fromLngLat(.0, .0), + user: String = RouteUrl.PROFILE_DEFAULT_USER, + profile: String = RouteUrl.PROFILE_DRIVING, + steps: Boolean = true, + geometries: String = RouteUrl.GEOMETRY_POLYLINE6, + overview: String = RouteUrl.OVERVIEW_FULL, + voiceIntruction: Boolean = true, + bannerIntruction: Boolean = true, + roundaboutExits: Boolean = true, + enableRefresh: Boolean = true + ): Uri = + RouteUrl( + accessToken, + orgin, + waypoints, + destination, + user, + profile, + steps, + geometries, + overview, + voiceIntruction, + bannerIntruction, + roundaboutExits, + enableRefresh + ).getRequest() +} From 29798f9366a190b572460da7a7588ad231443efb Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 18 Dec 2019 17:56:14 +0300 Subject: [PATCH 56/75] - Rebase fixes; lint fix --- .../navigation/testapp/activity/MockNavigationActivity.java | 1 + .../route/onboard/task/OfflineRouteRetrievalTask.kt | 6 ++++-- .../java/com/mapbox/navigation/base/metrics/MetricEvent.kt | 2 -- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java index eb4df48bc47..6618e0c0f11 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java @@ -32,6 +32,7 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; import com.mapbox.services.android.navigation.testapp.utils.Utils; +import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute; import com.mapbox.services.android.navigation.v5.navigation.metrics.MapboxMetricsReporter; import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricEvent; import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricsObserver; diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt index 7b4a12327c2..7e68ca35ce7 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -2,6 +2,8 @@ package com.mapbox.navigation.route.onboard.task import android.os.AsyncTask import com.google.gson.Gson +import com.mapbox.navigation.base.logger.model.Message +import com.mapbox.navigation.base.logger.model.Tag import com.mapbox.navigation.base.route.dto.RouteResponseDto import com.mapbox.navigation.base.route.dto.mapToModel import com.mapbox.navigation.base.route.model.Route @@ -20,7 +22,7 @@ internal class OfflineRouteRetrievalTask( @Volatile private lateinit var routerResult: RouterResult - private val logger by lazy { MapboxLogger() } + private val logger = MapboxLogger private val gson = Gson() // For testing only @@ -58,7 +60,7 @@ internal class OfflineRouteRetrievalTask( val errorMessage = "Error occurred fetching offline route: $error - Code: $errorCode" - logger.e("OfflineRouteRetrievalTask", errorMessage) + logger.e(Tag("OfflineRouteRetrievalTask"), Message(errorMessage)) return errorMessage } } diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt index 58766b3d3fa..1fb38a488f3 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/metrics/MetricEvent.kt @@ -2,8 +2,6 @@ package com.mapbox.navigation.base.metrics import androidx.annotation.StringDef import com.google.gson.Gson -import com.mapbox.navigation.base.internal.metrics.DirectionsMetrics -import com.mapbox.navigation.base.internal.metrics.NavigationMetrics interface MetricEvent { From 95d01ec7ddbb1c2a80b6bc044e61bfecd3b9fd1b Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 18 Dec 2019 18:06:22 +0300 Subject: [PATCH 57/75] lint issue --- .../testapp/activity/OnboardRouterActivityJava.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java index a86e095406b..4535e9004d1 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java @@ -75,7 +75,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } private void setupRouter() { - File file = new File(Environment.getExternalStoragePublicDirectory("Offline").getAbsolutePath(), "2019_04_13-00_00_11"); + File file = new File( + Environment.getExternalStoragePublicDirectory("Offline").getAbsolutePath(), + "2019_04_13-00_00_11"); File fileTiles = new File(file, "tiles"); Config config = new Config( fileTiles.getAbsolutePath(), From 7ea6a793c14da39757d34412b69d48facd4bf2fb Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 19 Dec 2019 17:11:21 +0300 Subject: [PATCH 58/75] RouteResponse: minor improves --- .../route/onboard/task/OfflineRouteRetrievalTask.kt | 2 +- .../navigation/base/route/dto/RouteResponseDto.kt | 12 ++++++++++-- .../navigation/base/route/model/RouteResponse.kt | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt index 7e68ca35ce7..f4fb4964756 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -45,7 +45,7 @@ internal class OfflineRouteRetrievalTask( } public override fun onPostExecute(offlineRoute: List?) { - if (offlineRoute != null) { + if (!offlineRoute.isNullOrEmpty()) { callback.onRouteFound(offlineRoute) } else { callback.onError(OfflineError(generateErrorMessage())) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt index a28d08bdfdb..16ecc4315ed 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteResponseDto.kt @@ -2,8 +2,16 @@ package com.mapbox.navigation.base.route.dto import com.mapbox.navigation.base.route.model.RouteResponse -class RouteResponseDto(val routes: List?) +class RouteResponseDto( + val message: String?, + val code: String?, + val uuid: String?, + val routes: List? +) fun RouteResponseDto.mapToModel() = RouteResponse( - routes?.map(RouteDto::mapToModelRoute) + message = message, + code = code, + uuid = uuid, + routes = routes?.map(RouteDto::mapToModelRoute) ) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt index d4c85339814..7d941eec275 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteResponse.kt @@ -1,3 +1,8 @@ package com.mapbox.navigation.base.route.model -class RouteResponse(val routes: List?) +class RouteResponse( + val message: String?, + val code: String?, + val uuid: String?, + val routes: List? +) From da535b45a0f4a40c0c64b2d92f9cc962938e2d88 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 23 Dec 2019 17:01:09 +0300 Subject: [PATCH 59/75] pr issues --- .../activity/OnboardRouterActivityJava.java | 16 +++---- .../activity/OnboardRouterActivityKt.kt | 28 +++++-------- .../navigation/v5/utils/extensions/Mappers.kt | 2 - .../navigation/route/onboard/OfflineRoute.kt | 42 +++++++------------ .../route/onboard/model/OfflineRouteError.kt | 6 ++- .../task/OfflineRouteRetrievalTaskTest.kt | 2 +- .../route/dto/RouteOptionsNavigationDto.kt | 32 +++++++++----- .../route/dto/WalkingOptionsNavigationDto.kt | 9 ++-- 8 files changed, 61 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java index 4535e9004d1..c2dc20a31e7 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java @@ -35,7 +35,6 @@ import org.jetbrains.annotations.NotNull; import java.io.File; -import java.util.ArrayList; import java.util.List; import butterknife.BindView; @@ -49,7 +48,7 @@ public class OnboardRouterActivityJava MapboxMap.OnMapClickListener, DirectionsSession.RouteObserver { - private Router offboardRouter; + private Router onboardRouter; private MapboxMap mapboxMap; private DirectionsRoute route; @@ -87,7 +86,7 @@ private void setupRouter() { null // working with pre-fetched tiles only ); - offboardRouter = new MapboxOnboardRouter(config); + onboardRouter = new MapboxOnboardRouter(config); } @@ -129,22 +128,17 @@ private void clearMap() { private void findRoute() { directionsSession = new MapboxDirectionsSession( - offboardRouter, + onboardRouter, this ); if (origin != null && destination != null) { if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { - List waypoints = new ArrayList<>(); - if (waypoint != null) { - waypoints.add(waypoint); - } RouteOptionsNavigation.Builder optionsBuilder = new RouteOptionsNavigation.Builder() .accessToken(Utils.getMapboxAccessToken(this)) .origin(origin) .destination(destination); - - for (Point waypointPoint : waypoints) { - optionsBuilder.addWaypoint(waypointPoint); + if (waypoint != null) { + optionsBuilder.addWaypoint(waypoint); } directionsSession.requestRoutes(optionsBuilder.build()); } diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt index 38bd0dd1335..ac4eb51d23e 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt @@ -28,7 +28,6 @@ import com.mapbox.services.android.navigation.v5.utils.extensions.mapToDirection import com.mapbox.turf.TurfConstants import com.mapbox.turf.TurfMeasurement import java.io.File -import java.util.ArrayList import kotlinx.android.synthetic.main.activity_mock_navigation.* import timber.log.Timber @@ -37,7 +36,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), MapboxMap.OnMapClickListener, DirectionsSession.RouteObserver { - private lateinit var offboardRouter: Router + private lateinit var onboardRouter: Router private lateinit var mapboxMap: MapboxMap private var route: DirectionsRoute? = null @@ -62,22 +61,20 @@ class OnboardRouterActivityKt : AppCompatActivity(), "2019_04_13-00_00_11" ) val fileTiles = File(file, "tiles") - val config = - Config( + val config = Config( fileTiles.absolutePath, null, null, null, null // working with pre-fetched tiles only ) - offboardRouter = MapboxOnboardRouter(config) + onboardRouter = MapboxOnboardRouter(config) } private fun newOrigin() { clearMap() val latLng = LatLng(47.05991, 9.49183) - origin = - Point.fromLngLat(latLng.longitude, latLng.latitude) + origin = Point.fromLngLat(latLng.longitude, latLng.latitude) mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12.0)) } @@ -86,7 +83,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), this.mapboxMap.addOnMapClickListener(this) mapboxMap.setStyle( Style.MAPBOX_STREETS - ) { style: Style? -> + ) { navigationMapRoute = NavigationMapRoute(mapView, mapboxMap) Snackbar.make( findViewById(R.id.container), @@ -108,23 +105,19 @@ class OnboardRouterActivityKt : AppCompatActivity(), private fun findRoute() { directionsSession = MapboxDirectionsSession( - offboardRouter, + onboardRouter, this ) ifNonNull(origin, destination) { origin, destination -> if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { - val waypoints = ArrayList() - - waypoint?.let { waypoints.add(it) } val optionsBuilder = RouteOptionsNavigation.Builder() .accessToken(Utils.getMapboxAccessToken(this)) .origin(origin) .destination(destination) - for (waypointPoint in waypoints) { - optionsBuilder.addWaypoint(waypointPoint) - } + waypoint?.let { optionsBuilder.addWaypoint(it) } + directionsSession.requestRoutes(optionsBuilder.build()) } } @@ -138,8 +131,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), findRoute() } waypoint == null -> { - waypoint = - Point.fromLngLat(point.longitude, point.latitude) + waypoint = Point.fromLngLat(point.longitude, point.latitude) mapboxMap.addMarker(MarkerOptions().position(point)) findRoute() } @@ -158,7 +150,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), override fun onRoutesChanged(routes: List) { if (routes.isNotEmpty()) { route = routes[0].mapToDirectionsRoute() - navigationMapRoute?.addRoute(route) + navigationMapRoute.addRoute(route) } } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt index 4bff750d145..809e4bf3b53 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt @@ -63,7 +63,6 @@ fun RouteOptionsNavigation.mapToRouteOptions(): RouteOptions = .profile(profile) .user(user) .baseUrl(baseUrl) - .alternatives(alternatives) .annotations(annotations) .approaches(approaches)!! .bannerInstructions(bannerInstructions) @@ -71,7 +70,6 @@ fun RouteOptionsNavigation.mapToRouteOptions(): RouteOptions = .continueStraight(continueStraight) .coordinates(coordinates) .geometries(geometries) - .approaches(approaches)!! .language(language) .overview(overview) .radiuses(radiuses) diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt index 586534fb671..a2ec44b7661 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt @@ -74,39 +74,25 @@ private constructor( private fun buildOfflineUrl(url: Uri): String { val offlineUrlBuilder = url.buildUpon() - ifNonNull(bicycleType) { - offlineUrlBuilder.appendQueryParameter(BICYCLE_TYPE_QUERY_PARAMETER, it) - } - - ifNonNull(cyclingSpeed) { - offlineUrlBuilder.appendQueryParameter(CYCLING_SPEED_QUERY_PARAMETER, it.toString()) - } - ifNonNull(cyclewayBias) { - offlineUrlBuilder.appendQueryParameter(CYCLEWAY_BIAS_QUERY_PARAMETER, it.toString()) - } + offlineUrlBuilder.appendQueryParamIfNonNull(BICYCLE_TYPE_QUERY_PARAMETER, bicycleType) + offlineUrlBuilder.appendQueryParamIfNonNull(CYCLING_SPEED_QUERY_PARAMETER, cyclingSpeed) + offlineUrlBuilder.appendQueryParamIfNonNull(CYCLEWAY_BIAS_QUERY_PARAMETER, cyclewayBias) + offlineUrlBuilder.appendQueryParamIfNonNull(HILL_BIAS_QUERY_PARAMETER, hillBias) + offlineUrlBuilder.appendQueryParamIfNonNull(FERRY_BIAS_QUERY_PARAMETER, ferryBias) + offlineUrlBuilder.appendQueryParamIfNonNull(ROUGH_SURFACE_BIAS_QUERY_PARAMETER, roughSurfaceBias) + offlineUrlBuilder.appendQueryParamIfNonNull(WAYPOINT_TYPES_QUERY_PARAMETER, waypointTypes) - ifNonNull(hillBias) { - offlineUrlBuilder.appendQueryParameter(HILL_BIAS_QUERY_PARAMETER, it.toString()) - } - - ifNonNull(ferryBias) { - offlineUrlBuilder.appendQueryParameter(FERRY_BIAS_QUERY_PARAMETER, it.toString()) - } - - ifNonNull(roughSurfaceBias) { - offlineUrlBuilder.appendQueryParameter( - ROUGH_SURFACE_BIAS_QUERY_PARAMETER, - it.toString() - ) - } - - ifNonNull(waypointTypes) { - offlineUrlBuilder.appendQueryParameter(WAYPOINT_TYPES_QUERY_PARAMETER, it) - } return offlineUrlBuilder.build().toString() } + private fun Uri.Builder.appendQueryParamIfNonNull(key: String, value: Float?): Uri.Builder = appendQueryParamIfNonNull(key, value?.toString()) + + private fun Uri.Builder.appendQueryParamIfNonNull(key: String, value: String?): Uri.Builder = + ifNonNull(value) { + appendQueryParameter(key, it) + } ?: this + class Builder internal constructor(private val routeUrl: RouteUrl) { private var bicycleType: OfflineCriteria.BicycleType? = null private var cyclingSpeed: Float? = null diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt index c3b280f5146..6c09dc11ac5 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/model/OfflineRouteError.kt @@ -4,7 +4,9 @@ import com.google.gson.annotations.SerializedName internal data class OfflineRouteError( val status: String, - @SerializedName("status_code") val statusCode: Int, + @SerializedName("status_code") + val statusCode: Int, val error: String, - @SerializedName("error_code") val errorCode: Int + @SerializedName("error_code") + val errorCode: Int ) diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt index b1ade82597c..d6eee9004bb 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt @@ -64,7 +64,7 @@ class OfflineRouteRetrievalTaskTest { mockedNavigator, mockedCallback ) - val routes = mockk>() + val routes = listOf(mockk()) theOfflineRouteRetrievalTask.onPostExecute(routes) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt index fcba63d7a49..75cf7957243 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -9,27 +9,37 @@ data class RouteOptionsNavigationDto( val baseUrl: String?, val user: String?, val profile: String?, - val coordinates: List, // List, + val coordinates: List, val alternatives: Boolean?, val language: String?, val radiuses: String?, val bearings: String?, - @SerializedName("continue_straight") val continueStraight: Boolean?, - @SerializedName("roundabout_exits") val roundaboutExits: Boolean?, + @SerializedName("continue_straight") + val continueStraight: Boolean?, + @SerializedName("roundabout_exits") + val roundaboutExits: Boolean?, val geometries: String?, val overview: String?, val steps: Boolean?, val annotations: String?, - @SerializedName("voice_instructions") val voiceInstructions: Boolean?, - @SerializedName("banner_instructions") val bannerInstructions: Boolean?, - @SerializedName("voice_units") val voiceUnits: String?, - @SerializedName("access_token") val accessToken: String?, - @SerializedName("uuid") val requestUuid: String?, + @SerializedName("voice_instructions") + val voiceInstructions: Boolean?, + @SerializedName("banner_instructions") + val bannerInstructions: Boolean?, + @SerializedName("voice_units") + val voiceUnits: String?, + @SerializedName("access_token") + val accessToken: String?, + @SerializedName("uuid") + val requestUuid: String?, val exclude: String?, val approaches: String?, - @SerializedName("waypoints") val waypointIndices: String?, - @SerializedName("waypoint_names") val waypointNames: String?, - @SerializedName("waypoint_targets") val waypointTargets: String?, + @SerializedName("waypoints") + val waypointIndices: String?, + @SerializedName("waypoint_names") + val waypointNames: String?, + @SerializedName("waypoint_targets") + val waypointTargets: String?, val walkingOptions: WalkingOptionsNavigationDto? ) diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt index 56681074b5f..176f1a1dc02 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/WalkingOptionsNavigationDto.kt @@ -19,9 +19,12 @@ import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation * alleys, 1 indicates preference to favor alleys, and 0 indicates no preference (the default). */ class WalkingOptionsNavigationDto( - @SerializedName("walking_speed") val walkingSpeed: Double?, - @SerializedName("walkway_bias") val walkwayBias: Double?, - @SerializedName("alley_bias") val alleyBias: Double? + @SerializedName("walking_speed") + val walkingSpeed: Double?, + @SerializedName("walkway_bias") + val walkwayBias: Double?, + @SerializedName("alley_bias") + val alleyBias: Double? ) fun WalkingOptionsNavigationDto.mapToModel() = WalkingOptionsNavigation( From 0613138576d5893cad7042f11143e5b40f8a841b Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Mon, 23 Dec 2019 17:24:10 +0300 Subject: [PATCH 60/75] fix rebase issue --- .../navigator/MapboxNativeNavigatorImpl.kt | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index e77783c8d74..4be5da1f8c1 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -8,6 +8,7 @@ import com.mapbox.navigation.navigator.model.RouterConfig import com.mapbox.navigator.FixLocation import com.mapbox.navigator.NavigationStatus import com.mapbox.navigator.Navigator +import com.mapbox.navigator.RouterParams import com.mapbox.navigator.RouterResult import com.mapbox.navigator.TileEndpointConfiguration import java.util.Date @@ -22,18 +23,21 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { override fun configureRouter(routerConfig: RouterConfig) { navigator.configureRouter( - routerConfig.tilePath, - routerConfig.inMemoryTileCache, - routerConfig.mapMatchingSpatialCache, - routerConfig.threadsCount, - routerConfig.endpointConfig?.let { - TileEndpointConfiguration( - it.host, - it.version, - it.token, - it.userAgent - ) - } + RouterParams( + routerConfig.tilePath, + routerConfig.inMemoryTileCache, + routerConfig.mapMatchingSpatialCache, + routerConfig.threadsCount, + routerConfig.endpointConfig?.let { + TileEndpointConfiguration( + it.host, + it.version, + it.token, + it.userAgent + ) + }), + + ) ) } From b4e620738b2b02a7094d85a281a50b8da81521bc Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 24 Dec 2019 15:37:28 +0300 Subject: [PATCH 61/75] - Provide HttpClient for native; - Onboard test activities: comment direction session dependencies(because one was moved to code module). --- .../activity/OnboardRouterActivityJava.java | 83 ++++++++++--------- .../activity/OnboardRouterActivityKt.kt | 71 ++++++++-------- gradle/dependencies.gradle | 13 ++- .../v5/internal/navigation/HttpClient.kt | 11 ++- libnavigator/build.gradle | 8 ++ .../navigator/MapboxNativeNavigatorImpl.kt | 8 +- .../navigator/network/HttpClient.kt | 81 ++++++++++++++++++ 7 files changed, 190 insertions(+), 85 deletions(-) create mode 100644 libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java index c2dc20a31e7..4156f515297 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java @@ -18,11 +18,11 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; -import com.mapbox.navigation.base.route.DirectionsSession; +//import com.mapbox.navigation.base.route.DirectionsSession; import com.mapbox.navigation.base.route.Router; import com.mapbox.navigation.base.route.model.Route; import com.mapbox.navigation.base.route.model.RouteOptionsNavigation; -import com.mapbox.navigation.directions.session.MapboxDirectionsSession; +//import com.mapbox.navigation.directions.session.MapboxDirectionsSession; import com.mapbox.navigation.route.onboard.MapboxOnboardRouter; import com.mapbox.navigation.route.onboard.model.Config; import com.mapbox.services.android.navigation.testapp.R; @@ -45,15 +45,16 @@ public class OnboardRouterActivityJava extends AppCompatActivity implements OnMapReadyCallback, - MapboxMap.OnMapClickListener, - DirectionsSession.RouteObserver { + MapboxMap.OnMapClickListener +// DirectionsSession.RouteObserver +{ private Router onboardRouter; private MapboxMap mapboxMap; private DirectionsRoute route; private NavigationMapRoute navigationMapRoute; - private DirectionsSession directionsSession; +// private DirectionsSession directionsSession; private Point origin; private Point destination; private Point waypoint; @@ -127,22 +128,22 @@ private void clearMap() { } private void findRoute() { - directionsSession = new MapboxDirectionsSession( - onboardRouter, - this - ); - if (origin != null && destination != null) { - if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { - RouteOptionsNavigation.Builder optionsBuilder = new RouteOptionsNavigation.Builder() - .accessToken(Utils.getMapboxAccessToken(this)) - .origin(origin) - .destination(destination); - if (waypoint != null) { - optionsBuilder.addWaypoint(waypoint); - } - directionsSession.requestRoutes(optionsBuilder.build()); - } - } +// directionsSession = new MapboxDirectionsSession( +// onboardRouter, +// this +// ); +// if (origin != null && destination != null) { +// if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { +// RouteOptionsNavigation.Builder optionsBuilder = new RouteOptionsNavigation.Builder() +// .accessToken(Utils.getMapboxAccessToken(this)) +// .origin(origin) +// .destination(destination); +// if (waypoint != null) { +// optionsBuilder.addWaypoint(waypoint); +// } +// directionsSession.requestRoutes(optionsBuilder.build()); +// } +// } } @Override @@ -165,23 +166,23 @@ public boolean onMapClick(@NonNull LatLng point) { /* * DirectionSessions.RouteObserver */ - @Override - public void onRoutesChanged(@NotNull List routes) { - if (!routes.isEmpty()) { - route = Mappers.mapToDirectionsRoute(routes.get(0)); - navigationMapRoute.addRoute(route); - } - } - - @Override - public void onRoutesRequested() { - Timber.d("onRoutesRequested: navigation.getRoute()"); - } - - @Override - public void onRoutesRequestFailure(@NotNull Throwable throwable) { - Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()"); - } +// @Override +// public void onRoutesChanged(@NotNull List routes) { +// if (!routes.isEmpty()) { +// route = Mappers.mapToDirectionsRoute(routes.get(0)); +// navigationMapRoute.addRoute(route); +// } +// } + +// @Override +// public void onRoutesRequested() { +// Timber.d("onRoutesRequested: navigation.getRoute()"); +// } +// +// @Override +// public void onRoutesRequestFailure(@NotNull Throwable throwable) { +// Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()"); +// } /* * Activity lifecycle methods @@ -220,9 +221,9 @@ public void onLowMemory() { @Override protected void onDestroy() { super.onDestroy(); - if (directionsSession != null) { - directionsSession.cancel(); - } +// if (directionsSession != null) { +// directionsSession.cancel(); +// } if (mapboxMap != null) { mapboxMap.removeOnMapClickListener(this); mapView.onDestroy(); diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt index ac4eb51d23e..9c392a57f62 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt @@ -1,5 +1,7 @@ package com.mapbox.services.android.navigation.testapp.activity +// import com.mapbox.navigation.base.route.DirectionsSession +// import com.mapbox.navigation.directions.session.MapboxDirectionsSession import android.os.Bundle import android.os.Environment import android.widget.Toast @@ -13,35 +15,30 @@ import com.mapbox.mapboxsdk.geometry.LatLng import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.OnMapReadyCallback import com.mapbox.mapboxsdk.maps.Style -import com.mapbox.navigation.base.route.DirectionsSession import com.mapbox.navigation.base.route.Router -import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.route.model.RouteOptionsNavigation -import com.mapbox.navigation.directions.session.MapboxDirectionsSession import com.mapbox.navigation.route.onboard.MapboxOnboardRouter import com.mapbox.navigation.route.onboard.model.Config import com.mapbox.navigation.utils.extensions.ifNonNull import com.mapbox.services.android.navigation.testapp.R import com.mapbox.services.android.navigation.testapp.utils.Utils import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute -import com.mapbox.services.android.navigation.v5.utils.extensions.mapToDirectionsRoute import com.mapbox.turf.TurfConstants import com.mapbox.turf.TurfMeasurement import java.io.File import kotlinx.android.synthetic.main.activity_mock_navigation.* -import timber.log.Timber class OnboardRouterActivityKt : AppCompatActivity(), OnMapReadyCallback, - MapboxMap.OnMapClickListener, - DirectionsSession.RouteObserver { + MapboxMap.OnMapClickListener +// DirectionsSession.RouteObserver { private lateinit var onboardRouter: Router private lateinit var mapboxMap: MapboxMap private var route: DirectionsRoute? = null private lateinit var navigationMapRoute: NavigationMapRoute - private lateinit var directionsSession: DirectionsSession + // private lateinit var directionsSession: DirectionsSession private var origin: Point? = null private var destination: Point? = null private var waypoint: Point? = null @@ -62,12 +59,12 @@ class OnboardRouterActivityKt : AppCompatActivity(), ) val fileTiles = File(file, "tiles") val config = Config( - fileTiles.absolutePath, - null, - null, - null, - null // working with pre-fetched tiles only - ) + fileTiles.absolutePath, + null, + null, + null, + null // working with pre-fetched tiles only + ) onboardRouter = MapboxOnboardRouter(config) } @@ -104,10 +101,10 @@ class OnboardRouterActivityKt : AppCompatActivity(), } private fun findRoute() { - directionsSession = MapboxDirectionsSession( - onboardRouter, - this - ) + // directionsSession = MapboxDirectionsSession( + // onboardRouter, + // this + // ) ifNonNull(origin, destination) { origin, destination -> if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { @@ -118,7 +115,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), .destination(destination) waypoint?.let { optionsBuilder.addWaypoint(it) } - directionsSession.requestRoutes(optionsBuilder.build()) + // directionsSession.requestRoutes(optionsBuilder.build()) } } } @@ -136,7 +133,11 @@ class OnboardRouterActivityKt : AppCompatActivity(), findRoute() } else -> { - Toast.makeText(this, "Only 2 waypoints supported for this example", Toast.LENGTH_LONG) + Toast.makeText( + this, + "Only 2 waypoints supported for this example", + Toast.LENGTH_LONG + ) .show() clearMap() } @@ -147,20 +148,20 @@ class OnboardRouterActivityKt : AppCompatActivity(), /* * DirectionSessions.RouteObserver */ - override fun onRoutesChanged(routes: List) { - if (routes.isNotEmpty()) { - route = routes[0].mapToDirectionsRoute() - navigationMapRoute.addRoute(route) - } - } - - override fun onRoutesRequested() { - Timber.d("onRoutesRequested: navigation.getRoute()") - } - - override fun onRoutesRequestFailure(throwable: Throwable) { - Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()") - } + // override fun onRoutesChanged(routes: List) { + // if (routes.isNotEmpty()) { + // route = routes[0].mapToDirectionsRoute() + // navigationMapRoute.addRoute(route) + // } + // } + + // override fun onRoutesRequested() { + // Timber.d("onRoutesRequested: navigation.getRoute()") + // } + // + // override fun onRoutesRequestFailure(throwable: Throwable) { + // Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()") + // } /* * Activity lifecycle methods @@ -192,7 +193,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), override fun onDestroy() { super.onDestroy() - directionsSession.cancel() + // directionsSession.cancel() mapboxMap.removeOnMapClickListener(this) mapView.onDestroy() } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 9e53a48683a..d09fe215823 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -49,7 +49,9 @@ ext { crashlytics : '2.9.9', multidex : '2.0.0', json : '20180813', - coroutinesAndroid : '1.3.3' + coroutinesAndroid : '1.3.3', + okhttp : '3.12.0', + okio : '2.4.3' ] dependenciesList = [ // mapbox @@ -77,6 +79,13 @@ ext { // code style ktlint : "com.pinterest:ktlint:${version.ktlint}", + // network + okhttp : "com.squareup.okhttp3:okhttp:${version.okhttp}", + okhttpInterceptor : "com.squareup.okhttp3:logging-interceptor:${version.okhttp}", + + // I/O + okio : "com.squareup.okio:okio:${version.okio}", + // AutoValue autoValue : "com.google.auto.value:auto-value:${version.autoValue}", autoValuesParcel : "com.ryanharter.auto.value:auto-value-parcel:${version.autoValueParcel}", @@ -141,7 +150,7 @@ ext { errorprone : '0.0.13', coveralls : '2.8.1', spotbugs : '1.3', - gradle : '3.5.1', + gradle : '3.5.3', dependencyGraph : '0.3.0', dependencyUpdates: '0.20.0', kotlin : '1.3.61', diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt index 31d872de64a..94ca6fc3ec8 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt @@ -9,7 +9,8 @@ import java.io.ByteArrayOutputStream import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.logging.HttpLoggingInterceptor -import okio.Okio +import okio.buffer +import okio.sink import timber.log.Timber @Keep @@ -28,8 +29,10 @@ internal class HttpClient( private val client: OkHttpClient by lazy { if (BuildConfig.DEBUG) { - val interceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { message -> - Timber.d(message) + val interceptor = HttpLoggingInterceptor(object : HttpLoggingInterceptor.Logger { + override fun log(message: String) { + Timber.d(message) + } }).setLevel(HttpLoggingInterceptor.Level.BASIC) clientBuilder.addInterceptor(interceptor) @@ -62,7 +65,7 @@ internal class HttpClient( val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE response.body()?.let { body -> - val sink = Okio.buffer(Okio.sink(outputStream)) + val sink = outputStream.sink().buffer() sink.writeAll(body.source()) sink.close() } diff --git a/libnavigator/build.gradle b/libnavigator/build.gradle index b18bf79e77f..f9052ce79df 100644 --- a/libnavigator/build.gradle +++ b/libnavigator/build.gradle @@ -16,6 +16,7 @@ android { dependencies { api(project(':libnavigation-base')) + api(project(':liblogger')) implementation project(':libnavigation-util') // Navigator @@ -27,6 +28,13 @@ dependencies { //ktlint ktlint dependenciesList.ktlint + //networks + implementation dependenciesList.okhttp + implementation dependenciesList.okhttpInterceptor + + // I/O + implementation dependenciesList.okio + implementation dependenciesList.kotlinStdLib implementation dependenciesList.supportAnnotation diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index 4be5da1f8c1..349d402017c 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -5,6 +5,7 @@ import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.trip.model.RouteProgress import com.mapbox.navigation.navigator.model.RouterConfig +import com.mapbox.navigation.navigator.network.HttpClient import com.mapbox.navigator.FixLocation import com.mapbox.navigator.NavigationStatus import com.mapbox.navigator.Navigator @@ -20,6 +21,7 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { } private val navigator: Navigator = Navigator() + private const val userAgent = "MapboxNavigationNative" override fun configureRouter(routerConfig: RouterConfig) { navigator.configureRouter( @@ -33,11 +35,11 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { it.host, it.version, it.token, - it.userAgent + userAgent, + "" ) }), - - ) + HttpClient(userAgent) ) } diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt new file mode 100644 index 00000000000..353309c77f7 --- /dev/null +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt @@ -0,0 +1,81 @@ +package com.mapbox.navigation.navigator.network + +import androidx.annotation.Keep +import com.mapbox.navigation.base.logger.model.Message +import com.mapbox.navigation.logger.MapboxLogger +import com.mapbox.navigator.BuildConfig +import com.mapbox.navigator.HttpCode +import com.mapbox.navigator.HttpInterface +import com.mapbox.navigator.HttpResponse +import java.io.ByteArrayOutputStream +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.logging.HttpLoggingInterceptor +import okio.buffer +import okio.sink + +@Keep +internal class HttpClient( + private val userAgent: String, + private val acceptGzipEncoding: Boolean = false, + private val clientBuilder: OkHttpClient.Builder = OkHttpClient.Builder() +) : HttpInterface() { + + companion object { + private const val ERROR_EMPTY_USER_AGENT = "Empty UserAgent is not allowed" + private const val HEADER_USER_AGENT = "User-Agent" + private const val HEADER_ENCODING = "Accept-Encoding" + private const val GZIP = "gzip" + } + + private val client: OkHttpClient by lazy { + if (BuildConfig.DEBUG) { + val interceptor = HttpLoggingInterceptor(object : HttpLoggingInterceptor.Logger { + override fun log(message: String) { + MapboxLogger.d(Message(message)) + } + }).setLevel(HttpLoggingInterceptor.Level.BASIC) + + clientBuilder.addInterceptor(interceptor) + } + + clientBuilder.build() + } + + init { + check(userAgent.isNotEmpty()) { + ERROR_EMPTY_USER_AGENT + } + } + + override fun isGzipped(): Boolean { + return acceptGzipEncoding + } + + override fun get(url: String): HttpResponse { + val requestBuilder = Request.Builder() + .addHeader(HEADER_USER_AGENT, userAgent) + .url(url) + + if (acceptGzipEncoding) { + requestBuilder.addHeader(HEADER_ENCODING, GZIP) + } + + client.newCall(requestBuilder.build()).execute().use { response -> + val outputStream = ByteArrayOutputStream() + val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE + + response.body()?.let { body -> + val sink = outputStream.sink().buffer() + sink.writeAll(body.source()) + sink.close() + } + + // FIXME core should receive Array, not List. It is List now because of bindgen + val bytes = outputStream.toByteArray().toList() + outputStream.close() + + return HttpResponse(bytes, result) + } + } +} From d03aa2afbcda788e828e6a7b578ae8193f3ef274 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 24 Dec 2019 15:59:18 +0300 Subject: [PATCH 62/75] exclude `OnboardRouterActivityJava.java` from check style --- gradle/checkstyle.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/checkstyle.gradle b/gradle/checkstyle.gradle index 88064fa982a..e9229d8a4d6 100644 --- a/gradle/checkstyle.gradle +++ b/gradle/checkstyle.gradle @@ -14,6 +14,7 @@ task checkstyle(type: Checkstyle) { exclude '**/*FeatureOverviewActivity.java' exclude '**/*ManeuversStyleKit.java' exclude '**/*LanesStyleKit.java' + exclude '**/*OnboardRouterActivityJava.java' classpath = files() ignoreFailures = false From e6070540eec08ac2677a47cea78b861d29a3c5a8 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 24 Dec 2019 17:38:48 +0300 Subject: [PATCH 63/75] fix pr issue --- .../navigation/testapp/activity/OnboardRouterActivityKt.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt index 9c392a57f62..f8d48a5c43c 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt @@ -1,7 +1,5 @@ package com.mapbox.services.android.navigation.testapp.activity -// import com.mapbox.navigation.base.route.DirectionsSession -// import com.mapbox.navigation.directions.session.MapboxDirectionsSession import android.os.Bundle import android.os.Environment import android.widget.Toast @@ -30,7 +28,7 @@ import kotlinx.android.synthetic.main.activity_mock_navigation.* class OnboardRouterActivityKt : AppCompatActivity(), OnMapReadyCallback, - MapboxMap.OnMapClickListener + MapboxMap.OnMapClickListener { // DirectionsSession.RouteObserver { private lateinit var onboardRouter: Router From 9f4f033bcd9ddc6e10a1979c2e867e3c8937c1a3 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Tue, 24 Dec 2019 18:05:06 +0300 Subject: [PATCH 64/75] fix rebase issues --- .../navigation/testapp/activity/OnboardRouterActivityKt.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt index f8d48a5c43c..3f6cbb76fe6 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt @@ -196,8 +196,8 @@ class OnboardRouterActivityKt : AppCompatActivity(), mapView.onDestroy() } - override fun onSaveInstanceState(outState: Bundle?) { + override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState?.let { mapView.onSaveInstanceState(it) } + mapView.onSaveInstanceState(outState) } } From e8f5a4412dea7d74381e999f66df17d10294a335 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 27 Dec 2019 16:44:59 +0300 Subject: [PATCH 65/75] rebase fixes --- app/build.gradle | 2 +- .../services/android/navigation/testapp/MainActivity.java | 2 ++ libandroid-navigation/build.gradle | 4 ++++ .../v5/internal/navigation/InitialGpsEventFactory.kt | 2 +- .../navigation/v5/navigation/metrics/MapboxMetricsReporter.kt | 1 - .../android/navigation/v5/utils/extensions/Mappers.kt | 1 - 6 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 86f9438266b..6e86c711422 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -87,8 +87,8 @@ dependencies { implementation project(':libdirections-offboard') implementation project(':libdirections-onboard') implementation project(':libnavigation-util') - implementation project(':libtrip-service') implementation project(':liblogger') + implementation project(':examples') //ktlint ktlint dependenciesList.ktlint diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java index c0c10196c44..6d51cc79546 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java @@ -19,6 +19,8 @@ import com.mapbox.android.core.permissions.PermissionsListener; import com.mapbox.android.core.permissions.PermissionsManager; import com.mapbox.services.android.navigation.testapp.activity.MockNavigationActivity; +import com.mapbox.services.android.navigation.testapp.activity.OnboardRouterActivityJava; +import com.mapbox.services.android.navigation.testapp.activity.OnboardRouterActivityKt; import com.mapbox.services.android.navigation.testapp.activity.RerouteActivity; import com.mapbox.services.android.navigation.testapp.activity.navigationui.ComponentNavigationActivity; import com.mapbox.services.android.navigation.testapp.activity.navigationui.DualNavigationMapActivity; diff --git a/libandroid-navigation/build.gradle b/libandroid-navigation/build.gradle index f3dbef3d59b..e15b021d8f2 100644 --- a/libandroid-navigation/build.gradle +++ b/libandroid-navigation/build.gradle @@ -56,6 +56,10 @@ android { } dependencies { + api project(':libnavigation-base') + implementation project(':libnavigator') + implementation project(':libnavigation-util') + api dependenciesList.mapboxSdkServices api dependenciesList.mapboxSdkTurf api dependenciesList.mapboxCore diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactory.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactory.kt index 53df2b73ba3..bdd559d5c8e 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactory.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactory.kt @@ -1,6 +1,6 @@ package com.mapbox.services.android.navigation.v5.internal.navigation -import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.MetricsReporter +import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricsReporter import com.mapbox.services.android.navigation.v5.utils.time.ElapsedTime internal class InitialGpsEventFactory @JvmOverloads constructor( diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index 1ae4e2b115f..a0aea60c434 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -3,7 +3,6 @@ package com.mapbox.services.android.navigation.v5.navigation.metrics import android.content.Context import com.google.gson.Gson import com.mapbox.android.telemetry.MapboxTelemetry -import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.MetricsReporter import com.mapbox.services.android.navigation.v5.internal.utils.extensions.toTelemetryEvent import com.mapbox.services.android.navigation.v5.utils.thread.WorkThreadHandler diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt index 809e4bf3b53..3570b2abb2f 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt @@ -30,7 +30,6 @@ import com.mapbox.navigation.base.route.model.StepIntersectionNavigation import com.mapbox.navigation.base.route.model.StepManeuverNavigation import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation -import com.mapbox.services.android.navigation.v5.navigation.WalkingOptionsNavigation fun WalkingOptionsNavigation.mapToWalkingOptions(): WalkingOptions = WalkingOptions .builder() From f944279791fb89c2ac659a1dd502d7b1e23be426 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 27 Dec 2019 18:22:36 +0300 Subject: [PATCH 66/75] rebase fix --- app/build.gradle | 1 - .../android/navigation/testapp/MainActivity.java | 15 --------------- .../navigation/InitialGpsEventFactoryTest.java | 2 +- .../navigation/v5/navigation/OfflineRouteTest.kt | 4 ++-- 4 files changed, 3 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6e86c711422..ceb90d160ea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,7 +88,6 @@ dependencies { implementation project(':libdirections-onboard') implementation project(':libnavigation-util') implementation project(':liblogger') - implementation project(':examples') //ktlint ktlint dependenciesList.ktlint diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java index 6d51cc79546..faaea118cca 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java @@ -67,21 +67,6 @@ protected void onCreate(Bundle savedInstanceState) { getString(R.string.description_mock_navigation), MockNavigationActivity.class ), - new SampleItem( - getString(R.string.title_offboard_router_kotlin), - getString(R.string.description_offboard_router_kotlin), - OffboardRouterActivityKt.class - ), - new SampleItem( - getString(R.string.title_offboard_router_java), - getString(R.string.description_offboard_router_java), - OffboardRouterActivityJava.class - ), - new SampleItem( - getString(R.string.title_trip_service_kotlin), - getString(R.string.description_trip_service_kotlin), - TripServiceActivityKt.class - ), new SampleItem( getString(R.string.title_onboard_router_kotlin), getString(R.string.description_onboard_router_kotlin), diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactoryTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactoryTest.java index 66e3332d391..2af41a53e22 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactoryTest.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/internal/navigation/InitialGpsEventFactoryTest.java @@ -1,6 +1,6 @@ package com.mapbox.services.android.navigation.v5.internal.navigation; -import com.mapbox.services.android.navigation.v5.internal.navigation.metrics.MetricsReporter; +import com.mapbox.services.android.navigation.v5.navigation.metrics.MetricsReporter; import com.mapbox.services.android.navigation.v5.utils.time.ElapsedTime; import org.junit.Test; diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt index dd609876a02..95bfbfea732 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt @@ -3,7 +3,7 @@ package com.mapbox.services.android.navigation.v5.navigation import android.content.Context import com.mapbox.api.directions.v5.DirectionsCriteria import com.mapbox.geojson.Point -import com.mapbox.services.android.navigation.v5.utils.extensions.inferDeviceLocale +import com.mapbox.navigation.utils.extensions.inferDeviceLocale import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic @@ -21,7 +21,7 @@ class OfflineRouteTest { @BeforeClass @JvmStatic fun initialize() { - mockkStatic("com.mapbox.services.android.navigation.v5.utils.extensions.ContextEx") + mockkStatic("com.mapbox.navigation.utils.extensions.ContextEx") } } From be05ab066fdb4c55f155a04dccab043b6d82dc69 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 8 Jan 2020 15:42:33 +0300 Subject: [PATCH 67/75] rebase fix --- app/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ceb90d160ea..9a02bb16198 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,7 +83,6 @@ android { } dependencies { - implementation project(':libnavigation-core') implementation project(':libdirections-offboard') implementation project(':libdirections-onboard') implementation project(':libnavigation-util') From 4220d033d104aad7ea5309f1c2ab8cb8b300a085 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Wed, 8 Jan 2020 18:44:28 +0300 Subject: [PATCH 68/75] fix pr issues: - moved OnBoard's Activities to `examples` module; - removed new modules dependencies from legacy ones --- app/src/main/AndroidManifest.xml | 32 ------------------- .../navigation/testapp/MainActivity.java | 12 ------- examples/build.gradle | 1 + examples/src/main/AndroidManifest.xml | 16 ++++++++++ .../activity/OnboardRouterActivityJava.java | 21 ++++-------- .../activity/OnboardRouterActivityKt.kt | 6 ++-- examples/src/main/res/values/strings.xml | 6 ++++ libandroid-navigation-ui/build.gradle | 5 ++- libandroid-navigation/build.gradle | 1 - .../v5/navigation/NavigationRoute.kt | 2 +- .../route/onboard/MapboxOnboardRouter.kt | 4 +-- 11 files changed, 37 insertions(+), 69 deletions(-) rename {app/src/main/java/com/mapbox/services/android/navigation/testapp => examples/src/main/java/com/mapbox/navigation/examples}/activity/OnboardRouterActivityJava.java (91%) rename {app/src/main/java/com/mapbox/services/android/navigation/testapp => examples/src/main/java/com/mapbox/navigation/examples}/activity/OnboardRouterActivityKt.kt (97%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b225f797a5e..d56bbecf36b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,38 +45,6 @@ android:value=".MainActivity"/> - - - - - - - - - - - - - - - - diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java index faaea118cca..1553d962805 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java +++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java @@ -19,8 +19,6 @@ import com.mapbox.android.core.permissions.PermissionsListener; import com.mapbox.android.core.permissions.PermissionsManager; import com.mapbox.services.android.navigation.testapp.activity.MockNavigationActivity; -import com.mapbox.services.android.navigation.testapp.activity.OnboardRouterActivityJava; -import com.mapbox.services.android.navigation.testapp.activity.OnboardRouterActivityKt; import com.mapbox.services.android.navigation.testapp.activity.RerouteActivity; import com.mapbox.services.android.navigation.testapp.activity.navigationui.ComponentNavigationActivity; import com.mapbox.services.android.navigation.testapp.activity.navigationui.DualNavigationMapActivity; @@ -67,16 +65,6 @@ protected void onCreate(Bundle savedInstanceState) { getString(R.string.description_mock_navigation), MockNavigationActivity.class ), - new SampleItem( - getString(R.string.title_onboard_router_kotlin), - getString(R.string.description_onboard_router_kotlin), - OnboardRouterActivityKt.class - ), - new SampleItem( - getString(R.string.title_onboard_router_java), - getString(R.string.description_onboard_router_java), - OnboardRouterActivityJava.class - ), new SampleItem( getString(R.string.title_reroute), getString(R.string.description_reroute), diff --git a/examples/build.gradle b/examples/build.gradle index f2c2f986245..2c0ee7e2fec 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -84,6 +84,7 @@ android { dependencies { implementation project(':libdirections-offboard') + implementation project(':libdirections-onboard') implementation project(':libtrip-notification') implementation project(':libnavigation-util') implementation project(':liblogger') diff --git a/examples/src/main/AndroidManifest.xml b/examples/src/main/AndroidManifest.xml index 45bdf80fe04..7dd37100ad2 100644 --- a/examples/src/main/AndroidManifest.xml +++ b/examples/src/main/AndroidManifest.xml @@ -48,6 +48,22 @@ android:value=".MainActivity"/> + + + + + + + + diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java similarity index 91% rename from app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java rename to examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java index 4156f515297..31f013bbe84 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityJava.java +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java @@ -1,4 +1,4 @@ -package com.mapbox.services.android.navigation.testapp.activity; +package com.mapbox.navigation.examples.activity; import android.os.Bundle; import android.os.Environment; @@ -18,29 +18,20 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; -//import com.mapbox.navigation.base.route.DirectionsSession; import com.mapbox.navigation.base.route.Router; -import com.mapbox.navigation.base.route.model.Route; -import com.mapbox.navigation.base.route.model.RouteOptionsNavigation; -//import com.mapbox.navigation.directions.session.MapboxDirectionsSession; +import com.mapbox.navigation.examples.R; import com.mapbox.navigation.route.onboard.MapboxOnboardRouter; import com.mapbox.navigation.route.onboard.model.Config; -import com.mapbox.services.android.navigation.testapp.R; -import com.mapbox.services.android.navigation.testapp.utils.Utils; import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; -import com.mapbox.services.android.navigation.v5.utils.extensions.Mappers; -import com.mapbox.turf.TurfConstants; -import com.mapbox.turf.TurfMeasurement; - -import org.jetbrains.annotations.NotNull; import java.io.File; -import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; -import timber.log.Timber; + +//import com.mapbox.navigation.base.route.DirectionsSession; +//import com.mapbox.navigation.directions.session.MapboxDirectionsSession; public class OnboardRouterActivityJava extends AppCompatActivity @@ -54,7 +45,7 @@ public class OnboardRouterActivityJava private DirectionsRoute route; private NavigationMapRoute navigationMapRoute; -// private DirectionsSession directionsSession; + // private DirectionsSession directionsSession; private Point origin; private Point destination; private Point waypoint; diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt similarity index 97% rename from app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt rename to examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt index 3f6cbb76fe6..7956dbc54c2 100644 --- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/OnboardRouterActivityKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt @@ -1,4 +1,4 @@ -package com.mapbox.services.android.navigation.testapp.activity +package com.mapbox.navigation.examples.activity import android.os.Bundle import android.os.Environment @@ -15,11 +15,11 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback import com.mapbox.mapboxsdk.maps.Style import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.base.route.model.RouteOptionsNavigation +import com.mapbox.navigation.examples.R +import com.mapbox.navigation.examples.utils.Utils import com.mapbox.navigation.route.onboard.MapboxOnboardRouter import com.mapbox.navigation.route.onboard.model.Config import com.mapbox.navigation.utils.extensions.ifNonNull -import com.mapbox.services.android.navigation.testapp.R -import com.mapbox.services.android.navigation.testapp.utils.Utils import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute import com.mapbox.turf.TurfConstants import com.mapbox.turf.TurfMeasurement diff --git a/examples/src/main/res/values/strings.xml b/examples/src/main/res/values/strings.xml index 24ecb3826f2..3f714330c48 100644 --- a/examples/src/main/res/values/strings.xml +++ b/examples/src/main/res/values/strings.xml @@ -10,6 +10,12 @@ Offboard Router Java Shows routes using offboard routing api in Java code. + Onboard Router Kotlin + Shows routes using onboard routing api in Kotlin code. + + Onboard Router Java + Shows routes using onboard routing api in Java code. + Trip Service Kotlin Shows how to use the Service to push notifications in Kotlin code. diff --git a/libandroid-navigation-ui/build.gradle b/libandroid-navigation-ui/build.gradle index 3490baf7a0a..86bf108ce5a 100644 --- a/libandroid-navigation-ui/build.gradle +++ b/libandroid-navigation-ui/build.gradle @@ -58,9 +58,8 @@ dependencies { // Navigation SDK api project(':libandroid-navigation') - implementation project(':libnavigation-util') - implementation project(':liblogger') - implementation project(':libnavigation-base') + implementation project(':liblogger') + implementation project(':libnavigation-base') // Mapbox Maps SDK implementation dependenciesList.mapboxMapSdk diff --git a/libandroid-navigation/build.gradle b/libandroid-navigation/build.gradle index e15b021d8f2..ac32207a64a 100644 --- a/libandroid-navigation/build.gradle +++ b/libandroid-navigation/build.gradle @@ -58,7 +58,6 @@ android { dependencies { api project(':libnavigation-base') implementation project(':libnavigator') - implementation project(':libnavigation-util') api dependenciesList.mapboxSdkServices api dependenciesList.mapboxSdkTurf diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt index 5f8e85345a6..54bea09fdc6 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt @@ -10,8 +10,8 @@ import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.core.exceptions.ServicesException import com.mapbox.core.utils.TextUtils import com.mapbox.geojson.Point -import com.mapbox.navigation.utils.extensions.inferDeviceLocale import com.mapbox.services.android.navigation.v5.utils.extensions.getUnitTypeForLocale +import com.mapbox.services.android.navigation.v5.utils.extensions.inferDeviceLocale import java.util.Locale import okhttp3.EventListener import okhttp3.Interceptor diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index fb035b8c73d..21331c8f3ee 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -19,7 +19,7 @@ import java.io.File class MapboxOnboardRouter : Router { companion object { - private const val TILE_PATH_NAME = "tiles" + private const val TILES_DIR_NAME = "tiles" } private val navigatorNative: MapboxNativeNavigator @@ -32,7 +32,7 @@ class MapboxOnboardRouter : Router { * @param config offline config */ constructor(config: Config) { - val tileDir = File(config.tilePath, TILE_PATH_NAME) + val tileDir = File(config.tilePath, TILES_DIR_NAME) if (!tileDir.exists()) { tileDir.mkdirs() } From 551be468cee59eac14e2b5111690a6707c186dd4 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Thu, 9 Jan 2020 15:17:21 +0300 Subject: [PATCH 69/75] Cleanup test and Test Onboard Activities --- .../navigation/examples/MainActivity.java | 12 +++ .../activity/OnboardRouterActivityJava.java | 84 ++++++++----------- .../activity/OnboardRouterActivityKt.kt | 45 ++++------ .../v5/navigation/OfflineRouteTest.kt | 4 +- 4 files changed, 66 insertions(+), 79 deletions(-) diff --git a/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.java b/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.java index 076cde6750f..e09dae8e0da 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.java +++ b/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.java @@ -22,6 +22,8 @@ import com.mapbox.navigation.examples.activity.MockNavigationActivity; import com.mapbox.navigation.examples.activity.OffboardRouterActivityJava; import com.mapbox.navigation.examples.activity.OffboardRouterActivityKt; +import com.mapbox.navigation.examples.activity.OnboardRouterActivityJava; +import com.mapbox.navigation.examples.activity.OnboardRouterActivityKt; import java.util.ArrayList; import java.util.Arrays; @@ -67,6 +69,16 @@ protected void onCreate(Bundle savedInstanceState) { getString(R.string.title_offboard_router_java), getString(R.string.description_offboard_router_java), OffboardRouterActivityJava.class + ), + new SampleItem( + getString(R.string.title_onboard_router_kotlin), + getString(R.string.description_onboard_router_kotlin), + OnboardRouterActivityKt.class + ), + new SampleItem( + getString(R.string.title_onboard_router_java), + getString(R.string.description_onboard_router_java), + OnboardRouterActivityJava.class ) )); diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java index 31f013bbe84..559e68c3def 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java @@ -19,26 +19,27 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.Style; import com.mapbox.navigation.base.route.Router; +import com.mapbox.navigation.base.route.model.Route; +import com.mapbox.navigation.base.route.model.RouteOptionsNavigation; import com.mapbox.navigation.examples.R; +import com.mapbox.navigation.examples.utils.Utils; +import com.mapbox.navigation.examples.utils.extensions.Mappers; import com.mapbox.navigation.route.onboard.MapboxOnboardRouter; import com.mapbox.navigation.route.onboard.model.Config; import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute; +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import timber.log.Timber; -//import com.mapbox.navigation.base.route.DirectionsSession; -//import com.mapbox.navigation.directions.session.MapboxDirectionsSession; - -public class OnboardRouterActivityJava - extends AppCompatActivity - implements OnMapReadyCallback, - MapboxMap.OnMapClickListener -// DirectionsSession.RouteObserver -{ +public class OnboardRouterActivityJava extends AppCompatActivity implements OnMapReadyCallback, + MapboxMap.OnMapClickListener { private Router onboardRouter; private MapboxMap mapboxMap; @@ -119,22 +120,27 @@ private void clearMap() { } private void findRoute() { -// directionsSession = new MapboxDirectionsSession( -// onboardRouter, -// this -// ); -// if (origin != null && destination != null) { -// if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { -// RouteOptionsNavigation.Builder optionsBuilder = new RouteOptionsNavigation.Builder() -// .accessToken(Utils.getMapboxAccessToken(this)) -// .origin(origin) -// .destination(destination); -// if (waypoint != null) { -// optionsBuilder.addWaypoint(waypoint); -// } -// directionsSession.requestRoutes(optionsBuilder.build()); -// } -// } + RouteOptionsNavigation.Builder optionsBuilder = new RouteOptionsNavigation.Builder() + .accessToken(Utils.getMapboxAccessToken(this)) + .origin(origin) + .destination(destination); + if (waypoint != null) { + optionsBuilder.addWaypoint(waypoint); + } + onboardRouter.getRoute(optionsBuilder.build(), new Router.Callback() { + @Override + public void onResponse(@NotNull List routes) { + if (!routes.isEmpty()) { + route = Mappers.mapToDirectionsRoute(routes.get(0)); + navigationMapRoute.addRoute(route); + } + } + + @Override + public void onFailure(@NotNull Throwable throwable) { + Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()"); + } + }); } @Override @@ -154,27 +160,6 @@ public boolean onMapClick(@NonNull LatLng point) { return false; } - /* - * DirectionSessions.RouteObserver - */ -// @Override -// public void onRoutesChanged(@NotNull List routes) { -// if (!routes.isEmpty()) { -// route = Mappers.mapToDirectionsRoute(routes.get(0)); -// navigationMapRoute.addRoute(route); -// } -// } - -// @Override -// public void onRoutesRequested() { -// Timber.d("onRoutesRequested: navigation.getRoute()"); -// } -// -// @Override -// public void onRoutesRequestFailure(@NotNull Throwable throwable) { -// Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()"); -// } - /* * Activity lifecycle methods */ @@ -212,9 +197,10 @@ public void onLowMemory() { @Override protected void onDestroy() { super.onDestroy(); -// if (directionsSession != null) { -// directionsSession.cancel(); -// } + if (onboardRouter != null) { + onboardRouter.cancel(); + onboardRouter = null; + } if (mapboxMap != null) { mapboxMap.removeOnMapClickListener(this); mapView.onDestroy(); diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt index 7956dbc54c2..8ee6dbe8d6c 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt @@ -14,9 +14,11 @@ import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.OnMapReadyCallback import com.mapbox.mapboxsdk.maps.Style import com.mapbox.navigation.base.route.Router +import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.route.model.RouteOptionsNavigation import com.mapbox.navigation.examples.R import com.mapbox.navigation.examples.utils.Utils +import com.mapbox.navigation.examples.utils.extensions.mapToDirectionsRoute import com.mapbox.navigation.route.onboard.MapboxOnboardRouter import com.mapbox.navigation.route.onboard.model.Config import com.mapbox.navigation.utils.extensions.ifNonNull @@ -25,18 +27,16 @@ import com.mapbox.turf.TurfConstants import com.mapbox.turf.TurfMeasurement import java.io.File import kotlinx.android.synthetic.main.activity_mock_navigation.* +import timber.log.Timber -class OnboardRouterActivityKt : AppCompatActivity(), - OnMapReadyCallback, +class OnboardRouterActivityKt : AppCompatActivity(), OnMapReadyCallback, MapboxMap.OnMapClickListener { -// DirectionsSession.RouteObserver { private lateinit var onboardRouter: Router private lateinit var mapboxMap: MapboxMap private var route: DirectionsRoute? = null private lateinit var navigationMapRoute: NavigationMapRoute - // private lateinit var directionsSession: DirectionsSession private var origin: Point? = null private var destination: Point? = null private var waypoint: Point? = null @@ -99,10 +99,6 @@ class OnboardRouterActivityKt : AppCompatActivity(), } private fun findRoute() { - // directionsSession = MapboxDirectionsSession( - // onboardRouter, - // this - // ) ifNonNull(origin, destination) { origin, destination -> if (TurfMeasurement.distance(origin, destination, TurfConstants.UNIT_METERS) > 50) { @@ -113,7 +109,18 @@ class OnboardRouterActivityKt : AppCompatActivity(), .destination(destination) waypoint?.let { optionsBuilder.addWaypoint(it) } - // directionsSession.requestRoutes(optionsBuilder.build()) + onboardRouter.getRoute(optionsBuilder.build(), object : Router.Callback { + override fun onResponse(routes: List) { + if (routes.isNotEmpty()) { + route = routes[0].mapToDirectionsRoute() + navigationMapRoute.addRoute(route) + } + } + + override fun onFailure(throwable: Throwable) { + Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()") + } + }) } } } @@ -143,24 +150,6 @@ class OnboardRouterActivityKt : AppCompatActivity(), return false } - /* - * DirectionSessions.RouteObserver - */ - // override fun onRoutesChanged(routes: List) { - // if (routes.isNotEmpty()) { - // route = routes[0].mapToDirectionsRoute() - // navigationMapRoute.addRoute(route) - // } - // } - - // override fun onRoutesRequested() { - // Timber.d("onRoutesRequested: navigation.getRoute()") - // } - // - // override fun onRoutesRequestFailure(throwable: Throwable) { - // Timber.e(throwable, "onRoutesRequestFailure: navigation.getRoute()") - // } - /* * Activity lifecycle methods */ @@ -191,7 +180,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), override fun onDestroy() { super.onDestroy() - // directionsSession.cancel() + onboardRouter.cancel() mapboxMap.removeOnMapClickListener(this) mapView.onDestroy() } diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt index 95bfbfea732..dd609876a02 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/OfflineRouteTest.kt @@ -3,7 +3,7 @@ package com.mapbox.services.android.navigation.v5.navigation import android.content.Context import com.mapbox.api.directions.v5.DirectionsCriteria import com.mapbox.geojson.Point -import com.mapbox.navigation.utils.extensions.inferDeviceLocale +import com.mapbox.services.android.navigation.v5.utils.extensions.inferDeviceLocale import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic @@ -21,7 +21,7 @@ class OfflineRouteTest { @BeforeClass @JvmStatic fun initialize() { - mockkStatic("com.mapbox.navigation.utils.extensions.ContextEx") + mockkStatic("com.mapbox.services.android.navigation.v5.utils.extensions.ContextEx") } } From a4117b35e1af8824ddbbd73aba7522fbede34942 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 10 Jan 2020 13:35:11 +0300 Subject: [PATCH 70/75] cleanup code; fix pr issues --- .../activity/OnboardRouterActivityJava.java | 3 +- .../activity/OnboardRouterActivityKt.kt | 2 +- gradle/checkstyle.gradle | 1 - gradle/dependencies.gradle | 6 +- .../router/NavigationRouteCallback.kt | 1 - .../router/NavigationRouteWaypoint.kt | 1 - .../MapboxOffboardRouterGenerationTest.kt | 1 - .../router/NavigationRouteCallbackTest.kt | 1 - libdirections-onboard/build.gradle | 2 +- .../route/onboard/MapboxOnboardRouter.kt | 8 +- .../navigation/route/onboard/OfflineRoute.kt | 10 +- .../onboard/task/OfflineRouteRetrievalTask.kt | 8 +- ...tionTest.kt => MapboxOnboardRouterTest.kt} | 7 +- .../route/onboard/OfflineRouteTest.kt | 113 ++++++++++++++++++ .../task/OfflineRouteRetrievalTaskTest.kt | 1 + .../onboard/task/RemoveTilesTaskTestTest.kt | 28 +++++ .../route/dto/RouteOptionsNavigationDto.kt | 2 +- .../route/model/RouteOptionsNavigation.kt | 10 +- libnavigator/build.gradle | 4 +- 19 files changed, 178 insertions(+), 31 deletions(-) delete mode 100644 libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt delete mode 100644 libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt delete mode 100644 libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt delete mode 100644 libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt rename libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/{MapboxOnboardRouterGenerationTest.kt => MapboxOnboardRouterTest.kt} (88%) create mode 100644 libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt create mode 100644 libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java index 559e68c3def..e5b32702a1e 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityJava.java @@ -46,7 +46,6 @@ public class OnboardRouterActivityJava extends AppCompatActivity implements OnMa private DirectionsRoute route; private NavigationMapRoute navigationMapRoute; - // private DirectionsSession directionsSession; private Point origin; private Point destination; private Point waypoint; @@ -79,7 +78,7 @@ private void setupRouter() { null // working with pre-fetched tiles only ); - onboardRouter = new MapboxOnboardRouter(config); + onboardRouter = new MapboxOnboardRouter(config, null); } diff --git a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt index 8ee6dbe8d6c..4867c2dd68c 100644 --- a/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt +++ b/examples/src/main/java/com/mapbox/navigation/examples/activity/OnboardRouterActivityKt.kt @@ -63,7 +63,7 @@ class OnboardRouterActivityKt : AppCompatActivity(), OnMapReadyCallback, null, null // working with pre-fetched tiles only ) - onboardRouter = MapboxOnboardRouter(config) + onboardRouter = MapboxOnboardRouter(config, null) } private fun newOrigin() { diff --git a/gradle/checkstyle.gradle b/gradle/checkstyle.gradle index e9229d8a4d6..88064fa982a 100644 --- a/gradle/checkstyle.gradle +++ b/gradle/checkstyle.gradle @@ -14,7 +14,6 @@ task checkstyle(type: Checkstyle) { exclude '**/*FeatureOverviewActivity.java' exclude '**/*ManeuversStyleKit.java' exclude '**/*LanesStyleKit.java' - exclude '**/*OnboardRouterActivityJava.java' classpath = files() ignoreFailures = false diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index d09fe215823..029919224a3 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -80,11 +80,11 @@ ext { ktlint : "com.pinterest:ktlint:${version.ktlint}", // network - okhttp : "com.squareup.okhttp3:okhttp:${version.okhttp}", - okhttpInterceptor : "com.squareup.okhttp3:logging-interceptor:${version.okhttp}", + okhttp : "com.squareup.okhttp3:okhttp:${version.okhttp}", + okhttpInterceptor : "com.squareup.okhttp3:logging-interceptor:${version.okhttp}", // I/O - okio : "com.squareup.okio:okio:${version.okio}", + okio : "com.squareup.okio:okio:${version.okio}", // AutoValue autoValue : "com.google.auto.value:auto-value:${version.autoValue}", diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt deleted file mode 100644 index 8b137891791..00000000000 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallback.kt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt deleted file mode 100644 index 8b137891791..00000000000 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationRouteWaypoint.kt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt deleted file mode 100644 index 8b137891791..00000000000 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterGenerationTest.kt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt deleted file mode 100644 index 8b137891791..00000000000 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/router/NavigationRouteCallbackTest.kt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/libdirections-onboard/build.gradle b/libdirections-onboard/build.gradle index 310b61e2212..849b1c91818 100644 --- a/libdirections-onboard/build.gradle +++ b/libdirections-onboard/build.gradle @@ -21,7 +21,6 @@ dependencies { api project(':libnavigation-base') implementation project(':libnavigator') - implementation project(':liblogger') implementation project(":libnavigation-util") //ktlint @@ -32,6 +31,7 @@ dependencies { testImplementation dependenciesList.mockk testImplementation dependenciesList.junit + testImplementation dependenciesList.robolectric } apply from: "${rootDir}/gradle/bintray-publish.gradle" \ No newline at end of file diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index 21331c8f3ee..f8eb53d39c1 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -2,6 +2,7 @@ package com.mapbox.navigation.route.onboard import com.mapbox.annotation.navigation.module.MapboxNavigationModule import com.mapbox.annotation.navigation.module.MapboxNavigationModuleType +import com.mapbox.navigation.base.logger.Logger import com.mapbox.navigation.base.route.RouteUrl import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.base.route.model.Route @@ -24,6 +25,7 @@ class MapboxOnboardRouter : Router { private val navigatorNative: MapboxNativeNavigator private val config: Config + private val logger: Logger? /** * Creates an offline router which uses the specified offline path for storing and retrieving @@ -31,7 +33,7 @@ class MapboxOnboardRouter : Router { * * @param config offline config */ - constructor(config: Config) { + constructor(config: Config, logger: Logger?) { val tileDir = File(config.tilePath, TILES_DIR_NAME) if (!tileDir.exists()) { tileDir.mkdirs() @@ -39,6 +41,7 @@ class MapboxOnboardRouter : Router { this.navigatorNative = MapboxNativeNavigatorImpl this.config = config + this.logger = logger MapboxNativeNavigatorImpl.configureRouter(config.mapToRouteConfig()) } @@ -49,6 +52,7 @@ class MapboxOnboardRouter : Router { ) { this.navigatorNative = navigator this.config = config + this.logger = null } override fun getRoute( @@ -70,7 +74,7 @@ class MapboxOnboardRouter : Router { ) ).build() - OfflineRouteRetrievalTask(navigatorNative, object : OnOfflineRouteFoundCallback { + OfflineRouteRetrievalTask(navigatorNative, logger, object : OnOfflineRouteFoundCallback { override fun onRouteFound(routes: List) { callback.onResponse(routes) } diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt index a2ec44b7661..e680caaf2c3 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/OfflineRoute.kt @@ -9,7 +9,7 @@ import com.mapbox.navigation.utils.extensions.ifNonNull * The [OfflineRoute] class wraps the [NavigationRoute] class with parameters which * could be set in order for an offline navigation session to successfully begin. */ -class OfflineRoute +internal class OfflineRoute private constructor( private val routeUrl: RouteUrl, bicycleType: OfflineCriteria.BicycleType?, @@ -80,13 +80,17 @@ private constructor( offlineUrlBuilder.appendQueryParamIfNonNull(CYCLEWAY_BIAS_QUERY_PARAMETER, cyclewayBias) offlineUrlBuilder.appendQueryParamIfNonNull(HILL_BIAS_QUERY_PARAMETER, hillBias) offlineUrlBuilder.appendQueryParamIfNonNull(FERRY_BIAS_QUERY_PARAMETER, ferryBias) - offlineUrlBuilder.appendQueryParamIfNonNull(ROUGH_SURFACE_BIAS_QUERY_PARAMETER, roughSurfaceBias) + offlineUrlBuilder.appendQueryParamIfNonNull( + ROUGH_SURFACE_BIAS_QUERY_PARAMETER, + roughSurfaceBias + ) offlineUrlBuilder.appendQueryParamIfNonNull(WAYPOINT_TYPES_QUERY_PARAMETER, waypointTypes) return offlineUrlBuilder.build().toString() } - private fun Uri.Builder.appendQueryParamIfNonNull(key: String, value: Float?): Uri.Builder = appendQueryParamIfNonNull(key, value?.toString()) + private fun Uri.Builder.appendQueryParamIfNonNull(key: String, value: Float?): Uri.Builder = + appendQueryParamIfNonNull(key, value?.toString()) private fun Uri.Builder.appendQueryParamIfNonNull(key: String, value: String?): Uri.Builder = ifNonNull(value) { diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt index f4fb4964756..18482579a4f 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTask.kt @@ -2,12 +2,12 @@ package com.mapbox.navigation.route.onboard.task import android.os.AsyncTask import com.google.gson.Gson +import com.mapbox.navigation.base.logger.Logger import com.mapbox.navigation.base.logger.model.Message import com.mapbox.navigation.base.logger.model.Tag import com.mapbox.navigation.base.route.dto.RouteResponseDto import com.mapbox.navigation.base.route.dto.mapToModel import com.mapbox.navigation.base.route.model.Route -import com.mapbox.navigation.logger.MapboxLogger import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.route.onboard.OnOfflineRouteFoundCallback import com.mapbox.navigation.route.onboard.model.OfflineError @@ -16,13 +16,13 @@ import com.mapbox.navigator.RouterResult internal class OfflineRouteRetrievalTask( private val navigator: MapboxNativeNavigator, + private val logger: Logger?, private val callback: OnOfflineRouteFoundCallback ) : AsyncTask>() { @Volatile private lateinit var routerResult: RouterResult - private val logger = MapboxLogger private val gson = Gson() // For testing only @@ -30,7 +30,7 @@ internal class OfflineRouteRetrievalTask( navigator: MapboxNativeNavigator, callback: OnOfflineRouteFoundCallback, routerResult: RouterResult - ) : this(navigator, callback) { + ) : this(navigator, null, callback) { this.routerResult = routerResult } @@ -60,7 +60,7 @@ internal class OfflineRouteRetrievalTask( val errorMessage = "Error occurred fetching offline route: $error - Code: $errorCode" - logger.e(Tag("OfflineRouteRetrievalTask"), Message(errorMessage)) + logger?.e(Tag("OfflineRouteRetrievalTask"), Message(errorMessage)) return errorMessage } } diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt similarity index 88% rename from libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt rename to libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt index 37f92a9ed9a..015a57dff5a 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterGenerationTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt @@ -2,13 +2,14 @@ package com.mapbox.navigation.route.onboard import com.mapbox.navigation.navigator.MapboxNativeNavigator import com.mapbox.navigation.route.onboard.model.Config +import io.mockk.every import io.mockk.mockk +import io.mockk.slot import org.junit.Assert import org.junit.Before import org.junit.Test -class MapboxOnboardRouterGenerationTest { - +class MapboxOnboardRouterTest { private lateinit var onboardRouter: MapboxOnboardRouter private val navigator: MapboxNativeNavigator = mockk() private val tilePath = "tiles" @@ -22,4 +23,4 @@ class MapboxOnboardRouterGenerationTest { fun generationSanityTest() { Assert.assertNotNull(onboardRouter) } -} +} \ No newline at end of file diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt new file mode 100644 index 00000000000..c30fc676cf4 --- /dev/null +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt @@ -0,0 +1,113 @@ +package com.mapbox.navigation.route.onboard + +import com.mapbox.geojson.Point +import com.mapbox.navigation.base.route.RouteUrl +import io.mockk.mockkStatic +import org.junit.Assert.assertTrue +import org.junit.BeforeClass +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.io.UnsupportedEncodingException +import java.net.URLDecoder + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class OfflineRouteTest { + + @Test + fun addBicycleTypeIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val offlineRoute = OfflineRoute.builder(routeUrl) + .bicycleType(OfflineCriteria.BicycleType.ROAD).build() + + val offlineUrl = offlineRoute.buildUrl() + + assertTrue(offlineUrl.contains("bicycle_type=Road")) + } + + @Test + fun addCyclingSpeedIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val offlineRoute = OfflineRoute.builder(routeUrl) + .cyclingSpeed(10.0f).build() + + val offlineUrl = offlineRoute.buildUrl() + + assertTrue(offlineUrl.contains("cycling_speed=10.0")) + } + + @Test + fun addCyclewayBiasIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val offlineRoute = OfflineRoute.builder(routeUrl) + .cyclewayBias(0.0f).build() + + val offlineUrl = offlineRoute.buildUrl() + + assertTrue(offlineUrl.contains("cycleway_bias=0.0")) + } + + @Test + fun addHillBiasIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val offlineRoute = OfflineRoute.builder(routeUrl) + .hillBias(0.0f).build() + + val offlineUrl = offlineRoute.buildUrl() + + assertTrue(offlineUrl.contains("hill_bias=0.0")) + } + + @Test + fun addFerryBiasIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val offlineRoute = OfflineRoute.builder(routeUrl) + .ferryBias(0.0f).build() + + val offlineUrl = offlineRoute.buildUrl() + + assertTrue(offlineUrl.contains("ferry_bias=0.0")) + } + + @Test + fun addRoughSurfaceBiasIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val offlineRoute = OfflineRoute.builder(routeUrl) + .roughSurfaceBias(0.0f).build() + + val offlineUrl = offlineRoute.buildUrl() + + assertTrue(offlineUrl.contains("rough_surface_bias=0.0")) + } + + @Test + @Throws(UnsupportedEncodingException::class) + fun addWaypointTypesIncludedInRequest() { + val routeUrl = provideOnlineRouteBuilder() + val waypointTypes = listOf( + OfflineCriteria.WaypointType.BREAK, + OfflineCriteria.WaypointType.THROUGH, + null, + OfflineCriteria.WaypointType.BREAK + ) + val offlineRoute = OfflineRoute.builder(routeUrl) + .waypointTypes(waypointTypes).build() + val offlineUrl = offlineRoute.buildUrl() + + val offlineUrlDecoded = URLDecoder.decode(offlineUrl, "UTF-8") + + assertTrue(offlineUrlDecoded.contains("break;through;;break")) + } + + private fun provideOnlineRouteBuilder(): RouteUrl { + return RouteUrl( + accessToken = "pk.XXX", + profile = RouteUrl.PROFILE_CYCLING, + orgin = Point.fromLngLat(1.0, 2.0), + waypoints = listOf(Point.fromLngLat(3.0, 2.0)), + destination = Point.fromLngLat(1.0, 5.0) + ) + } +} diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt index d6eee9004bb..5dec5fd28e3 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/OfflineRouteRetrievalTaskTest.kt @@ -62,6 +62,7 @@ class OfflineRouteRetrievalTaskTest { val mockedCallback = mockk(relaxed = true) val theOfflineRouteRetrievalTask = OfflineRouteRetrievalTask( mockedNavigator, + null, mockedCallback ) val routes = listOf(mockk()) diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt new file mode 100644 index 00000000000..02c1760f12d --- /dev/null +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt @@ -0,0 +1,28 @@ +package com.mapbox.navigation.route.onboard.task + +import com.mapbox.geojson.Point +import com.mapbox.navigation.route.onboard.OnOfflineTilesRemovedCallback +import com.mapbox.navigator.Navigator +import io.mockk.mockk +import io.mockk.verify +import org.junit.Test + +class RemoveTilesTaskTestTest { + + @Test + fun checksOnRemoveIsCalledWhenTilesAreRemoved() { + val mockedNavigator = mockk() + val aTilePath = "/some/path/version" + val southwest = Point.fromLngLat(1.0, 2.0) + val northeast = Point.fromLngLat(3.0, 4.0) + val mockedCallback = mockk(relaxed = true) + val theRemoveTilesTask = RemoveTilesTask( + mockedNavigator, aTilePath, southwest, + northeast, mockedCallback + ) + + theRemoveTilesTask.onPostExecute(9L) + + verify { mockedCallback.onRemoved(eq(9L)) } + } +} \ No newline at end of file diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt index 75cf7957243..debbf297c9a 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteOptionsNavigationDto.kt @@ -65,7 +65,7 @@ fun RouteOptionsNavigationDto.mapToModel() = RouteOptionsNavigation( bannerInstructions = bannerInstructions ?: RouteOptionsNavigation.BANNER_INSTRUCTIONS_DEFAULT_VALUE, voiceUnits = voiceUnits, - accessToken = accessToken, + accessToken = accessToken ?: "", requestUuid = requestUuid, exclude = exclude, approaches = approaches, diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index d42df0f6f4f..57eb6a1e934 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -23,7 +23,7 @@ class RouteOptionsNavigation( val voiceInstructions: Boolean, val bannerInstructions: Boolean, val voiceUnits: String?, - val accessToken: String?, + val accessToken: String, val requestUuid: String?, val exclude: String?, val approaches: String?, @@ -52,6 +52,7 @@ class RouteOptionsNavigation( private lateinit var _origin: RoutePointNavigation private lateinit var _destination: RoutePointNavigation private val _waypoints = mutableListOf() + private lateinit var _accessToken: String private var baseUrl: String? = null private var user: String? = null @@ -69,7 +70,6 @@ class RouteOptionsNavigation( private var voiceInstructions: Boolean = VOICE_INSTRUCTIONS_DEFAULT_VALUE private var bannerInstructions: Boolean = BANNER_INSTRUCTIONS_DEFAULT_VALUE private var voiceUnits: String? = null - private var accessToken: String? = null private var requestUuid: String? = null private var exclude: String? = null private var approaches: String? = null @@ -142,7 +142,7 @@ class RouteOptionsNavigation( fun voiceUnits(voiceUnits: String): Builder = also { this.voiceUnits = voiceUnits } - fun accessToken(accessToken: String): Builder = also { this.accessToken = accessToken } + fun accessToken(accessToken: String): Builder = also { this._accessToken = accessToken } fun requestUuid(requestUuid: String): Builder = also { this.requestUuid = requestUuid } @@ -184,7 +184,7 @@ class RouteOptionsNavigation( voiceInstructions, bannerInstructions, voiceUnits, - accessToken, + _accessToken, requestUuid, exclude, approaches, @@ -199,6 +199,8 @@ class RouteOptionsNavigation( check(::_origin.isInitialized) { "Property origin hasn't been initialized" } check(::_destination.isInitialized) { "Property destination hasn't been initialized" } + + check(::_accessToken.isInitialized) { "Property accessToken hasn't been initialized" } } } } diff --git a/libnavigator/build.gradle b/libnavigator/build.gradle index f9052ce79df..3de8f870f18 100644 --- a/libnavigator/build.gradle +++ b/libnavigator/build.gradle @@ -15,8 +15,8 @@ android { } dependencies { - api(project(':libnavigation-base')) - api(project(':liblogger')) + implementation(project(':libnavigation-base')) + implementation(project(':liblogger')) implementation project(':libnavigation-util') // Navigator From 9bc2ab98eefdb679d954ca700dcee40cf5757b34 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 10 Jan 2020 17:41:42 +0300 Subject: [PATCH 71/75] pr issue fixes --- app/src/main/res/values/strings.xml | 12 -- examples/build.gradle | 1 + libandroid-navigation-ui/build.gradle | 2 - libandroid-navigation/build.gradle | 3 - .../v5/internal/navigation/HttpClient.kt | 5 +- .../navigation/v5/utils/extensions/Mappers.kt | 194 ------------------ libdirections-onboard/build.gradle | 7 + .../route/onboard/MapboxOnboardRouter.kt | 6 +- .../route/onboard}/network/HttpClient.kt | 15 +- .../route/onboard/MapboxOnboardRouterTest.kt | 2 + libnavigator/build.gradle | 7 - .../navigator/MapboxNativeNavigator.kt | 3 +- .../navigator/MapboxNativeNavigatorImpl.kt | 7 +- 13 files changed, 31 insertions(+), 233 deletions(-) delete mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt rename {libnavigator/src/main/java/com/mapbox/navigation/navigator => libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard}/network/HttpClient.kt (88%) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c30e7c07c59..e4966f7cd8f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,18 +4,6 @@ Mock Navigation Mock a navigation session using a mock location engine. - Offboard Router Kotlin - Shows routes using offboard routing api in Kotlin code. - - Offboard Router Java - Shows routes using offboard routing api in Java code. - - Onboard Router Kotlin - Shows routes using onboard routing api in Kotlin code. - - Onboard Router Java - Shows routes using onboard routing api in Java code. - Trip Service Kotlin Shows how to use the Service to push notifications in Kotlin code. diff --git a/examples/build.gradle b/examples/build.gradle index 2c0ee7e2fec..d02e95ac6d8 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -88,6 +88,7 @@ dependencies { implementation project(':libtrip-notification') implementation project(':libnavigation-util') implementation project(':liblogger') + implementation project(':libnavigator') //ktlint ktlint dependenciesList.ktlint diff --git a/libandroid-navigation-ui/build.gradle b/libandroid-navigation-ui/build.gradle index 86bf108ce5a..133297caaa1 100644 --- a/libandroid-navigation-ui/build.gradle +++ b/libandroid-navigation-ui/build.gradle @@ -58,8 +58,6 @@ dependencies { // Navigation SDK api project(':libandroid-navigation') - implementation project(':liblogger') - implementation project(':libnavigation-base') // Mapbox Maps SDK implementation dependenciesList.mapboxMapSdk diff --git a/libandroid-navigation/build.gradle b/libandroid-navigation/build.gradle index ac32207a64a..f3dbef3d59b 100644 --- a/libandroid-navigation/build.gradle +++ b/libandroid-navigation/build.gradle @@ -56,9 +56,6 @@ android { } dependencies { - api project(':libnavigation-base') - implementation project(':libnavigator') - api dependenciesList.mapboxSdkServices api dependenciesList.mapboxSdkTurf api dependenciesList.mapboxCore diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt index 94ca6fc3ec8..76b7cc8f217 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/internal/navigation/HttpClient.kt @@ -9,8 +9,7 @@ import java.io.ByteArrayOutputStream import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.logging.HttpLoggingInterceptor -import okio.buffer -import okio.sink +import okio.Okio import timber.log.Timber @Keep @@ -65,7 +64,7 @@ internal class HttpClient( val result = if (response.isSuccessful) HttpCode.SUCCESS else HttpCode.FAILURE response.body()?.let { body -> - val sink = outputStream.sink().buffer() + val sink = Okio.buffer(Okio.sink(outputStream)) sink.writeAll(body.source()) sink.close() } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt deleted file mode 100644 index 3570b2abb2f..00000000000 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/extensions/Mappers.kt +++ /dev/null @@ -1,194 +0,0 @@ -@file:JvmName("Mappers") - -package com.mapbox.services.android.navigation.v5.utils.extensions - -import com.mapbox.api.directions.v5.WalkingOptions -import com.mapbox.api.directions.v5.models.BannerComponents -import com.mapbox.api.directions.v5.models.BannerInstructions -import com.mapbox.api.directions.v5.models.BannerText -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.IntersectionLanes -import com.mapbox.api.directions.v5.models.LegAnnotation -import com.mapbox.api.directions.v5.models.LegStep -import com.mapbox.api.directions.v5.models.MaxSpeed -import com.mapbox.api.directions.v5.models.RouteLeg -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.api.directions.v5.models.StepIntersection -import com.mapbox.api.directions.v5.models.StepManeuver -import com.mapbox.api.directions.v5.models.VoiceInstructions -import com.mapbox.navigation.base.route.model.BannerComponentsNavigation -import com.mapbox.navigation.base.route.model.BannerInstructionsNavigation -import com.mapbox.navigation.base.route.model.BannerTextNavigation -import com.mapbox.navigation.base.route.model.IntersectionLanesNavigation -import com.mapbox.navigation.base.route.model.LegAnnotationNavigation -import com.mapbox.navigation.base.route.model.LegStepNavigation -import com.mapbox.navigation.base.route.model.MaxSpeedNavigation -import com.mapbox.navigation.base.route.model.Route -import com.mapbox.navigation.base.route.model.RouteLegNavigation -import com.mapbox.navigation.base.route.model.RouteOptionsNavigation -import com.mapbox.navigation.base.route.model.StepIntersectionNavigation -import com.mapbox.navigation.base.route.model.StepManeuverNavigation -import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation -import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation - -fun WalkingOptionsNavigation.mapToWalkingOptions(): WalkingOptions = WalkingOptions - .builder() - .walkingSpeed(walkingSpeed) - .walkwayBias(walkwayBias) - .alleyBias(alleyBias) - .build() - -fun Route.mapToDirectionsRoute(): DirectionsRoute { - return DirectionsRoute.builder() // FIXME route index - .distance(distance) - .duration(duration.toDouble()) - .geometry(geometry) - .weight(weight) - .weightName(weightName) - .voiceLanguage(voiceLanguage) - .legs(legs?.map(RouteLegNavigation::mapToRouteLeg)) - .routeOptions(routeOptions?.mapToRouteOptions()) - .build() -} - -fun RouteOptionsNavigation.mapToRouteOptions(): RouteOptions = - RouteOptions.builder() - .apply { - walkingOptions?.let { walkingOptions(it.mapToWalkingOptions()) } - accessToken?.let { accessToken(it) } - exclude?.let { exclude(it) } - requestUuid?.let { requestUuid(it) } - } - .profile(profile) - .user(user) - .baseUrl(baseUrl) - .annotations(annotations) - .approaches(approaches)!! - .bannerInstructions(bannerInstructions) - .bearings(bearings) - .continueStraight(continueStraight) - .coordinates(coordinates) - .geometries(geometries) - .language(language) - .overview(overview) - .radiuses(radiuses) - .roundaboutExits(roundaboutExits) - .steps(steps) - .alternatives(alternatives) - .voiceInstructions(voiceInstructions) - .voiceUnits(voiceUnits) - .waypointIndices(waypointIndices)!! - .waypointNames(waypointNames)!! - .waypointTargets(waypointTargets)!! - .build() - -fun RouteLegNavigation.mapToRouteLeg(): RouteLeg = - RouteLeg.builder() - .annotation(annotation?.mapToLegAnnotation()) - .distance(distance) - .duration(duration) - .steps(steps?.map(LegStepNavigation::mapToLegStep)) - .summary(summary) - .build() - -fun LegAnnotationNavigation.mapToLegAnnotation(): LegAnnotation = - LegAnnotation.builder() - .congestion(congestion) - .distance(distance) - .duration(duration) - .maxspeed(maxspeed?.map(MaxSpeedNavigation::mapToMaxSpeed)) - .speed(speed) - .build() - -fun LegStepNavigation.mapToLegStep(): LegStep = - LegStep.builder() - .bannerInstructions(bannerInstructions?.map(BannerInstructionsNavigation::mapToBannerInstruction) ?: emptyList()) - .destinations(destinations) - .distance(distance) - .drivingSide(drivingSide) - .duration(duration) - .exits(exits) - .geometry(geometry) - .intersections(intersections?.map(StepIntersectionNavigation::mapToStepIntersection) ?: emptyList()) - .maneuver(maneuver.mapToStepManeuver()) - .mode(mode) - .name(name) - .pronunciation(pronunciation) - .ref(ref) - .rotaryName(rotaryName) - .rotaryPronunciation(rotaryPronunciation) - .voiceInstructions(voiceInstructions?.map(VoiceInstructionsNavigation::mapToVoiceInstructions) ?: emptyList()) - .weight(weight) - .build() - -fun MaxSpeedNavigation.mapToMaxSpeed(): MaxSpeed = - MaxSpeed.builder() - .speed(speed) - .none(none) - .unit(unit) - .unknown(unknown) - .build() - -fun BannerInstructionsNavigation.mapToBannerInstruction(): BannerInstructions = - BannerInstructions.builder() - .distanceAlongGeometry(distanceAlongGeometry) - .primary(primary?.mapToBannerText() ?: BannerText.builder().build()) - .secondary(secondary?.mapToBannerText()) - .sub(sub?.mapToBannerText()) - .build() - -fun StepIntersectionNavigation.mapToStepIntersection(): StepIntersection = - StepIntersection.builder() - .bearings(bearings) - .classes(classes) - .entry(entry) - .`in`(into) - .out(out) - .lanes(lanes?.map(IntersectionLanesNavigation::mapToIntersectionLanes)) - .rawLocation(rawLocation) - .build() - -fun StepManeuverNavigation.mapToStepManeuver(): StepManeuver = - StepManeuver.builder() - .bearingAfter(bearingAfter) - .bearingBefore(bearingBefore) - .exit(exit) - .instruction(instruction) - .modifier(modifier) - .rawLocation(rawLocation) - .type(type) - .build() - -fun VoiceInstructionsNavigation.mapToVoiceInstructions(): VoiceInstructions = - VoiceInstructions.builder() - .announcement(announcement) - .distanceAlongGeometry(distanceAlongGeometry) - .ssmlAnnouncement(ssmlAnnouncement) - .build() - -fun BannerTextNavigation.mapToBannerText(): BannerText = - BannerText.builder() - .text(text ?: "")!! - .components(components?.map(BannerComponentsNavigation::mapToBannerComponents))!! - .degrees(degrees) - .drivingSide(drivingSide) - .modifier(modifier) - .type(type) - .build() - -fun IntersectionLanesNavigation.mapToIntersectionLanes(): IntersectionLanes = - IntersectionLanes.builder() - .indications(indications) - .valid(valid) - .build() - -fun BannerComponentsNavigation.mapToBannerComponents(): BannerComponents = - BannerComponents.builder() - .abbreviation(abbreviation) - .abbreviationPriority(abbreviationPriority) - .active(active) - .directions(directions) - .imageBaseUrl(imageBaseUrl) - .text(text) - .type(type) - .build() diff --git a/libdirections-onboard/build.gradle b/libdirections-onboard/build.gradle index 849b1c91818..95b230534c0 100644 --- a/libdirections-onboard/build.gradle +++ b/libdirections-onboard/build.gradle @@ -29,6 +29,13 @@ dependencies { implementation dependenciesList.kotlinStdLib implementation dependenciesList.supportAnnotation + //networks + implementation dependenciesList.okhttp + implementation dependenciesList.okhttpInterceptor + + // I/O + implementation dependenciesList.okio + testImplementation dependenciesList.mockk testImplementation dependenciesList.junit testImplementation dependenciesList.robolectric diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt index f8eb53d39c1..74787bcdb1c 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouter.kt @@ -12,6 +12,7 @@ import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl import com.mapbox.navigation.route.onboard.model.Config import com.mapbox.navigation.route.onboard.model.OfflineError import com.mapbox.navigation.route.onboard.model.mapToRouteConfig +import com.mapbox.navigation.route.onboard.network.HttpClient import com.mapbox.navigation.route.onboard.task.OfflineRouteRetrievalTask import com.mapbox.navigation.utils.exceptions.NavigationException import java.io.File @@ -42,7 +43,8 @@ class MapboxOnboardRouter : Router { this.navigatorNative = MapboxNativeNavigatorImpl this.config = config this.logger = logger - MapboxNativeNavigatorImpl.configureRouter(config.mapToRouteConfig()) + val httpClient = HttpClient() + MapboxNativeNavigatorImpl.configureRouter(config.mapToRouteConfig(), httpClient, httpClient.userAgent) } // Package private for testing purposes @@ -61,7 +63,7 @@ class MapboxOnboardRouter : Router { ) { val offlineRouter = OfflineRoute.builder( RouteUrl( - accessToken = routeOptions.accessToken ?: "", + accessToken = routeOptions.accessToken, user = routeOptions.user, profile = routeOptions.profile, orgin = routeOptions.origin.point, diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt similarity index 88% rename from libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt rename to libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt index 353309c77f7..a5e04f74e92 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/network/HttpClient.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt @@ -1,27 +1,32 @@ -package com.mapbox.navigation.navigator.network +package com.mapbox.navigation.route.onboard.network import androidx.annotation.Keep +import com.mapbox.navigation.base.logger.Logger import com.mapbox.navigation.base.logger.model.Message -import com.mapbox.navigation.logger.MapboxLogger import com.mapbox.navigator.BuildConfig import com.mapbox.navigator.HttpCode import com.mapbox.navigator.HttpInterface import com.mapbox.navigator.HttpResponse -import java.io.ByteArrayOutputStream import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.logging.HttpLoggingInterceptor import okio.buffer import okio.sink +import java.io.ByteArrayOutputStream @Keep internal class HttpClient( - private val userAgent: String, + internal val userAgent: String = USER_AGENT, private val acceptGzipEncoding: Boolean = false, + private val logger: Logger? = null, private val clientBuilder: OkHttpClient.Builder = OkHttpClient.Builder() ) : HttpInterface() { + + companion object { + private const val USER_AGENT = "MapboxNavigationNative" + private const val ERROR_EMPTY_USER_AGENT = "Empty UserAgent is not allowed" private const val HEADER_USER_AGENT = "User-Agent" private const val HEADER_ENCODING = "Accept-Encoding" @@ -32,7 +37,7 @@ internal class HttpClient( if (BuildConfig.DEBUG) { val interceptor = HttpLoggingInterceptor(object : HttpLoggingInterceptor.Logger { override fun log(message: String) { - MapboxLogger.d(Message(message)) + logger?.d(msg = Message(message)) } }).setLevel(HttpLoggingInterceptor.Level.BASIC) diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt index 015a57dff5a..cb1a0959bbb 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt @@ -1,9 +1,11 @@ package com.mapbox.navigation.route.onboard import com.mapbox.navigation.navigator.MapboxNativeNavigator +import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl import com.mapbox.navigation.route.onboard.model.Config import io.mockk.every import io.mockk.mockk +import io.mockk.mockkObject import io.mockk.slot import org.junit.Assert import org.junit.Before diff --git a/libnavigator/build.gradle b/libnavigator/build.gradle index 3de8f870f18..0e3a74880d3 100644 --- a/libnavigator/build.gradle +++ b/libnavigator/build.gradle @@ -28,13 +28,6 @@ dependencies { //ktlint ktlint dependenciesList.ktlint - //networks - implementation dependenciesList.okhttp - implementation dependenciesList.okhttpInterceptor - - // I/O - implementation dependenciesList.okio - implementation dependenciesList.kotlinStdLib implementation dependenciesList.supportAnnotation diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt index bf0341e5c71..bf593bb9775 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigator.kt @@ -3,12 +3,13 @@ package com.mapbox.navigation.navigator import android.location.Location import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.navigator.model.RouterConfig +import com.mapbox.navigator.HttpInterface import com.mapbox.navigator.RouterResult import java.util.Date interface MapboxNativeNavigator { - fun configureRouter(routerConfig: RouterConfig) + fun configureRouter(routerConfig: RouterConfig, httpClient: HttpInterface, userAgent: String) fun getRoute(url: String): RouterResult fun updateLocation(rawLocation: Location) fun getStatus(date: Date): TripStatus diff --git a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt index 349d402017c..94a8a79358d 100644 --- a/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt +++ b/libnavigator/src/main/java/com/mapbox/navigation/navigator/MapboxNativeNavigatorImpl.kt @@ -5,8 +5,8 @@ import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.trip.model.RouteProgress import com.mapbox.navigation.navigator.model.RouterConfig -import com.mapbox.navigation.navigator.network.HttpClient import com.mapbox.navigator.FixLocation +import com.mapbox.navigator.HttpInterface import com.mapbox.navigator.NavigationStatus import com.mapbox.navigator.Navigator import com.mapbox.navigator.RouterParams @@ -21,9 +21,8 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { } private val navigator: Navigator = Navigator() - private const val userAgent = "MapboxNavigationNative" - override fun configureRouter(routerConfig: RouterConfig) { + override fun configureRouter(routerConfig: RouterConfig, httpClient: HttpInterface, userAgent: String) { navigator.configureRouter( RouterParams( routerConfig.tilePath, @@ -39,7 +38,7 @@ object MapboxNativeNavigatorImpl : MapboxNativeNavigator { "" ) }), - HttpClient(userAgent) + httpClient ) } From f103784961e9c5438995fddce03b235eb7826d4c Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 10 Jan 2020 18:16:26 +0300 Subject: [PATCH 72/75] rebase issues --- .../metrics/MapboxMetricsReporter.kt | 2 +- .../route/offboard/extension/Mappers.kt | 68 +++++++++---------- .../route/onboard/network/HttpClient.kt | 4 +- .../route/onboard/MapboxOnboardRouterTest.kt | 6 +- .../route/onboard/OfflineRouteTest.kt | 6 +- .../onboard/task/RemoveTilesTaskTestTest.kt | 2 +- .../base/route/dto/LegStepNavigationDto.kt | 26 ++----- .../base/route/dto/RouteLegNavigationDto.kt | 14 ++-- .../route/dto/StepManeuverNavigationDto.kt | 17 ++--- .../base/route/model/BannerTextNavigation.kt | 2 +- 10 files changed, 58 insertions(+), 89 deletions(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index a0aea60c434..861d9352b1f 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -86,7 +86,7 @@ object MapboxMetricsReporter : MetricsReporter { this.metricsObserver = metricsObserver } - override fun removeObserver() { + fun removeObserver() { this.metricsObserver = null } } diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt index 956472103a4..b9f1a97b0f1 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/extension/Mappers.kt @@ -8,16 +8,28 @@ import com.mapbox.api.directions.v5.models.BannerComponents import com.mapbox.api.directions.v5.models.BannerInstructions import com.mapbox.api.directions.v5.models.BannerText import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.api.directions.v5.models.IntersectionLanes +import com.mapbox.api.directions.v5.models.LegAnnotation import com.mapbox.api.directions.v5.models.LegStep +import com.mapbox.api.directions.v5.models.MaxSpeed import com.mapbox.api.directions.v5.models.RouteLeg import com.mapbox.api.directions.v5.models.RouteOptions +import com.mapbox.api.directions.v5.models.StepIntersection import com.mapbox.api.directions.v5.models.StepManeuver +import com.mapbox.api.directions.v5.models.VoiceInstructions +import com.mapbox.navigation.base.route.model.BannerComponentsNavigation +import com.mapbox.navigation.base.route.model.BannerInstructionsNavigation +import com.mapbox.navigation.base.route.model.BannerTextNavigation +import com.mapbox.navigation.base.route.model.IntersectionLanesNavigation +import com.mapbox.navigation.base.route.model.LegAnnotationNavigation import com.mapbox.navigation.base.route.model.LegStepNavigation -import com.mapbox.geojson.Point +import com.mapbox.navigation.base.route.model.MaxSpeedNavigation import com.mapbox.navigation.base.route.model.Route import com.mapbox.navigation.base.route.model.RouteLegNavigation import com.mapbox.navigation.base.route.model.RouteOptionsNavigation +import com.mapbox.navigation.base.route.model.StepIntersectionNavigation import com.mapbox.navigation.base.route.model.StepManeuverNavigation +import com.mapbox.navigation.base.route.model.VoiceInstructionsNavigation import com.mapbox.navigation.base.route.model.WalkingOptionsNavigation import java.util.Locale @@ -61,33 +73,20 @@ fun DirectionsRoute.mapToRoute() = Route( voiceLanguage = voiceLanguage() ) -fun RouteLeg.mapToRouteLegNavigation() = RouteLegNavigation( - distance = distance(), - duration = duration(), - summary = summary(), - steps = steps()?.map(LegStep::mapToLegStepNavigation), - annotation = annotation()?.mapToLegAnnotationNavigation() -) +fun RouteLeg.mapToRouteLegNavigation() = RouteLegNavigation.Builder() + .distance(distance()) + .duration(duration()) + .steps(steps()?.map { it.mapToLegStep() }) + .summary(summary()) + .build() -fun LegStep.mapToLegStepNavigation() = LegStepNavigation( - distance = distance(), - duration = duration(), - geometry = geometry(), - name = name(), - ref = ref(), - destinations = destinations(), - mode = mode(), - pronunciation = pronunciation(), - rotaryName = rotaryName(), - rotaryPronunciation = rotaryPronunciation(), - maneuver = maneuver().mapToStepManeuverNavigation(), - voiceInstructions = voiceInstructions()?.map { it.mapToVoiceInstructionsNavigation() }, - bannerInstructions = bannerInstructions()?.map { it.mapToBannerInstructionsNavigation() }, - drivingSide = drivingSide(), - weight = weight(), - intersections = intersections()?.map { it.mapToStepIntersectionNavigation() }, - exits = exits() -) +fun LegStep.mapToLegStepNavigation() = LegStepNavigation.Builder() + .stepManeuver(maneuver().mapToStepManeuverNavigation()) + .distance(distance()) + .drivingSide(drivingSide()) + .duration(duration()) + .geometry(geometry()) + .build() fun RouteOptions.mapToRouteOptionsNavigation(): RouteOptionsNavigation { val routeOptionsNavigationBuilder = RouteOptionsNavigation @@ -138,7 +137,7 @@ fun VoiceInstructions.mapToVoiceInstructionsNavigation() = VoiceInstructionsNavi ) fun BannerInstructions.mapToBannerInstructionsNavigation() = BannerInstructionsNavigation( -distanceAlongGeometry = distanceAlongGeometry(), + distanceAlongGeometry = distanceAlongGeometry(), primary = primary().mapToBannerTextNavigation(), secondary = secondary()?.mapToBannerTextNavigation(), sub = sub()?.mapToBannerTextNavigation() @@ -163,15 +162,10 @@ fun BannerComponents.mapToBannerComponentsNavigation() = BannerComponentsNavigat active = active() ) -fun StepManeuver.mapToStepManeuverNavigation() = StepManeuverNavigation( - location = location(), - bearingBefore = bearingBefore(), - bearingAfter = bearingAfter(), - instruction = instruction(), - type = type(), - modifier = modifier(), - exit = exit() -) +fun StepManeuver.mapToStepManeuverNavigation() = StepManeuverNavigation.Builder() + .modifier(modifier()) + .type(type()) + .build() fun StepIntersection.mapToStepIntersectionNavigation() = StepIntersectionNavigation( location = location(), diff --git a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt index a5e04f74e92..e139d94cf9b 100644 --- a/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt +++ b/libdirections-onboard/src/main/java/com/mapbox/navigation/route/onboard/network/HttpClient.kt @@ -7,12 +7,12 @@ import com.mapbox.navigator.BuildConfig import com.mapbox.navigator.HttpCode import com.mapbox.navigator.HttpInterface import com.mapbox.navigator.HttpResponse +import java.io.ByteArrayOutputStream import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.logging.HttpLoggingInterceptor import okio.buffer import okio.sink -import java.io.ByteArrayOutputStream @Keep internal class HttpClient( @@ -22,8 +22,6 @@ internal class HttpClient( private val clientBuilder: OkHttpClient.Builder = OkHttpClient.Builder() ) : HttpInterface() { - - companion object { private const val USER_AGENT = "MapboxNavigationNative" diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt index cb1a0959bbb..2e3a9fe3185 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/MapboxOnboardRouterTest.kt @@ -1,12 +1,8 @@ package com.mapbox.navigation.route.onboard import com.mapbox.navigation.navigator.MapboxNativeNavigator -import com.mapbox.navigation.navigator.MapboxNativeNavigatorImpl import com.mapbox.navigation.route.onboard.model.Config -import io.mockk.every import io.mockk.mockk -import io.mockk.mockkObject -import io.mockk.slot import org.junit.Assert import org.junit.Before import org.junit.Test @@ -25,4 +21,4 @@ class MapboxOnboardRouterTest { fun generationSanityTest() { Assert.assertNotNull(onboardRouter) } -} \ No newline at end of file +} diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt index c30fc676cf4..a87d048d0a9 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/OfflineRouteTest.kt @@ -2,15 +2,13 @@ package com.mapbox.navigation.route.onboard import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.RouteUrl -import io.mockk.mockkStatic +import java.io.UnsupportedEncodingException +import java.net.URLDecoder import org.junit.Assert.assertTrue -import org.junit.BeforeClass import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import java.io.UnsupportedEncodingException -import java.net.URLDecoder @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE) diff --git a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt index 02c1760f12d..ecb3ff731b7 100644 --- a/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt +++ b/libdirections-onboard/src/test/java/com/mapbox/navigation/route/onboard/task/RemoveTilesTaskTestTest.kt @@ -25,4 +25,4 @@ class RemoveTilesTaskTestTest { verify { mockedCallback.onRemoved(eq(9L)) } } -} \ No newline at end of file +} diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt index 5f1f173e27b..a448632f06d 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/LegStepNavigationDto.kt @@ -26,22 +26,10 @@ class LegStepNavigationDto( val exits: String? ) -fun LegStepNavigationDto.mapToModel() = LegStepNavigation( - distance = distance, - duration = duration, - geometry = geometry, - name = name, - ref = ref, - destinations = destinations, - mode = mode, - pronunciation = pronunciation, - rotaryName = rotaryName, - rotaryPronunciation = rotaryPronunciation, - maneuver = maneuver.mapToModel(), - voiceInstructions = voiceInstructions?.map(VoiceInstructionsNavigationDto::mapToModel), - bannerInstructions = bannerInstructions?.map(BannerInstructionsNavigationDto::mapToModel), - drivingSide = drivingSide, - weight = weight, - intersections = intersections?.map(StepIntersectionNavigationDto::mapToModel), - exits = exits -) +fun LegStepNavigationDto.mapToModel() = LegStepNavigation.Builder() + .distance(distance) + .drivingSide(drivingSide) + .duration(duration) + .geometry(geometry) + .stepManeuver(maneuver.mapToModel()) + .build() diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt index 8d877948588..8fc1b1939a1 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/RouteLegNavigationDto.kt @@ -10,10 +10,10 @@ class RouteLegNavigationDto( val annotation: LegAnnotationNavigationDto? ) -fun RouteLegNavigationDto.mapToRouteLegNavigation(): RouteLegNavigation = RouteLegNavigation( - distance = distance, - duration = duration, - summary = summary, - steps = steps?.map { it.mapToModel() }, - annotation = annotation?.mapToModel() -) +fun RouteLegNavigationDto.mapToRouteLegNavigation(): RouteLegNavigation = + RouteLegNavigation.Builder() + .distance(distance) + .duration(duration) + .summary(summary) + .steps(steps?.map { it.mapToModel() }) + .build() diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt index 742bc4c6186..853764bca91 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/dto/StepManeuverNavigationDto.kt @@ -1,8 +1,8 @@ package com.mapbox.navigation.base.route.dto import com.google.gson.annotations.SerializedName -import com.mapbox.geojson.Point import com.mapbox.navigation.base.route.model.StepManeuverNavigation +import com.mapbox.navigation.base.route.model.StepManeuverType class StepManeuverNavigationDto( @SerializedName("location") @@ -12,18 +12,13 @@ class StepManeuverNavigationDto( @SerializedName("bearing_after") val bearingAfter: Double?, val instruction: String?, - @StepManeuverNavigation.StepManeuverTypeNavigation + @StepManeuverType val type: String?, val modifier: String?, val exit: Int? ) -fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation( - location = Point.fromLngLat(rawLocation[0], rawLocation[1]), - bearingBefore = bearingBefore, - bearingAfter = bearingAfter, - instruction = instruction, - type = type, - modifier = modifier, - exit = exit -) +fun StepManeuverNavigationDto.mapToModel() = StepManeuverNavigation.Builder() + .modifier(modifier) + .type(type) + .build() diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt index bb0c9708cc2..f34fe118371 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/BannerTextNavigation.kt @@ -33,7 +33,7 @@ package com.mapbox.navigation.base.route.model class BannerTextNavigation( val text: String?, val components: List?, - @StepManeuverNavigation.StepManeuverTypeNavigation + @StepManeuverType val type: String?, val modifier: String?, val degrees: Double?, From 18df0e7c0dea2c8023c87a68e855de91286c7f44 Mon Sep 17 00:00:00 2001 From: Yury Kanetski Date: Fri, 10 Jan 2020 18:26:15 +0300 Subject: [PATCH 73/75] rebase fixes --- .../v5/navigation/metrics/MapboxMetricsReporter.kt | 2 +- .../navigation/v5/navigation/metrics/MetricsReporter.kt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt index 861d9352b1f..a0aea60c434 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MapboxMetricsReporter.kt @@ -86,7 +86,7 @@ object MapboxMetricsReporter : MetricsReporter { this.metricsObserver = metricsObserver } - fun removeObserver() { + override fun removeObserver() { this.metricsObserver = null } } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt index 4decca74c7f..a6855f4f5eb 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/MetricsReporter.kt @@ -22,4 +22,11 @@ interface MetricsReporter { * @since 0.43.0 */ fun setMetricsObserver(metricsObserver: MetricsObserver) + + /** + * Remove metrics observer + * + * @since 0.43.0 + */ + fun removeObserver() } From 0beeb13f881c572be87a38a5f75ba9195c1f8a04 Mon Sep 17 00:00:00 2001 From: Raman Lebiadzinski Date: Mon, 13 Jan 2020 12:52:08 +0300 Subject: [PATCH 74/75] Fix rebase issues. Remove unused resources. Fix tests and naming --- app/build.gradle | 5 - app/src/main/res/values/strings.xml | 6 - .../v5/navigation/NavigationRoute.kt | 13 + .../route/common/NavigationRoute.kt | 797 ------------------ .../mapbox/navigation/base/route/RouteUrl.kt | 8 +- .../navigation/base/route/RouteUrlTest.kt | 6 +- .../mapbox/navigation/NavigationController.kt | 0 .../directions/session/DirectionsSession.kt | 0 .../session/MapboxDirectionsSession.kt | 0 .../session/MapboxDirectionsSessionTest.kt | 0 10 files changed, 20 insertions(+), 815 deletions(-) delete mode 100644 libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt delete mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/NavigationController.kt delete mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/DirectionsSession.kt delete mode 100644 libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/MapboxDirectionsSession.kt delete mode 100644 libnavigation-core/src/test/java/com/mapbox/navigation/directions/session/MapboxDirectionsSessionTest.kt diff --git a/app/build.gradle b/app/build.gradle index 9a02bb16198..2542649f44d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,11 +83,6 @@ android { } dependencies { - implementation project(':libdirections-offboard') - implementation project(':libdirections-onboard') - implementation project(':libnavigation-util') - implementation project(':liblogger') - //ktlint ktlint dependenciesList.ktlint diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4966f7cd8f..508e10b9215 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,12 +4,6 @@ Mock Navigation Mock a navigation session using a mock location engine. - Trip Service Kotlin - Shows how to use the Service to push notifications in Kotlin code. - - Trip Service Java - Shows how to use the Service to push notifications in Java code. - Off route detection Uses the Route Utils class to determine if a users off route. diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt index 54bea09fdc6..8ad014a4bb1 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRoute.kt @@ -10,6 +10,7 @@ import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.core.exceptions.ServicesException import com.mapbox.core.utils.TextUtils import com.mapbox.geojson.Point +import com.mapbox.services.android.navigation.v5.internal.accounts.SkuInterceptor import com.mapbox.services.android.navigation.v5.utils.extensions.getUnitTypeForLocale import com.mapbox.services.android.navigation.v5.utils.extensions.inferDeviceLocale import java.util.Locale @@ -53,6 +54,7 @@ internal constructor( ) .language(context) .voiceUnits(context) + .interceptor(SkuInterceptor(context)) .profile(DirectionsCriteria.PROFILE_DRIVING_TRAFFIC) .continueStraight(true) } @@ -568,6 +570,17 @@ internal constructor( return this } + /** + * Adds an optional network interceptor to set in the OkHttp client. + * + * @param interceptor to set for OkHttp + * @return this builder for chaining options together + */ + fun networkInterceptor(interceptor: Interceptor): Builder { + directionsBuilder.networkInterceptor(interceptor) + return this + } + /** * Adds an optional event listener to set in the OkHttp client. * diff --git a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt b/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt deleted file mode 100644 index 3112ce7812e..00000000000 --- a/libdirections-common/src/main/java/com/mapbox/navigation/route/common/NavigationRoute.kt +++ /dev/null @@ -1,797 +0,0 @@ -package com.mapbox.navigation.route.common - -import android.content.Context -import androidx.annotation.FloatRange -import androidx.annotation.IntRange -import com.mapbox.api.directions.v5.DirectionsCriteria -import com.mapbox.api.directions.v5.MapboxDirections -import com.mapbox.api.directions.v5.models.DirectionsResponse -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.core.exceptions.ServicesException -import com.mapbox.core.utils.TextUtils -import com.mapbox.geojson.Point -import com.mapbox.services.android.navigation.v5.internal.accounts.SkuInterceptor -import com.mapbox.services.android.navigation.v5.utils.extensions.getUnitTypeForLocale -import com.mapbox.services.android.navigation.v5.utils.extensions.inferDeviceLocale -import com.mapbox.services.android.navigation.v5.utils.extensions.mapToWalkingOptions -import java.util.Locale -import okhttp3.EventListener -import okhttp3.Interceptor -import retrofit2.Call -import retrofit2.Callback - -/** - * The NavigationRoute class wraps the [MapboxDirections] class with parameters which - * must be set in order for a navigation session to successfully begin. While it is possible - * to pass in any [com.mapbox.api.directions.v5.models.DirectionsRoute] into - * [MapboxNavigation.startNavigation], using this class will ensure your - * request includes all the proper information needed for the navigation session to begin. - * - * Developer Note: MapboxDirections cannot be directly extended since it is an AutoValue class. - * - * 0.5.0 - */ - -class NavigationRoute -internal constructor( - private val mapboxDirections: MapboxDirections -) { - - companion object { - private val EVENT_LISTENER = NavigationRouteEventListener() - - /** - * Build a new [NavigationRoute] object with the proper navigation parameters already setup. - * - * @return a [Builder] object for creating this object - * @since 0.5.0 - */ - @JvmStatic - fun builder(context: Context): Builder = - Builder() - .annotations( - DirectionsCriteria.ANNOTATION_CONGESTION, - DirectionsCriteria.ANNOTATION_DISTANCE - ) - .language(context) - .voiceUnits(context) - .interceptor(SkuInterceptor(context)) - .profile(DirectionsCriteria.PROFILE_DRIVING_TRAFFIC) - .continueStraight(true) - } - - /** - * Wrapper method for Retrofit's [Call.clone] call, useful for getting call information - * and allowing you to perform additional functions on this [NavigationRoute] class. - * - * @return cloned call - * @since 1.0.0 - */ - val call: Call - get() = mapboxDirections.cloneCall() - - /** - * Call when you have constructed your navigation route with your desired parameters. A - * [Callback] must be passed into the method to handle both the response and failure. - * - * @param callback a RetroFit callback which contains an onResponse and onFailure - * @since 0.5.0 - */ - fun getRoute(callback: Callback) { - mapboxDirections.enqueueCall(NavigationRouteCallback(EVENT_LISTENER, callback)) - } - - /** - * Wrapper method for Retrofit's [Call.cancel] call, important to manually cancel call if - * the user dismisses the calling activity or no longer needs the returned results. - */ - fun cancelCall() { - if (!call.isExecuted) { - call.cancel() - } - } - - /** - * This builder is used to create a new request to the Mapbox Directions API and removes options - * which would cause this navigation SDK to not behave properly. At a bare minimum, your request - * must include an access token, an origin, and a destination. All other fields can be left alone - * inorder to use the default behaviour of the API. - * - * - * By default, the directions profile is set to driving with traffic but can be changed to - * reflect your users use-case. - * - * - * @since 0.5.0 - */ - class Builder internal constructor(private val directionsBuilder: MapboxDirections.Builder) { - private val eventListener: NavigationRouteEventListener - private var origin: NavigationRouteWaypoint? = null - private var destination: NavigationRouteWaypoint? = null - private val waypoints = ArrayList() - private val SEMICOLON = ";" - private val COMMA = "," - - /** - * Private constructor for initializing the raw MapboxDirections.Builder - */ - constructor() : this(MapboxDirections.builder()) {} - - init { - this.eventListener = EVENT_LISTENER - } - - /** - * The username for the account that the directions engine runs on. In most cases, this should - * always remain the default value of [DirectionsCriteria.PROFILE_DEFAULT_USER]. - * - * @param user a non-null string which will replace the default user used in the directions - * request - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun user(user: String): Builder { - directionsBuilder.user(user) - return this - } - - /** - * This selects which mode of transportation the user will be using while navigating from the - * origin to the final destination. The options include driving, driving considering traffic, - * walking, and cycling. Using each of these profiles will result in different routing biases. - * - * @param profile required to be one of the String values found in the [ProfileCriteria] - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun profile(@DirectionsCriteria.ProfileCriteria profile: String): Builder { - directionsBuilder.profile(profile) - return this - } - - /** - * This sets the starting point on the map where the route will begin. It is one of the - * required parameters which must be set for a successful directions response. - * - * @param origin a GeoJson [Point] object representing the starting location for the route - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun origin(origin: Point): Builder { - this.origin = NavigationRouteWaypoint(origin, null, null) - return this - } - - /** - * This sets the starting point on the map where the route will begin. It is one of the - * required parameters which must be set for a successful directions response. - * - * @param origin a GeoJson [Point] object representing the starting location for the - * route - * @param angle double value used for setting the corresponding coordinate's angle of travel - * when determining the route - * @param tolerance the deviation the bearing angle can vary while determining the route, - * recommended to be either 45 or 90 degree tolerance - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun origin( - origin: Point, - angle: Double?, - tolerance: Double? - ): Builder { - this.origin = - NavigationRouteWaypoint(origin, angle, tolerance) - return this - } - - /** - * This sets the ending point on the map where the route will end. It is one of the required - * parameters which must be set for a successful directions response. - * - * @param destination a GeoJson [Point] object representing the starting location for the - * route - * @return this builder for chaining options together - * @since 0.50 - */ - fun destination(destination: Point): Builder { - this.destination = - NavigationRouteWaypoint(destination, null, null) - return this - } - - /** - * This sets the ending point on the map where the route will end. It is one of the required - * parameters which must be set for a successful directions response. - * - * @param destination a GeoJson [Point] object representing the starting location for the - * route - * @param angle double value used for setting the corresponding coordinate's angle of travel - * when determining the route - * @param tolerance the deviation the bearing angle can vary while determining the route, - * recommended to be either 45 or 90 degree tolerance - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun destination( - destination: Point, - angle: Double?, - tolerance: Double? - ): Builder { - this.destination = - NavigationRouteWaypoint(destination, angle, tolerance) - return this - } - - /** - * This can be used to set up to 23 additional in-between points which will act as pit-stops - * along the users route. Note that if you are using the - * [DirectionsCriteria.PROFILE_DRIVING_TRAFFIC] that the max number of waypoints allowed - * in the request is currently limited to 1. - * - * @param waypoint a [Point] which represents the pit-stop or waypoint where you'd like - * one of the [com.mapbox.api.directions.v5.models.RouteLeg] to - * navigate the user to - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun addWaypoint(waypoint: Point): Builder { - this.waypoints.add( - NavigationRouteWaypoint( - waypoint, - null, - null - ) - ) - return this - } - - /** - * This can be used to set up to 23 additional in-between points which will act as pit-stops - * along the users route. - * - * - * Note that if you are using the - * [DirectionsCriteria.PROFILE_DRIVING_TRAFFIC] that the max number of waypoints allowed - * in the request is currently limited to 1. - * - * - * These waypoints are added to the request in the order you add them to the builder with this method. - * - * @param waypoint a [Point] which represents the pit-stop or waypoint where you'd like - * one of the [com.mapbox.api.directions.v5.models.RouteLeg] to - * navigate the user to - * @param angle double value used for setting the corresponding coordinate's angle of travel - * when determining the route - * @param tolerance the deviation the bearing angle can vary while determining the route, - * recommended to be either 45 or 90 degree tolerance - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun addWaypoint( - waypoint: Point, - angle: Double?, - tolerance: Double? - ): Builder { - this.waypoints.add( - NavigationRouteWaypoint( - waypoint, - angle, - tolerance - ) - ) - return this - } - - /** - * Optionally set whether to try to return alternative routes. An alternative is classified as a - * route that is significantly different then the fastest route, but also still reasonably fast. - * Not in all circumstances such a route exists. At the moment at most one alternative can be - * returned. - * - * @param alternatives true if you'd like to receive an alternative route, otherwise false or - * null to use the APIs default value - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun alternatives(alternatives: Boolean?): Builder { - directionsBuilder.alternatives(alternatives) - return this - } - - /** - * Set the instruction language for the directions request, the default is english. Only a - * select number of languages are currently supported, reference the table provided in the see - * link below. - * - * @param language a Locale representing the language you'd like the instructions to be - * written in when returned - * @return this builder for chaining options together - * @see [Supported - * Languages](https://www.mapbox.com/api-documentation/.instructions-languages) - * - * @since 0.5.0 - */ - fun language(language: Locale): Builder { - directionsBuilder.language(language) - return this - } - - internal fun language(context: Context): Builder { - directionsBuilder.language(context.inferDeviceLocale()) - return this - } - - /** - * Whether or not to return additional metadata along the route. Possible values are: - * [DirectionsCriteria.ANNOTATION_DISTANCE], - * [DirectionsCriteria.ANNOTATION_DURATION], - * [DirectionsCriteria.ANNOTATION_DURATION] and - * [DirectionsCriteria.ANNOTATION_CONGESTION]. Several annotation can be used by - * separating them with `,`. - * - * - * If left alone, this will automatically set Congestion to enabled - * - * - * @param annotations string referencing one of the annotation direction criteria's. The strings - * restricted to one or multiple values inside the [AnnotationCriteria] - * or null which will result in no annotations being used - * @return this builder for chaining options together - * @see [RouteLeg object - * documentation](https://www.mapbox.com/api-documentation/.routeleg-object) - * - * @since 0.5.0 - */ - fun annotations(@DirectionsCriteria.AnnotationCriteria vararg annotations: String?): Builder { - directionsBuilder.annotations(*annotations) - return this - } - - /** - * Optionally, Use to filter the road segment the waypoint will be placed on by direction and - * dictates the angle of approach. This option should always be used in conjunction with the - * [.radiuses] parameter. - * - * - * The parameter takes two values per waypoint: the first is an angle clockwise from true north - * between 0 and 360. The second is the range of degrees the angle can deviate by. We recommend - * a value of 45 degrees or 90 degrees for the range, as bearing measurements tend to be - * inaccurate. This is useful for making sure we reroute vehicles on new routes that continue - * traveling in their current direction. A request that does this would provide bearing and - * radius values for the first waypoint and leave the remaining values empty. If provided, the - * list of bearings must be the same length as the list of waypoints, but you can skip a - * coordinate and show its position by passing in null value for both the angle and tolerance - * values. - * - * - * Each bearing value gets associated with the same order which coordinates are arranged in this - * builder. For example, the first bearing added in this builder will be associated with the - * origin `Point`, the nth bearing being associated with the nth waypoint added (if added) - * and the last bearing being added will be associated with the destination. - * - * - * If given the chance, you should pass in the bearing information at the same time the point is - * passed in as a waypoint, this way it is ensured the value is matched up correctly with the - * coordinate. - * - * @param angle double value used for setting the corresponding coordinate's angle of travel - * when determining the route - * @param tolerance the deviation the bearing angle can vary while determining the route, - * recommended to be either 45 or 90 degree tolerance - * @return this builder for chaining options together - * @since 0.5.0 - */ - @Deprecated( - "use the bearing paired with {@link Builder#origin(Point, Double, Double)},\n" + - " {@link Builder#destination(Point, Double, Double)},\n" + - " or {@link Builder#addWaypoint(Point, Double, Double)} instead." - ) - fun addBearing( - @FloatRange(from = 0.0, to = 360.0) angle: Double?, - @FloatRange(from = 0.0, to = 360.0) tolerance: Double? - ): Builder { - directionsBuilder.addBearing(angle, tolerance) - return this - } - - /** - * Optionally, set the maximum distance in meters that each coordinate is allowed to move when - * snapped to a nearby road segment. There must be as many radiuses as there are coordinates in - * the request. Values can be any number greater than 0 or they can be unlimited simply by - * passing [Double.POSITIVE_INFINITY]. - * - * - * If no routable road is found within the radius, a `NoSegment` error is returned. - * - * - * @param radiuses double array containing the radiuses defined in unit meters. - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun radiuses(@FloatRange(from = 0.0) vararg radiuses: Double): Builder { - directionsBuilder.radiuses(*radiuses) - return this - } - - /** - * Change the units used for voice announcements, this does not change the units provided in - * other fields outside of the [com.mapbox.api.directions.v5.models.VoiceInstructions] - * object. - * - * @param voiceUnits one of the values found inside the [VoiceUnitCriteria] - * @return this builder for chaining options together - * @since 0.8.0 - */ - fun voiceUnits(@DirectionsCriteria.VoiceUnitCriteria voiceUnits: String): Builder { - directionsBuilder.voiceUnits(voiceUnits) - return this - } - - internal fun voiceUnits(context: Context): Builder { - directionsBuilder.voiceUnits(context.inferDeviceLocale().getUnitTypeForLocale()) - return this - } - - /** - * Exclude specific road classes such as highways, tolls, and more. - * - * @param exclude one of the values found inside the [ExcludeCriteria] - * @return this builder for chaining options together - * @since 0.8.0 - */ - fun exclude(@DirectionsCriteria.ExcludeCriteria exclude: String?): Builder { - directionsBuilder.exclude(exclude) - return this - } - - /** - * Base package name or other simple string identifier. Used inside the calls user agent header. - * - * @param clientAppName base package name or other simple string identifier - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun clientAppName(clientAppName: String): Builder { - directionsBuilder.clientAppName(clientAppName) - return this - } - - /** - * Required to call when this is being built. If no access token provided, - * [ServicesException] will be thrown. - * - * @param accessToken Mapbox access token, You must have a Mapbox account inorder to use - * the Optimization API - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun accessToken(accessToken: String): Builder { - directionsBuilder.accessToken(accessToken) - return this - } - - /** - * Optionally change the APIs base URL to something other then the default Mapbox one. - * - * @param baseUrl base url used as end point - * @return this builder for chaining options together - * @since 0.5.0 - */ - fun baseUrl(baseUrl: String): Builder { - directionsBuilder.baseUrl(baseUrl) - return this - } - - /** - * Indicates from which side of the road to approach a waypoint. - * Accepts unrestricted (default), curb or null. - * If set to unrestricted, the route can approach waypoints - * from either side of the road. If set to curb, the route will be returned - * so that on arrival, the waypoint will be found on the side that corresponds with the - * driving_side of the region in which the returned route is located. - * If provided, the list of approaches must be the same length as the list of waypoints. - * - * @param approaches null if you'd like the default approaches, - * else one of the options found in - * [com.mapbox.api.directions.v5.DirectionsCriteria.ApproachesCriteria]. - * @return this builder for chaining options together - * @since 0.15.0 - */ - fun addApproaches(vararg approaches: String?): Builder { - directionsBuilder.addApproaches(*approaches) - return this - } - - /** - * Optionally, set which input coordinates should be treated as waypoints / separate legs. - * Note: coordinate indices not added here act as silent waypoints - * - * - * Most useful in combination with steps=true and requests based on traces - * with high sample rates. Can be an index corresponding to any of the input coordinates, - * but must contain the first ( 0 ) and last coordinates' index separated by ;. - * - * @param indices integer array of coordinate indices to be used as waypoints - * @return this builder for chaining options together - */ - fun addWaypointIndices(@IntRange(from = 0) vararg indices: Int): Builder { - val result = Array(indices.size) { 0 } - var index = 0 - for (i in indices) { - result[index++] = i - } - directionsBuilder.addWaypointIndices(*result) - return this - } - - /** - * Custom names for waypoints used for the arrival instruction, - * each separated by ;. Values can be any string and total number of all characters cannot - * exceed 500. If provided, the list of waypointNames must be the same length as the list of - * coordinates, but you can skip a coordinate and show its position with the ; separator. - * - * @param waypointNames Custom names for waypoints used for the arrival instruction. - * @return this builder for chaining options together - * @since 0.15.0 - */ - fun addWaypointNames(vararg waypointNames: String): Builder { - directionsBuilder.addWaypointNames(*waypointNames) - return this - } - - /** - * A list of coordinate pairs used to specify drop-off - * locations that are distinct from the locations specified in coordinates. - * If this parameter is provided, the Directions API will compute the side of the street, - * left or right, for each target based on the waypoint_targets - * and the driving direction. - * The maneuver.modifier, banner and voice instructions will be updated with the computed - * side of street. The number of waypoint targets must be the same as the number of coordinates, - * but you can skip a coordinate pair and show its position in the list adding null. - * Must be used with steps=true. - * - * @param waypointTargets [Point] coordinates for drop-off locations - * @return this builder for chaining options together - * @since 0.26.0 - */ - fun addWaypointTargets(vararg waypointTargets: Point?): Builder { - directionsBuilder.addWaypointTargets(*waypointTargets) - return this - } - - /** - * Adds an optional interceptor to set in the OkHttp client. - * - * @param interceptor to set for OkHttp - * @return this builder for chaining options together - */ - fun interceptor(interceptor: Interceptor): Builder { - directionsBuilder.interceptor(interceptor) - return this - } - - /** - * Adds an optional network interceptor to set in the OkHttp client. - * - * @param interceptor to set for OkHttp - * @return this builder for chaining options together - */ - fun networkInterceptor(interceptor: Interceptor): Builder { - directionsBuilder.networkInterceptor(interceptor) - return this - } - - /** - * Adds an optional event listener to set in the OkHttp client. - * - * @param eventListener to set for OkHttp - * @return this builder for chaining options together - */ - fun eventListener(eventListener: EventListener): Builder { - directionsBuilder.eventListener(eventListener) - return this - } - - /** - * Enables a route to be refreshable - * - * @param enableRefresh whether or not to enable refresh - * @return this builder for chaining options together - */ - fun enableRefresh(enableRefresh: Boolean): Builder { - directionsBuilder.enableRefresh(enableRefresh) - return this - } - - /** - * Sets allowed direction of travel when departing intermediate waypoints. If true the route - * will continue in the same direction of travel. If false the route may continue in the - * opposite direction of travel. API defaults to true for - * [DirectionsCriteria.PROFILE_DRIVING] and false for - * [DirectionsCriteria.PROFILE_WALKING] and [DirectionsCriteria.PROFILE_CYCLING]. - * - * @param continueStraight boolean true if you want to always continue straight, else false. - * @return this builder for chaining options together - */ - fun continueStraight(continueStraight: Boolean): Builder { - directionsBuilder.continueStraight(continueStraight) - return this - } - - /** - * Sets a [NavigationWalkingOptions] object which contains options for use with the - * walking profile. - * - * @param navigationWalkingOptions object holding walking options - * @return this builder for chaining options together - */ - fun walkingOptions(navigationWalkingOptions: WalkingOptionsNavigation): Builder { - directionsBuilder.walkingOptions(navigationWalkingOptions.mapToWalkingOptions()) - return this - } - - /** - * Optionally create a [Builder] based on all variables - * from given [RouteOptions]. - * - * - * Note: [RouteOptions.bearings] are excluded because it's better - * to recalculate these at the time of the request, as your location bearing - * is constantly changing. - * - * @param options containing all variables for request - * @return this builder for chaining options together - * @since 0.9.0 - */ - fun routeOptions(options: RouteOptions): Builder { - - if (!TextUtils.isEmpty(options.baseUrl())) { - directionsBuilder.baseUrl(options.baseUrl()) - } - - if (!TextUtils.isEmpty(options.language())) { - directionsBuilder.language(java.util.Locale(options.language())) - } - - if (options.alternatives() != null) { - directionsBuilder.alternatives(options.alternatives()) - } - - if (!TextUtils.isEmpty(options.profile())) { - directionsBuilder.profile(options.profile()) - } - - if (options.alternatives() != null) { - directionsBuilder.alternatives(options.alternatives()) - } - - if (!TextUtils.isEmpty(options.voiceUnits())) { - directionsBuilder.voiceUnits(options.voiceUnits()) - } - - if (!TextUtils.isEmpty(options.user())) { - directionsBuilder.user(options.user()) - } - - if (!TextUtils.isEmpty(options.accessToken())) { - directionsBuilder.accessToken(options.accessToken()) - } - - if (!TextUtils.isEmpty(options.annotations())) { - directionsBuilder.annotations(options.annotations()) - } - - options.approaches()?.let { approaches -> - if (approaches.isNotEmpty()) { - val result = - approaches.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } - .toTypedArray() - directionsBuilder.addApproaches(*result) - } - } - - options.waypointIndices()?.let { waypointIndices -> - if (waypointIndices.isNotEmpty()) { - val splitWaypointIndices = parseWaypointIndices(waypointIndices) - directionsBuilder.addWaypointIndices(*splitWaypointIndices) - } - } - - options.waypointNames()?.let { waypointNames -> - if (waypointNames.isNotEmpty()) { - val names = - waypointNames.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } - .toTypedArray() - directionsBuilder.addWaypointNames(*names) - } - } - - options.waypointTargets()?.let { waypointTargets -> - if (waypointTargets.isNotEmpty()) { - val splitWaypointTargets = parseWaypointTargets(waypointTargets) - directionsBuilder.addWaypointTargets(*splitWaypointTargets) - } - } - - val walkingOptions = options.walkingOptions() - if (walkingOptions != null) { - directionsBuilder.walkingOptions(walkingOptions) - } - - return this - } - - /** - * This uses the provided parameters set using the [Builder] and adds the required - * settings for navigation to work correctly. - * - * @return a new instance of Navigation Route - * @since 0.5.0 - */ - fun build(): NavigationRoute { - // Set the default values which the user cannot alter. - assembleWaypoints() - directionsBuilder - .steps(true) - .geometries(DirectionsCriteria.GEOMETRY_POLYLINE6) - .overview(DirectionsCriteria.OVERVIEW_FULL) - .voiceInstructions(true) - .bannerInstructions(true) - .roundaboutExits(true) - .eventListener(eventListener) - .enableRefresh(true) - return NavigationRoute(directionsBuilder.build()) - } - - private fun parseWaypointIndices(waypointIndices: String): Array { - val splitWaypointIndices = - waypointIndices.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } - .toTypedArray() - val indices = Array(splitWaypointIndices.size, { 0 }) - var index = 0 - for (waypointIndex in splitWaypointIndices) { - val parsedIndex = Integer.valueOf(waypointIndex) - indices[index++] = parsedIndex - } - return indices - } - - private fun parseWaypointTargets(waypointTargets: String): Array { - val splitWaypointTargets = - waypointTargets.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } - .toTypedArray() - val waypoints = arrayOfNulls(splitWaypointTargets.size) - var index = 0 - for (waypointTarget in splitWaypointTargets) { - val point = waypointTarget.split(COMMA.toRegex()).dropLastWhile { it.isEmpty() } - .toTypedArray() - if (waypointTarget.isEmpty()) { - waypoints[index++] = null - } else { - val longitude = java.lang.Double.valueOf(point[0]) - val latitude = java.lang.Double.valueOf(point[0]) - waypoints[index++] = Point.fromLngLat(longitude, latitude) - } - } - return waypoints - } - - private fun assembleWaypoints() { - origin?.let { origin -> - directionsBuilder.origin(origin.point) - directionsBuilder.addBearing(origin.bearingAngle, origin.tolerance) - } - - for (waypoint in waypoints) { - directionsBuilder.addWaypoint(waypoint.point) - directionsBuilder.addBearing(waypoint.bearingAngle, waypoint.tolerance) - } - - destination?.let { destination -> - directionsBuilder.destination(destination.point) - directionsBuilder.addBearing(destination.bearingAngle, destination.tolerance) - } - } - } -} diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt index 0a9c6ae223e..fa6a3f1c1d3 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/RouteUrl.kt @@ -22,8 +22,8 @@ class RouteUrl( companion object { const val BASE_URL = "https://api.mapbox.com" - const val BASE_URL_P0 = "directions" - const val BASE_URL_P1 = "v5" + const val BASE_URL_API_NAME = "directions" + const val BASE_URL_API_VERSION = "v5" private const val QUERY_PARAM_ACCESS_TOKEN = "access_token" private const val QUERY_PARAM_STEPS = "steps" @@ -112,8 +112,8 @@ class RouteUrl( fun getRequest(): Uri = Uri.parse(BASE_URL) .buildUpon() - .appendPath(BASE_URL_P0) - .appendPath(BASE_URL_P1) + .appendPath(BASE_URL_API_NAME) + .appendPath(BASE_URL_API_VERSION) .appendPath(user) .appendPath(profile) .appendPath(retrieveCoordinates()) diff --git a/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt b/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt index e04e7df870c..00470cfe194 100644 --- a/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt +++ b/libnavigation-base/src/test/java/com/mapbox/navigation/base/route/RouteUrlTest.kt @@ -18,7 +18,7 @@ class RouteUrlTest { @Test fun checkBaseUrl() { setupRouteUrl() - .checkContain("${RouteUrl.BASE_URL}/${RouteUrl.BASE_URL_P0}/${RouteUrl.BASE_URL_P1}/") + .checkContain("${RouteUrl.BASE_URL}/${RouteUrl.BASE_URL_API_NAME}/${RouteUrl.BASE_URL_API_VERSION}/") } @Test @@ -30,8 +30,8 @@ class RouteUrlTest { ) assertNotNull(routeUrl.path) - routeUrl.path!!.contains( - "/12.2,43.4;54.0,90.01;32.9,81.23;42.00210201,13.123121" + assertTrue( + routeUrl.path?.contains("/12.2,43.4;54.0,90.01;32.9,81.23;42.00210201,13.123121") ?: false ) } diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/NavigationController.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/NavigationController.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/DirectionsSession.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/DirectionsSession.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/MapboxDirectionsSession.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/directions/session/MapboxDirectionsSession.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/libnavigation-core/src/test/java/com/mapbox/navigation/directions/session/MapboxDirectionsSessionTest.kt b/libnavigation-core/src/test/java/com/mapbox/navigation/directions/session/MapboxDirectionsSessionTest.kt deleted file mode 100644 index e69de29bb2d..00000000000 From 2d4a0901ec3f30fb36d7e6e0b3fb44bf22d268f3 Mon Sep 17 00:00:00 2001 From: Raman Lebiadzinski Date: Mon, 13 Jan 2020 16:59:53 +0300 Subject: [PATCH 75/75] Fix rebase issues and some nits. Fix default values for route options navigation --- .../route/offboard/MapboxOffboardRouter.kt | 4 +- .../router/NavigationOffboardRoute.kt | 90 +++++++------------ .../offboard/MapboxOffboardRouterTest.kt | 1 - .../route/model/RouteOptionsNavigation.kt | 6 +- 4 files changed, 40 insertions(+), 61 deletions(-) diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt index 1ff18714492..a943c060dae 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouter.kt @@ -26,7 +26,9 @@ class MapboxOffboardRouter(private val accessToken: String, private val context: routeOptions: RouteOptionsNavigation, callback: Router.Callback ) { - navigationRoute = RouteBuilderProvider.getBuilder(accessToken, context).routeOptions(routeOptions).build() + navigationRoute = RouteBuilderProvider.getBuilder(accessToken, context) + .routeOptions(routeOptions) + .build() navigationRoute?.getRoute(object : Callback { override fun onResponse( diff --git a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt index e5a62f6577b..b04583422fc 100644 --- a/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt +++ b/libdirections-offboard/src/main/java/com/mapbox/navigation/route/offboard/router/NavigationOffboardRoute.kt @@ -18,7 +18,7 @@ import retrofit2.Call import retrofit2.Callback /** - * The NavigationRoute class wraps the [MapboxDirections] class with parameters which + * The NavigationOffboardRoute class wraps the [MapboxDirections] class with parameters which * must be set in order for a navigation session to successfully begin. While it is possible * to pass in any [com.mapbox.api.directions.v5.models.DirectionsRoute] into * [MapboxNavigation.startNavigation], using this class will ensure your @@ -26,9 +26,8 @@ import retrofit2.Callback * * Developer Note: MapboxDirections cannot be directly extended since it is an AutoValue class. * - * 1.0 + * 1.0.0 */ - internal class NavigationOffboardRoute constructor( private val mapboxDirections: MapboxDirections @@ -53,7 +52,7 @@ constructor( * [Callback] must be passed into the method to handle both the response and failure. * * @param callback a RetroFit callback which contains an onResponse and onFailure - * @since 0.5.0 + * @since 1.0.0 */ fun getRoute(callback: Callback) { mapboxDirections.enqueueCall(callback) @@ -82,33 +81,33 @@ constructor( * reflect your users use-case. * * - * @since 0.5.0 + * @since 1.0.0 */ class Builder internal constructor(private val directionsBuilder: MapboxDirections.Builder) { - private val eventListener: NavigationRouteEventListener + + companion object { + private const val SEMICOLON = ";" + private const val COMMA = "," + } + + private val eventListener: NavigationRouteEventListener = EVENT_LISTENER private var origin: RoutePointNavigation? = null private var destination: RoutePointNavigation? = null private val waypoints = ArrayList() - private val SEMICOLON = ";" - private val COMMA = "," /** * Private constructor for initializing the raw MapboxDirections.Builder */ - constructor() : this(MapboxDirections.builder()) {} - - init { - this.eventListener = EVENT_LISTENER - } + constructor() : this(MapboxDirections.builder()) /** * This selects which mode of transportation the user will be using while navigating from the * origin to the final destination. The options include driving, driving considering traffic, * walking, and cycling. Using each of these profiles will result in different routing biases. * - * @param profile required to be one of the String values found in the [ProfileCriteria] + * @param profile required to be one of the String values found in the [DirectionsCriteria.ProfileCriteria] * @return this builder for chaining options together - * @since 0.5.0 + * @since 1.0.0 */ internal fun profile(@DirectionsCriteria.ProfileCriteria profile: String): Builder { directionsBuilder.profile(profile) @@ -180,7 +179,7 @@ constructor( * * @param clientAppName base package name or other simple string identifier * @return this builder for chaining options together - * @since 0.5.0 + * @since 1.0.0 */ fun clientAppName(clientAppName: String): Builder { directionsBuilder.clientAppName(clientAppName) @@ -242,31 +241,23 @@ constructor( * * @param options containing all variables for request * @return this builder for chaining options together - * @since 0.9.0 + * @since 1.0.0 */ fun routeOptions(options: RouteOptionsNavigation): Builder { - options.baseUrl?.let { - directionsBuilder.baseUrl(it) - } + directionsBuilder.baseUrl(options.baseUrl) - options.user?.let { - directionsBuilder.user(it) - } + directionsBuilder.user(options.user) - options.profile?.let { - directionsBuilder.profile(it) - } + directionsBuilder.profile(options.profile) - origin = options.coordinates.first() + origin = options.origin waypoints.clear() - waypoints.addAll(options.coordinates.drop(1).dropLast(1)) + waypoints.addAll(options.waypoints) - destination = options.coordinates.last() + destination = options.destination - options.alternatives?.let { - directionsBuilder.alternatives(it) - } + directionsBuilder.alternatives(options.alternatives) options.language?.let { directionsBuilder.language(Locale(it)) @@ -289,45 +280,33 @@ constructor( } } - options.continueStraight?.let { - directionsBuilder.continueStraight(it) - } + directionsBuilder.continueStraight(options.continueStraight) - options.roundaboutExits?.let { - directionsBuilder.roundaboutExits(it) - } + directionsBuilder.roundaboutExits(options.roundaboutExits) options.geometries?.let { - directionsBuilder.geometries(it) + directionsBuilder.geometries(options.geometries) } options.overview?.let { directionsBuilder.overview(it) } - options.steps?.let { - directionsBuilder.steps(it) - } + directionsBuilder.steps(options.steps) options.annotations?.let { directionsBuilder.annotations(it) } - options.voiceInstructions?.let { - directionsBuilder.voiceInstructions(it) - } + directionsBuilder.voiceInstructions(options.voiceInstructions) - options.bannerInstructions?.let { - directionsBuilder.bannerInstructions(it) - } + directionsBuilder.bannerInstructions(options.bannerInstructions) options.voiceUnits?.let { directionsBuilder.voiceUnits(it) } - options.accessToken?.let { - directionsBuilder.accessToken(it) - } + directionsBuilder.accessToken(options.accessToken) options.requestUuid?.let { // TODO Check if needed as it is only set at response time @@ -381,7 +360,7 @@ constructor( * settings for navigation to work correctly. * * @return a new instance of Navigation Route - * @since 0.5.0 + * @since 1.0.0 */ fun build(): NavigationOffboardRoute { // Set the default values which the user cannot alter. @@ -395,11 +374,10 @@ constructor( val splitWaypointIndices = waypointIndices.split(SEMICOLON.toRegex()).dropLastWhile { it.isEmpty() } .toTypedArray() - val indices = Array(splitWaypointIndices.size, { 0 }) - var index = 0 - for (waypointIndex in splitWaypointIndices) { + val indices = Array(splitWaypointIndices.size) { 0 } + for ((index, waypointIndex) in splitWaypointIndices.withIndex()) { val parsedIndex = Integer.valueOf(waypointIndex) - indices[index++] = parsedIndex + indices[index] = parsedIndex } return indices } diff --git a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt index 9d5e5b7612a..171319b1acc 100644 --- a/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt +++ b/libdirections-offboard/src/test/java/com/mapbox/navigation/route/offboard/MapboxOffboardRouterTest.kt @@ -6,7 +6,6 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.navigation.base.route.Router import com.mapbox.navigation.base.route.model.RouteOptionsNavigation import com.mapbox.navigation.route.offboard.base.BaseTest -import com.mapbox.navigation.route.offboard.extension.mapToRoute import com.mapbox.navigation.route.offboard.router.NavigationOffboardRoute import io.mockk.every import io.mockk.mockk diff --git a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt index 57eb6a1e934..061a01667dc 100644 --- a/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt +++ b/libnavigation-base/src/main/java/com/mapbox/navigation/base/route/model/RouteOptionsNavigation.kt @@ -38,11 +38,11 @@ class RouteOptionsNavigation( fun builder(): Builder = Builder() const val ALTERNATIVES_DEFAULT_VALUE = false - const val STEPS_DEFAULT_VALUE = false + const val STEPS_DEFAULT_VALUE = true const val CONTINUE_STRAIGHT_DEFAULT_VALUE = false const val ROUNDABOUT_EXITS_DEFAULT_VALUE = false - const val VOICE_INSTRUCTIONS_DEFAULT_VALUE = false - const val BANNER_INSTRUCTIONS_DEFAULT_VALUE = false + const val VOICE_INSTRUCTIONS_DEFAULT_VALUE = true + const val BANNER_INSTRUCTIONS_DEFAULT_VALUE = true } val coordinates: List