feat: Navigation observer

This commit is contained in:
Piotr Dec 2024-07-19 22:15:32 +02:00
parent 9db0e3611c
commit 0a1c908a9d
Signed by: stawros
GPG key ID: F89F27AD8F881A91
4 changed files with 90 additions and 8 deletions

View file

@ -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
}
}
}