@@ -3,20 +3,31 @@ package vn.vietmap.androidauto.helper
33import vn.vietmap.androidauto.R
44import android.content.Context
55import android.os.Build
6+ import android.text.Spannable
7+ import android.text.SpannableString
8+ import android.util.Log
69import androidx.annotation.RequiresApi
710import androidx.car.app.model.Action
811import androidx.car.app.model.ActionStrip
912import androidx.car.app.model.CarColor
1013import androidx.car.app.model.CarIcon
1114import androidx.car.app.model.CarText
1215import androidx.car.app.model.DateTimeWithZone
16+ import androidx.car.app.model.Distance
17+ import androidx.car.app.model.DistanceSpan
18+ import androidx.car.app.model.ItemList
19+ import androidx.car.app.model.Row
20+ import androidx.car.app.model.Template
1321import androidx.car.app.navigation.model.Maneuver
1422import androidx.car.app.navigation.model.NavigationTemplate
23+ import androidx.car.app.navigation.model.RoutePreviewNavigationTemplate
1524import androidx.car.app.navigation.model.RoutingInfo
1625import androidx.car.app.navigation.model.Step
1726import androidx.car.app.navigation.model.TravelEstimate
1827import androidx.core.graphics.drawable.IconCompat
1928import com.mapbox.api.directions.v5.models.BannerInstructions
29+ import com.mapbox.api.directions.v5.models.DirectionsRoute
30+ import com.mapbox.api.directions.v5.models.DirectionsWaypoint
2031import vn.vietmap.androidauto.vm_interface.IVietMapCarMapController
2132import vn.vietmap.services.android.navigation.v5.routeprogress.RouteProgress
2233import java.time.Duration
@@ -28,22 +39,34 @@ class VietMapCarSurfaceHelper(
2839) {
2940
3041 private var actionStripBuilder = ActionStrip .Builder ()
31- var navigationTemplateBuilder = NavigationTemplate .Builder ()
42+ private var navigationTemplateBuilder = NavigationTemplate .Builder ()
43+ private var routePreviewTemplateBuilder = RoutePreviewNavigationTemplate .Builder ()
44+ private var isPreviewingRoute = false
3245 private var travelEstimate: TravelEstimate .Builder ? = null
3346 private var maneuver: Maneuver .Builder ? = null
3447 private var step: Step .Builder ? = null
3548 private var routingInfo: RoutingInfo .Builder ? = null
49+ private var routeOptions: ItemList .Builder ? = null
3650
3751 init {
3852 initNavigationTemplate()
3953 }
4054
55+ fun getDesignatedTemplate (): Template {
56+ return if (isPreviewingRoute) {
57+ routePreviewTemplateBuilder.build()
58+ } else {
59+ navigationTemplateBuilder.build()
60+ }
61+ }
62+
4163 fun refreshNavigationTemplate () {
4264 navigationTemplateBuilder = NavigationTemplate .Builder ()
4365 initNavigationTemplate()
4466 }
4567
4668 fun initNavigationTemplate () {
69+ isPreviewingRoute = false
4770// navigationTemplateBuilder = NavigationTemplate.Builder()
4871 navigationTemplateBuilder.setBackgroundColor(CarColor .DEFAULT )
4972 actionStripBuilder = ActionStrip .Builder ()
@@ -156,6 +179,7 @@ class VietMapCarSurfaceHelper(
156179 }
157180
158181 fun updateOnStartNavigationTemplate () {
182+ isPreviewingRoute = false
159183 actionStripBuilder = ActionStrip .Builder ()
160184 // Set the action strip.
161185 actionStripBuilder.addAction(
@@ -249,6 +273,7 @@ class VietMapCarSurfaceHelper(
249273 }
250274
251275 fun updateOnSingleMarkerChosen () {
276+ isPreviewingRoute = false
252277 actionStripBuilder = ActionStrip .Builder ()
253278
254279 actionStripBuilder.addAction(
@@ -351,7 +376,11 @@ class VietMapCarSurfaceHelper(
351376
352377 }
353378
354- fun updateOnRouteBuiltTemplate () {
379+ fun updateOnRouteBuiltTemplate (
380+ directionsRoutes : List <DirectionsRoute >,
381+ onRouteSelectionListener : (DirectionsRoute ) -> Unit
382+ ) {
383+ isPreviewingRoute = true
355384 actionStripBuilder = ActionStrip .Builder ()
356385 // Set the action strip.
357386 actionStripBuilder.addAction(
@@ -397,7 +426,6 @@ class VietMapCarSurfaceHelper(
397426
398427 )
399428
400-
401429 actionStripBuilder.addAction(
402430 Action .Builder ()
403431 .setIcon(
@@ -413,7 +441,15 @@ class VietMapCarSurfaceHelper(
413441 }
414442 .build()
415443 )
416- navigationTemplateBuilder.setActionStrip(actionStripBuilder.build())
444+ routePreviewTemplateBuilder.setActionStrip(actionStripBuilder.build())
445+ routePreviewTemplateBuilder.setNavigateAction(
446+ Action .Builder ()
447+ .setTitle(" Bắt đầu" )
448+ .setOnClickListener {
449+ behaviorHandler.startNavigation()
450+ }
451+ .build()
452+ )
417453
418454 // Set the map action strip with the pan and zoom buttons.
419455 val panIconBuilder = CarIcon .Builder (
@@ -422,7 +458,33 @@ class VietMapCarSurfaceHelper(
422458 R .drawable.minus
423459 )
424460 )
425- navigationTemplateBuilder.setMapActionStrip(
461+
462+ routeOptions = ItemList .Builder ()
463+
464+ for ((index, value) in directionsRoutes.withIndex()){
465+ routeOptions?.addItem(
466+ Row .Builder ()
467+ .setTitle(
468+ CarText .Builder (value.legs()?.firstOrNull()?.summary() ? : " " )
469+ .build()
470+ )
471+ .addText(SpannableString (" " ).apply {
472+ setSpan(
473+ DistanceSpan .create(
474+ Distance .create(value.distance()/ 1000 , Distance .UNIT_KILOMETERS )
475+ ), 0 , 1 , Spannable .SPAN_INCLUSIVE_INCLUSIVE
476+ )
477+ })
478+ .build()
479+ )?.setOnSelectedListener {
480+ onRouteSelectionListener(value)
481+ }
482+ }
483+
484+ routePreviewTemplateBuilder.setItemList(
485+ routeOptions!! .build()
486+ )
487+ routePreviewTemplateBuilder.setMapActionStrip(
426488 ActionStrip .Builder ()
427489 .addAction(
428490 Action .Builder (Action .PAN )
@@ -468,7 +530,6 @@ class VietMapCarSurfaceHelper(
468530 .setManeuver(it.build())
469531 .setCue(cueGuide)
470532 }
471-
472533 }
473534
474535 fun updateRoutingInfo (distanceToNextTurn : Double ) {
0 commit comments