From 465ddd4316170a960ca8e1190de36a2af1ea8368 Mon Sep 17 00:00:00 2001 From: VysotskiVadim Date: Wed, 3 Aug 2022 15:32:48 +0200 Subject: [PATCH 01/13] added preview activity --- app/src/main/AndroidManifest.xml | 4 ++++ .../navigation/examples/ExamplesList.kt | 7 +++++++ .../examples/preview/PreviewActivity.kt | 12 +++++++++++ .../preview/res/layout/activity_preview.xml | 20 +++++++++++++++++++ .../examples/preview/res/values/strings.xml | 4 ++++ .../examples/preview/res/values/styles.xml | 3 +++ 6 files changed, 50 insertions(+) create mode 100644 app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt create mode 100644 app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml create mode 100644 app/src/main/java/com/mapbox/navigation/examples/preview/res/values/strings.xml create mode 100644 app/src/main/java/com/mapbox/navigation/examples/preview/res/values/styles.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bce98b0c..3344e7d2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -109,6 +109,10 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/mapbox/navigation/examples/ExamplesList.kt b/app/src/main/java/com/mapbox/navigation/examples/ExamplesList.kt index f02671d8..00e30931 100644 --- a/app/src/main/java/com/mapbox/navigation/examples/ExamplesList.kt +++ b/app/src/main/java/com/mapbox/navigation/examples/ExamplesList.kt @@ -11,6 +11,7 @@ import com.mapbox.navigation.examples.junctions.ShowJunctionsActivity import com.mapbox.navigation.examples.location.ShowCurrentLocationActivity import com.mapbox.navigation.examples.maneuvers.ShowManeuversActivity import com.mapbox.navigation.examples.multiplewaypoints.MultipleWaypointsActivity +import com.mapbox.navigation.examples.preview.PreviewActivity import com.mapbox.navigation.examples.replay.ReplayHistoryActivity import com.mapbox.navigation.examples.routeline.RenderRouteLineActivity import com.mapbox.navigation.examples.signboard.MapboxSignboardActivity @@ -22,6 +23,12 @@ import com.mapbox.navigation.examples.turnbyturn.TurnByTurnExperienceActivity import com.mapbox.navigation.examples.voice.PlayVoiceInstructionsActivity fun Context.examplesList() = listOf( + MapboxExample( + ContextCompat.getDrawable(this, R.drawable.mapbox_screenshot_replay), + getString(R.string.title_preview), + getString(R.string.description_preview), + PreviewActivity::class.java + ), MapboxExample( ContextCompat.getDrawable(this, R.drawable.mapbox_ic_user_current_location), getString(R.string.title_current_location), diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt new file mode 100644 index 00000000..b31be3fa --- /dev/null +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt @@ -0,0 +1,12 @@ +package com.mapbox.navigation.examples.preview + +import android.app.Activity +import android.os.Bundle +import com.mapbox.navigation.examples.R + +class PreviewActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_preview) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml b/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml new file mode 100644 index 00000000..5ccbea0a --- /dev/null +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/res/values/strings.xml b/app/src/main/java/com/mapbox/navigation/examples/preview/res/values/strings.xml new file mode 100644 index 00000000..3eec2e84 --- /dev/null +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/res/values/strings.xml @@ -0,0 +1,4 @@ + + Route Preview + Route Preview + diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/res/values/styles.xml b/app/src/main/java/com/mapbox/navigation/examples/preview/res/values/styles.xml new file mode 100644 index 00000000..f11f7450 --- /dev/null +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/res/values/styles.xml @@ -0,0 +1,3 @@ + + + From 98d571534ee17daf7cdf03eba0abf909b6bbcadc Mon Sep 17 00:00:00 2001 From: VysotskiVadim Date: Wed, 3 Aug 2022 16:29:06 +0200 Subject: [PATCH 02/13] display current position --- .../examples/preview/PreviewActivity.kt | 164 +++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt index b31be3fa..0e412a44 100644 --- a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt @@ -1,12 +1,174 @@ package com.mapbox.navigation.examples.preview +import android.annotation.SuppressLint import android.app.Activity +import android.location.Location import android.os.Bundle +import androidx.core.content.ContextCompat +import com.mapbox.maps.MapView +import com.mapbox.maps.MapboxMap +import com.mapbox.maps.Style +import com.mapbox.maps.plugin.LocationPuck2D +import com.mapbox.maps.plugin.animation.camera +import com.mapbox.maps.plugin.gestures.gestures +import com.mapbox.maps.plugin.locationcomponent.location +import com.mapbox.navigation.base.options.NavigationOptions +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.MapboxNavigationProvider +import com.mapbox.navigation.core.trip.session.LocationMatcherResult +import com.mapbox.navigation.core.trip.session.LocationObserver import com.mapbox.navigation.examples.R +import com.mapbox.navigation.examples.databinding.ActivityPreviewBinding +import com.mapbox.navigation.ui.maps.camera.NavigationCamera +import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSource +import com.mapbox.navigation.ui.maps.camera.lifecycle.NavigationBasicGesturesHandler +import com.mapbox.navigation.ui.maps.camera.transition.NavigationCameraTransitionOptions +import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider class PreviewActivity : Activity() { + + /** + * Bindings to the example layout. + */ + private lateinit var binding: ActivityPreviewBinding + + /** + * Mapbox Maps entry point obtained from the [MapView]. + * You need to get a new reference to this object whenever the [MapView] is recreated. + */ + private lateinit var mapboxMap: MapboxMap + + /** + * [NavigationLocationProvider] is a utility class that helps to provide location updates generated by the Navigation SDK + * to the Maps SDK in order to update the user location indicator on the map. + */ + private val navigationLocationProvider = NavigationLocationProvider() + + /** + * Mapbox Navigation entry point. There should only be one instance of this object for the app. + * You can use [MapboxNavigationProvider] to help create and obtain that instance. + */ + private lateinit var mapboxNavigation: MapboxNavigation + + /** + * Used to execute camera transitions based on the data generated by the [viewportDataSource]. + * This includes transitions from route overview to route following and continuously updating the camera as the location changes. + */ + private lateinit var navigationCamera: NavigationCamera + + /** + * Produces the camera frames based on the location and routing data for the [navigationCamera] to execute. + */ + private lateinit var viewportDataSource: MapboxNavigationViewportDataSource + + + /** + * Gets notified with location updates. + * + * Exposes raw updates coming directly from the location services + * and the updates enhanced by the Navigation SDK (cleaned up and matched to the road). + */ + private val locationObserver = object : LocationObserver { + var firstLocationUpdateReceived = false + + override fun onNewRawLocation(rawLocation: Location) { + // use raw location only for cycling and walking cases. Pre + } + + override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { + val enhancedLocation = locationMatcherResult.enhancedLocation + // update location puck's position on the map + navigationLocationProvider.changePosition( + location = enhancedLocation, + keyPoints = locationMatcherResult.keyPoints, + ) + + // update camera position to account for new location + viewportDataSource.onLocationChanged(enhancedLocation) + viewportDataSource.evaluate() + + // if this is the first location update the activity has received, + // it's best to immediately move the camera to the current user location + if (!firstLocationUpdateReceived) { + firstLocationUpdateReceived = true + navigationCamera.requestNavigationCameraToOverview( + stateTransitionOptions = NavigationCameraTransitionOptions.Builder() + .maxDuration(0) // instant transition + .build() + ) + } + } + } + + @SuppressLint("MissingPermission") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_preview) + binding = ActivityPreviewBinding.inflate(layoutInflater) + setContentView(binding.root) + + mapboxMap = binding.mapView.getMapboxMap() + + // initialize the location puck + binding.mapView.location.apply { + this.locationPuck = LocationPuck2D( + bearingImage = ContextCompat.getDrawable( + this@PreviewActivity, + R.drawable.mapbox_navigation_puck_icon + ) + ) + setLocationProvider(navigationLocationProvider) + enabled = true + } + + // initialize Mapbox Navigation + mapboxNavigation = if (MapboxNavigationProvider.isCreated()) { + MapboxNavigationProvider.retrieve() + } else { + MapboxNavigationProvider.create( + NavigationOptions.Builder(this.applicationContext) + .accessToken(getString(R.string.mapbox_access_token)) + .build() + ) + } + + // initialize Navigation Camera + viewportDataSource = MapboxNavigationViewportDataSource(mapboxMap) + navigationCamera = NavigationCamera( + mapboxMap, + binding.mapView.camera, + viewportDataSource + ) + // set the animations lifecycle listener to ensure the NavigationCamera stops + // automatically following the user location when the map is interacted with + binding.mapView.camera.addCameraAnimationsLifecycleListener( + NavigationBasicGesturesHandler(navigationCamera) + ) + + // load map style + mapboxMap.loadStyleUri( + Style.MAPBOX_STREETS + ) { + // add long click listener that search for a route to the clicked destination + binding.mapView.gestures.addOnMapLongClickListener { point -> + true + } + } + + mapboxNavigation.startTripSession(false) + } + + override fun onStart() { + super.onStart() + mapboxNavigation.registerLocationObserver(locationObserver) + } + + override fun onStop() { + super.onStop() + mapboxNavigation.unregisterLocationObserver(locationObserver) + } + + override fun onDestroy() { + super.onDestroy() + mapboxNavigation.onDestroy() } } \ No newline at end of file From 3d57ad783186c385c2d17025740964819afcfb1f Mon Sep 17 00:00:00 2001 From: VysotskiVadim Date: Wed, 3 Aug 2022 16:45:15 +0200 Subject: [PATCH 03/13] very simple preview --- .../examples/preview/PreviewActivity.kt | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt index 0e412a44..a4f5f04c 100644 --- a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt @@ -5,6 +5,10 @@ import android.app.Activity import android.location.Location import android.os.Bundle import androidx.core.content.ContextCompat +import com.mapbox.api.directions.v5.models.Bearing +import com.mapbox.api.directions.v5.models.DirectionsRoute +import com.mapbox.api.directions.v5.models.RouteOptions +import com.mapbox.geojson.Point import com.mapbox.maps.MapView import com.mapbox.maps.MapboxMap import com.mapbox.maps.Style @@ -12,7 +16,14 @@ import com.mapbox.maps.plugin.LocationPuck2D import com.mapbox.maps.plugin.animation.camera import com.mapbox.maps.plugin.gestures.gestures import com.mapbox.maps.plugin.locationcomponent.location +import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions +import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions import com.mapbox.navigation.base.options.NavigationOptions +import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.base.route.NavigationRouterCallback +import com.mapbox.navigation.base.route.RouterCallback +import com.mapbox.navigation.base.route.RouterFailure +import com.mapbox.navigation.base.route.RouterOrigin import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.MapboxNavigationProvider import com.mapbox.navigation.core.trip.session.LocationMatcherResult @@ -24,6 +35,9 @@ import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSou import com.mapbox.navigation.ui.maps.camera.lifecycle.NavigationBasicGesturesHandler import com.mapbox.navigation.ui.maps.camera.transition.NavigationCameraTransitionOptions import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider +import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi +import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView +import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions class PreviewActivity : Activity() { @@ -100,6 +114,17 @@ class PreviewActivity : Activity() { } } + /** + * Generates updates for the [routeLineView] with the geometries and properties of the routes that should be drawn on the map. + */ + private lateinit var routeLineApi: MapboxRouteLineApi + + /** + * Draws route lines on the map based on the data from the [routeLineApi] + */ + private lateinit var routeLineView: MapboxRouteLineView + + @SuppressLint("MissingPermission") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -150,10 +175,21 @@ class PreviewActivity : Activity() { ) { // add long click listener that search for a route to the clicked destination binding.mapView.gestures.addOnMapLongClickListener { point -> + findRoute(point) true } } + // initialize route line, the withRouteLineBelowLayerId is specified to place + // the route line below road labels layer on the map + // the value of this option will depend on the style that you are using + // and under which layer the route line should be placed on the map layers stack + val mapboxRouteLineOptions = MapboxRouteLineOptions.Builder(this) + .withRouteLineBelowLayerId("road-label") + .build() + routeLineApi = MapboxRouteLineApi(mapboxRouteLineOptions) + routeLineView = MapboxRouteLineView(mapboxRouteLineOptions) + mapboxNavigation.startTripSession(false) } @@ -171,4 +207,69 @@ class PreviewActivity : Activity() { super.onDestroy() mapboxNavigation.onDestroy() } + + private fun findRoute(destination: Point) { + val originLocation = navigationLocationProvider.lastLocation + val originPoint = originLocation?.let { + Point.fromLngLat(it.longitude, it.latitude) + } ?: return + + // execute a route request + // it's recommended to use the + // applyDefaultNavigationOptions and applyLanguageAndVoiceUnitOptions + // that make sure the route request is optimized + // to allow for support of all of the Navigation SDK features + mapboxNavigation.requestRoutes( + RouteOptions.builder() + .applyDefaultNavigationOptions() + .applyLanguageAndVoiceUnitOptions(this) + .coordinatesList(listOf(originPoint, destination)) + // provide the bearing for the origin of the request to ensure + // that the returned route faces in the direction of the current user movement + .bearingsList( + listOf( + Bearing.builder() + .angle(originLocation.bearing.toDouble()) + .degrees(45.0) + .build(), + null + ) + ) + .layersList(listOf(mapboxNavigation.getZLevel(), null)) + .build(), + object : NavigationRouterCallback { + override fun onRoutesReady( + routes: List, + routerOrigin: RouterOrigin + ) { + previewRoutes(routes) + } + + override fun onFailure( + reasons: List, + routeOptions: RouteOptions + ) { + // no impl + } + + override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { + // no impl + } + } + ) + } + + private fun previewRoutes(routes: List) { + routeLineApi.setNavigationRoutes(routes) { value -> + mapboxMap.getStyle()?.apply { + routeLineView.renderRouteDrawData(this, value) + + + // update the camera position to account for the new route + viewportDataSource.onRouteChanged(routes.first()) + viewportDataSource.evaluate() + navigationCamera.requestNavigationCameraToOverview() + } + } + } } \ No newline at end of file From 339e50ab2552ba14b361db9ad096198fe39a196a Mon Sep 17 00:00:00 2001 From: VysotskiVadim Date: Thu, 4 Aug 2022 14:42:30 +0200 Subject: [PATCH 04/13] implemented transition from preview to active guidence --- .../examples/preview/PreviewActivity.kt | 123 +++++++++++++++++- .../preview/res/layout/activity_preview.xml | 46 +++++-- .../examples/preview/res/values/strings.xml | 3 + 3 files changed, 155 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt index a4f5f04c..a9078135 100644 --- a/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/PreviewActivity.kt @@ -2,13 +2,16 @@ package com.mapbox.navigation.examples.preview import android.annotation.SuppressLint import android.app.Activity +import android.content.res.Configuration +import android.content.res.Resources import android.location.Location import android.os.Bundle +import android.view.View import androidx.core.content.ContextCompat import com.mapbox.api.directions.v5.models.Bearing -import com.mapbox.api.directions.v5.models.DirectionsRoute import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point +import com.mapbox.maps.EdgeInsets import com.mapbox.maps.MapView import com.mapbox.maps.MapboxMap import com.mapbox.maps.Style @@ -21,11 +24,11 @@ import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions import com.mapbox.navigation.base.options.NavigationOptions import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.base.route.NavigationRouterCallback -import com.mapbox.navigation.base.route.RouterCallback import com.mapbox.navigation.base.route.RouterFailure import com.mapbox.navigation.base.route.RouterOrigin import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.MapboxNavigationProvider +import com.mapbox.navigation.core.directions.session.RoutesObserver import com.mapbox.navigation.core.trip.session.LocationMatcherResult import com.mapbox.navigation.core.trip.session.LocationObserver import com.mapbox.navigation.examples.R @@ -38,6 +41,7 @@ import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions +import com.mapbox.navigation.ui.maps.route.line.model.RouteLine class PreviewActivity : Activity() { @@ -75,6 +79,44 @@ class PreviewActivity : Activity() { */ private lateinit var viewportDataSource: MapboxNavigationViewportDataSource + /* + * Below are generated camera padding values to ensure that the route fits well on screen while + * other elements are overlaid on top of the map (including instruction view, buttons, etc.) + */ + private val pixelDensity = Resources.getSystem().displayMetrics.density + private val overviewPadding: EdgeInsets by lazy { + EdgeInsets( + 140.0 * pixelDensity, + 40.0 * pixelDensity, + 120.0 * pixelDensity, + 40.0 * pixelDensity + ) + } + private val landscapeOverviewPadding: EdgeInsets by lazy { + EdgeInsets( + 30.0 * pixelDensity, + 380.0 * pixelDensity, + 110.0 * pixelDensity, + 20.0 * pixelDensity + ) + } + private val followingPadding: EdgeInsets by lazy { + EdgeInsets( + 180.0 * pixelDensity, + 40.0 * pixelDensity, + 150.0 * pixelDensity, + 40.0 * pixelDensity + ) + } + private val landscapeFollowingPadding: EdgeInsets by lazy { + EdgeInsets( + 30.0 * pixelDensity, + 380.0 * pixelDensity, + 110.0 * pixelDensity, + 40.0 * pixelDensity + ) + } + /** * Gets notified with location updates. @@ -114,6 +156,39 @@ class PreviewActivity : Activity() { } } + private val routesObserver = RoutesObserver { routeUpdateResult -> + val navigationRoutes = routeUpdateResult.navigationRoutes + if (navigationRoutes.isNotEmpty()) { + routeLineApi.setNavigationRoutes( + navigationRoutes, + mapboxNavigation.getAlternativeMetadataFor(navigationRoutes) + ) { value -> + mapboxMap.getStyle()?.apply { + routeLineView.renderRouteDrawData(this, value) + } + } + + // update the camera position to account for the new route + viewportDataSource.onRouteChanged(navigationRoutes.first()) + viewportDataSource.evaluate() + } else { + // remove the route line and route arrow from the map + val style = mapboxMap.getStyle() + if (style != null) { + routeLineApi.clearRouteLine { value -> + routeLineView.renderClearRouteLineValue( + style, + value + ) + } + } + + // remove the route reference from camera position evaluations + viewportDataSource.clearRouteData() + viewportDataSource.evaluate() + } + } + /** * Generates updates for the [routeLineView] with the geometries and properties of the routes that should be drawn on the map. */ @@ -163,6 +238,17 @@ class PreviewActivity : Activity() { binding.mapView.camera, viewportDataSource ) + // set the padding values depending on screen orientation and visible view layout + if (this.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { + viewportDataSource.overviewPadding = landscapeOverviewPadding + } else { + viewportDataSource.overviewPadding = overviewPadding + } + if (this.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { + viewportDataSource.followingPadding = landscapeFollowingPadding + } else { + viewportDataSource.followingPadding = followingPadding + } // set the animations lifecycle listener to ensure the NavigationCamera stops // automatically following the user location when the map is interacted with binding.mapView.camera.addCameraAnimationsLifecycleListener( @@ -263,13 +349,42 @@ class PreviewActivity : Activity() { routeLineApi.setNavigationRoutes(routes) { value -> mapboxMap.getStyle()?.apply { routeLineView.renderRouteDrawData(this, value) - - // update the camera position to account for the new route viewportDataSource.onRouteChanged(routes.first()) viewportDataSource.evaluate() navigationCamera.requestNavigationCameraToOverview() } } + binding.buttonStartActiveGuidance.apply { + visibility = View.VISIBLE + setOnClickListener { + startActiveGuidance(routes) + } + } } + + private fun startActiveGuidance(routes: List) { + binding.buttonStartActiveGuidance.visibility = View.GONE + mapboxNavigation.registerRoutesObserver(routesObserver) + mapboxNavigation.setNavigationRoutes(routes) + navigationCamera.requestNavigationCameraToFollowing() + binding.buttonFinishActiveGuidance.apply { + visibility = View.VISIBLE + setOnClickListener { + visibility = View.GONE + mapboxNavigation.setNavigationRoutes(emptyList()) + navigationCamera.requestNavigationCameraToOverview() + mapboxNavigation.unregisterRoutesObserver(routesObserver) + mapboxMap.getStyle()?.let { style -> + routeLineApi.clearRouteLine { value -> + routeLineView.renderClearRouteLineValue( + style, + value + ) + } + } + } + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml b/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml index 5ccbea0a..454bd615 100644 --- a/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml +++ b/app/src/main/java/com/mapbox/navigation/examples/preview/res/layout/activity_preview.xml @@ -1,20 +1,40 @@ - + android:layout_height="match_parent"> - + + +