Skip to content

Commit 489d9e7

Browse files
committed
fix
1 parent 96f10e3 commit 489d9e7

6 files changed

Lines changed: 40 additions & 57 deletions

File tree

examples/src/main/java/com/mapbox/navigation/examples/core/ReplayHistoryActivity.kt

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
2323
import com.mapbox.navigation.base.options.NavigationOptions
2424
import com.mapbox.navigation.core.MapboxNavigation
2525
import com.mapbox.navigation.core.directions.session.RoutesObserver
26-
import com.mapbox.navigation.core.replay.history.ReplayEventBase
2726
import com.mapbox.navigation.core.replay.history.ReplayHistorySession
28-
import com.mapbox.navigation.core.replay.history.ReplaySetNavigationRoute
2927
import com.mapbox.navigation.core.trip.session.LocationMatcherResult
3028
import com.mapbox.navigation.core.trip.session.LocationObserver
3129
import com.mapbox.navigation.core.trip.session.RouteProgressObserver
@@ -209,21 +207,21 @@ class ReplayHistoryActivity : AppCompatActivity() {
209207
private val locationObserver = object : LocationObserver {
210208
override fun onNewRawLocation(rawLocation: Location) {}
211209
override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) {
212-
logI(ReplayHistorySession.LOG_CATEGORY) {
213-
"onNewLocationMatcherResult $locationMatcherResult"
214-
}
215210
viewportDataSource.onLocationChanged(locationMatcherResult.enhancedLocation)
216211
viewportDataSource.evaluate()
217212
if (!isLocationInitialized) {
213+
logI(ReplayHistorySession.LOG_CATEGORY) {
214+
"onNewLocationMatcherResult initialize location"
215+
}
218216
isLocationInitialized = true
219217
navigationCamera.requestNavigationCameraToOverview(
220218
stateTransitionOptions = NavigationCameraTransitionOptions.Builder()
221219
.maxDuration(0)
222220
.build(),
223221
)
222+
} else {
224223
navigationCamera.requestNavigationCameraToFollowing()
225224
}
226-
227225
navigationLocationProvider.changePosition(
228226
locationMatcherResult.enhancedLocation,
229227
locationMatcherResult.keyPoints,
@@ -330,23 +328,12 @@ class ReplayHistoryActivity : AppCompatActivity() {
330328
@SuppressLint("MissingPermission")
331329
private fun handleHistoryFileSelected() {
332330
loadNavigationJob = CoroutineScope(Dispatchers.Main).launch {
333-
val historyReader = historyFileLoader.loadReplayHistory(
334-
this@ReplayHistoryActivity
335-
)
331+
val historyReader = historyFileLoader.loadReplayHistory(this@ReplayHistoryActivity)
336332
replayHistorySession.setHistoryFile(historyReader.filePath)
337333
isLocationInitialized = false
338334
}
339335
}
340336

341-
@SuppressLint("SetTextI18n")
342-
private fun updateReplayStatus(playbackEvents: List<ReplayEventBase>) {
343-
playbackEvents.lastOrNull()?.eventTimestamp?.let {
344-
val currentSecond = mapboxNavigation.mapboxReplayer.eventSeconds(it).toInt()
345-
val durationSecond = mapboxNavigation.mapboxReplayer.durationSeconds().toInt()
346-
binding.playerStatus.text = "$currentSecond:$durationSecond"
347-
}
348-
}
349-
350337
@SuppressLint("MissingPermission")
351338
private fun setupReplayControls() {
352339
binding.seekBar.max = 8
@@ -369,20 +356,5 @@ class ReplayHistoryActivity : AppCompatActivity() {
369356
override fun onStopTrackingTouch(seekBar: SeekBar) {}
370357
}
371358
)
372-
373-
mapboxNavigation.mapboxReplayer.registerObserver { events ->
374-
updateReplayStatus(events)
375-
events.forEach {
376-
when (it) {
377-
is ReplaySetNavigationRoute -> setRoute(it)
378-
}
379-
}
380-
}
381-
}
382-
383-
private fun setRoute(replaySetRoute: ReplaySetNavigationRoute) {
384-
replaySetRoute.route?.let { directionRoute ->
385-
mapboxNavigation.setNavigationRoutes(Collections.singletonList(directionRoute))
386-
}
387359
}
388360
}

examples/src/main/java/com/mapbox/navigation/examples/core/replay/HistoryFileLoader.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@ package com.mapbox.navigation.examples.core.replay
33
import android.annotation.SuppressLint
44
import android.content.Context
55
import com.mapbox.navigation.core.history.MapboxHistoryReader
6-
import com.mapbox.navigation.core.replay.history.ReplayEventBase
7-
import com.mapbox.navigation.core.replay.history.ReplayHistoryMapper
8-
import com.mapbox.navigation.core.replay.history.ReplaySetNavigationRoute
96
import kotlinx.coroutines.Dispatchers
107
import kotlinx.coroutines.withContext
118

examples/src/main/res/layout/activity_replay_history_layout.xml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,10 @@
5959
android:id="@+id/seekBar"
6060
android:layout_width="match_parent"
6161
android:layout_height="wrap_content"
62-
android:paddingBottom="6dp"
62+
android:paddingBottom="30dp"
6363
android:paddingTop="6dp"
6464
/>
6565

66-
<TextView
67-
android:id="@+id/playerStatus"
68-
android:layout_width="match_parent"
69-
android:layout_height="wrap_content"
70-
android:padding="6dp"
71-
android:text="Paused"/>
72-
7366
</LinearLayout>
7467

7568
</com.google.android.material.card.MaterialCardView>

libnavigation-core/src/main/java/com/mapbox/navigation/core/replay/history/ReplayHistoryMapper.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.mapbox.navigation.core.history.model.HistoryEventSetRoute
99
import com.mapbox.navigation.core.history.model.HistoryEventUpdateLocation
1010
import com.mapbox.navigation.core.replay.MapboxReplayer
1111
import com.mapbox.navigation.core.replay.route.ReplayRouteMapper
12+
import com.mapbox.navigation.utils.internal.logW
1213

1314
/**
1415
* Mapper that can be used with [ReplayHistoryMapper].
@@ -129,6 +130,14 @@ class ReplayHistoryMapper private constructor(
129130
* @return [ReplayHistoryMapper]
130131
*/
131132
fun build(): ReplayHistoryMapper {
133+
if (setRouteMapper === DefaultSetRouteMapper) {
134+
logW(
135+
"Mapper uses a deprecated default `setRouteMapper` based on " +
136+
"`ReplaySetRoute` type. Consider switching to a mapper based on " +
137+
"`ReplayNavigationSetRoute`.",
138+
"ReplayHistoryMapper"
139+
)
140+
}
132141
return ReplayHistoryMapper(
133142
locationMapper = locationMapper,
134143
setRouteMapper = setRouteMapper,
@@ -184,9 +193,10 @@ class ReplayHistoryMapper private constructor(
184193

185194
private val DefaultSetRouteMapper =
186195
ReplayHistoryEventMapper<HistoryEventSetRoute> {
187-
ReplaySetNavigationRoute.Builder(it.eventTimestamp)
188-
.route(it.navigationRoute)
189-
.build()
196+
ReplaySetRoute(
197+
eventTimestamp = it.eventTimestamp,
198+
route = it.directionsRoute
199+
)
190200
}
191201

192202
private val DefaultStatusMapper =

libnavigation-core/src/main/java/com/mapbox/navigation/core/replay/history/ReplayHistorySession.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.mapbox.navigation.core.MapboxNavigation
55
import com.mapbox.navigation.core.history.MapboxHistoryReader
66
import com.mapbox.navigation.core.history.model.HistoryEvent
77
import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
8-
import com.mapbox.navigation.utils.internal.logI
98
import kotlinx.coroutines.CoroutineScope
109
import kotlinx.coroutines.Dispatchers
1110
import kotlinx.coroutines.SupervisorJob
@@ -19,23 +18,22 @@ import kotlinx.coroutines.flow.launchIn
1918
import kotlinx.coroutines.flow.map
2019
import kotlinx.coroutines.flow.onEach
2120
import kotlinx.coroutines.flow.update
21+
import java.util.Collections
2222

2323
/**
2424
* Used to create a replay trip session.
2525
*/
2626
@ExperimentalPreviewMapboxNavigationAPI
2727
class ReplayHistorySession : MapboxNavigationObserver {
2828

29-
private val optionsFlow = MutableStateFlow(
30-
ReplayHistorySessionOptions.Builder().build()
31-
)
29+
private val optionsFlow = MutableStateFlow(ReplayHistorySessionOptions.Builder().build())
3230
private var mapboxHistoryReader: MapboxHistoryReader? = null
3331
private var mapboxNavigation: MapboxNavigation? = null
3432
private var lastHistoryEvent: ReplayEventBase? = null
3533
private var coroutineScope: CoroutineScope? = null
3634

3735
private val replayEventsObserver = ReplayEventsObserver { events ->
38-
logI(LOG_CATEGORY) { "replayEvents ${events.joinToString("\n")}" }
36+
events.filterIsInstance<ReplaySetNavigationRoute>().forEach(::setRoute)
3937
if (isLastEventPlayed(events)) {
4038
pushMorePoints()
4139
}
@@ -72,16 +70,18 @@ class ReplayHistorySession : MapboxNavigationObserver {
7270
fun setOptions(options: ReplayHistorySessionOptions) = optionsFlow.update { options }
7371

7472
fun setHistoryFile(absolutePath: String) {
75-
logI(LOG_CATEGORY) { "setHistoryFile $absolutePath" }
7673
optionsFlow.update { it.toBuilder().filePath(absolutePath).build() }
7774
}
7875

7976
private fun observeStateFlow(mapboxNavigation: MapboxNavigation): Flow<*> {
8077
return optionsFlow.mapDistinct { it.filePath }.onEach { historyFile ->
8178
mapboxNavigation.mapboxReplayer.clearEvents()
79+
mapboxNavigation.setNavigationRoutes(emptyList())
8280
mapboxHistoryReader = historyFile?.let { MapboxHistoryReader(it) }
83-
mapboxNavigation.mapboxReplayer.play()
84-
pushMorePoints()
81+
mapboxNavigation.resetTripSession {
82+
mapboxNavigation.mapboxReplayer.play()
83+
pushMorePoints()
84+
}
8585
}
8686
}
8787

@@ -98,12 +98,17 @@ class ReplayHistorySession : MapboxNavigationObserver {
9898
lastHistoryEvent = replayEvents.lastOrNull()
9999
mapboxNavigation.mapboxReplayer.clearPlayedEvents()
100100
mapboxNavigation.mapboxReplayer.pushEvents(replayEvents)
101-
logI(LOG_CATEGORY) { "pushMorePoints ${replayEvents.joinToString("\n")}" }
102101
}
103102

104103
private fun toReplayEvent(historyEvent: HistoryEvent): ReplayEventBase? =
105104
optionsFlow.value.replayHistoryMapper.mapToReplayEvent(historyEvent)
106105

106+
private fun setRoute(replaySetRoute: ReplaySetNavigationRoute) {
107+
replaySetRoute.route?.let { directionRoute ->
108+
mapboxNavigation?.setNavigationRoutes(Collections.singletonList(directionRoute))
109+
}
110+
}
111+
107112
companion object {
108113
const val LOG_CATEGORY = "MapboxReplayHistorySession"
109114

libnavigation-core/src/main/java/com/mapbox/navigation/core/replay/history/ReplayHistorySessionOptions.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,13 @@ class ReplayHistorySessionOptions private constructor(
6161
@ExperimentalPreviewMapboxNavigationAPI
6262
class Builder {
6363
private var filePath: String? = null
64-
private var replayHistoryMapper = ReplayHistoryMapper.Builder().build()
64+
private var replayHistoryMapper = ReplayHistoryMapper.Builder()
65+
.setRouteMapper {
66+
ReplaySetNavigationRoute.Builder(it.eventTimestamp)
67+
.route(it.navigationRoute)
68+
.build()
69+
}
70+
.build()
6571

6672
/**
6773
* Build your [ReplayHistorySessionOptions].

0 commit comments

Comments
 (0)