feat: Navigation observer
This commit is contained in:
parent
9db0e3611c
commit
0a1c908a9d
4 changed files with 90 additions and 8 deletions
|
@ -2,6 +2,7 @@ package eu.ztsh.garmin.mapbox
|
|||
|
||||
import android.content.res.Resources
|
||||
import android.util.Log
|
||||
import com.mapbox.api.directions.v5.models.RouteOptions
|
||||
import com.mapbox.maps.EdgeInsets
|
||||
import com.mapbox.maps.MapView
|
||||
import com.mapbox.maps.Style
|
||||
|
@ -10,12 +11,45 @@ import com.mapbox.maps.plugin.locationcomponent.location
|
|||
import com.mapbox.maps.plugin.viewport.data.FollowPuckViewportStateOptions
|
||||
import com.mapbox.maps.plugin.viewport.state.FollowPuckViewportState
|
||||
import com.mapbox.maps.plugin.viewport.viewport
|
||||
import eu.ztsh.garmin.MainActivity
|
||||
import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions
|
||||
import com.mapbox.navigation.base.route.NavigationRoute
|
||||
import com.mapbox.navigation.base.route.NavigationRouterCallback
|
||||
import com.mapbox.navigation.base.route.RouterFailure
|
||||
import com.mapbox.navigation.base.route.RouterOrigin
|
||||
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
|
||||
import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider
|
||||
import com.mapbox.navigation.utils.internal.toPoint
|
||||
|
||||
class MapControl(val mapView: MapView, private val resources: Resources) {
|
||||
|
||||
val navigationLocationProvider = NavigationLocationProvider()
|
||||
|
||||
val routesRequestCallback = object : NavigationRouterCallback {
|
||||
override fun onRoutesReady(routes: List<NavigationRoute>, @RouterOrigin routerOrigin: String) {
|
||||
MapboxNavigationApp.current()?.setNavigationRoutes(routes)
|
||||
}
|
||||
|
||||
override fun onFailure(reasons: List<RouterFailure>, routeOptions: RouteOptions) {
|
||||
Log.e(TAG, "onFailure: ")
|
||||
}
|
||||
|
||||
override fun onCanceled(routeOptions: RouteOptions, @RouterOrigin routerOrigin: String) {
|
||||
Log.w(TAG, "onCanceled: ")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class MapControl(private val context: MainActivity, private val mapView: MapView, private val resources: Resources) {
|
||||
|
||||
fun init() {
|
||||
mapView.mapboxMap.loadStyle(Style.TRAFFIC_DAY) // TODO: base on sun position
|
||||
|
||||
mapView.location.apply {
|
||||
// locationProvider = this.getLocationProvider()
|
||||
// setLocationProvider(navigationLocationProvider)
|
||||
puckBearingEnabled = true
|
||||
enabled = true
|
||||
}
|
||||
|
||||
follow(true)
|
||||
setGestures(mapView)
|
||||
}
|
||||
|
@ -52,6 +86,16 @@ class MapControl(private val context: MainActivity, private val mapView: MapView
|
|||
}
|
||||
true
|
||||
}
|
||||
addOnMapLongClickListener { point ->
|
||||
MapboxNavigationApp.current()?.requestRoutes(
|
||||
RouteOptions.builder()
|
||||
.applyDefaultNavigationOptions()
|
||||
.coordinatesList(mutableListOf(navigationLocationProvider.lastLocation!!.toPoint(), point))
|
||||
.build(),
|
||||
routesRequestCallback
|
||||
)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue