Skip to content

Commit 7147260

Browse files
committed
added additional maps navigation features
1 parent cfa6d8e commit 7147260

File tree

12 files changed

+372
-122
lines changed

12 files changed

+372
-122
lines changed

android/app/androidauto/src/main/java/vn/vietmap/androidauto/helper/VietMapCarSurfaceHelper.kt

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,31 @@ package vn.vietmap.androidauto.helper
33
import vn.vietmap.androidauto.R
44
import android.content.Context
55
import android.os.Build
6+
import android.text.Spannable
7+
import android.text.SpannableString
8+
import android.util.Log
69
import androidx.annotation.RequiresApi
710
import androidx.car.app.model.Action
811
import androidx.car.app.model.ActionStrip
912
import androidx.car.app.model.CarColor
1013
import androidx.car.app.model.CarIcon
1114
import androidx.car.app.model.CarText
1215
import 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
1321
import androidx.car.app.navigation.model.Maneuver
1422
import androidx.car.app.navigation.model.NavigationTemplate
23+
import androidx.car.app.navigation.model.RoutePreviewNavigationTemplate
1524
import androidx.car.app.navigation.model.RoutingInfo
1625
import androidx.car.app.navigation.model.Step
1726
import androidx.car.app.navigation.model.TravelEstimate
1827
import androidx.core.graphics.drawable.IconCompat
1928
import 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
2031
import vn.vietmap.androidauto.vm_interface.IVietMapCarMapController
2132
import vn.vietmap.services.android.navigation.v5.routeprogress.RouteProgress
2233
import 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

Comments
 (0)