Skip to content

Commit cc71c19

Browse files
committed
NAVAND-552: use MapboxNavigationObserver
1 parent 4fc1327 commit cc71c19

File tree

9 files changed

+128
-103
lines changed

9 files changed

+128
-103
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ class MapboxVoiceActivity : AppCompatActivity(), OnMapLongClickListener {
397397
if (::mapboxNavigation.isInitialized) {
398398
mapboxNavigation.registerRoutesObserver(routesObserver)
399399
mapboxNavigation.registerLocationObserver(locationObserver)
400-
mapboxNavigation.registerVoiceInstructionsTriggerObserver(voiceInstructionsDownloadTrigger)
400+
voiceInstructionsDownloadTrigger.onAttached(mapboxNavigation)
401401
mapboxNavigation.registerRouteProgressObserver(routeProgressObserver)
402402
mapboxNavigation.registerRouteProgressObserver(replayProgressObserver)
403403
mapboxNavigation.registerVoiceInstructionsObserver(voiceInstructionsObserver)
@@ -410,7 +410,7 @@ class MapboxVoiceActivity : AppCompatActivity(), OnMapLongClickListener {
410410
super.onStop()
411411
ResourceLoaderFactory.getInstance().unregisterObserver(resourceLoadObserver)
412412
mapboxNavigation.unregisterRoutesObserver(routesObserver)
413-
mapboxNavigation.registerVoiceInstructionsTriggerObserver(voiceInstructionsDownloadTrigger)
413+
voiceInstructionsDownloadTrigger.onDetached(mapboxNavigation)
414414
mapboxNavigation.unregisterLocationObserver(locationObserver)
415415
mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver)
416416
mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver)

libnavigation-core/api/current.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ package com.mapbox.navigation.core {
5959
method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public void registerRoutesPreviewObserver(com.mapbox.navigation.core.preview.RoutesPreviewObserver observer);
6060
method public void registerTripSessionStateObserver(com.mapbox.navigation.core.trip.session.TripSessionStateObserver tripSessionStateObserver);
6161
method public void registerVoiceInstructionsObserver(com.mapbox.navigation.core.trip.session.VoiceInstructionsObserver voiceInstructionsObserver);
62-
method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public <T extends com.mapbox.navigation.core.directions.session.RoutesObserver & com.mapbox.navigation.core.trip.session.RouteProgressObserver> void registerVoiceInstructionsTriggerObserver(T observer);
6362
method public void requestAlternativeRoutes();
6463
method public void requestAlternativeRoutes(com.mapbox.navigation.core.routealternatives.NavigationRouteAlternativesRequestCallback? callback = null);
6564
method public void requestAlternativeRoutes(com.mapbox.navigation.core.routealternatives.RouteAlternativesRequestCallback callback);
@@ -103,7 +102,6 @@ package com.mapbox.navigation.core {
103102
method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public void unregisterRoutesPreviewObserver(com.mapbox.navigation.core.preview.RoutesPreviewObserver observer);
104103
method public void unregisterTripSessionStateObserver(com.mapbox.navigation.core.trip.session.TripSessionStateObserver tripSessionStateObserver);
105104
method public void unregisterVoiceInstructionsObserver(com.mapbox.navigation.core.trip.session.VoiceInstructionsObserver voiceInstructionsObserver);
106-
method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public <T extends com.mapbox.navigation.core.directions.session.RoutesObserver & com.mapbox.navigation.core.trip.session.RouteProgressObserver> void unregisterVoiceInstructionsTriggerObserver(T observer);
107105
property public final com.mapbox.navigator.Experimental experimental;
108106
property public final com.mapbox.navigation.core.trip.session.eh.GraphAccessor graphAccessor;
109107
property public final com.mapbox.navigation.core.history.MapboxHistoryRecorder historyRecorder;

libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,28 +1283,6 @@ class MapboxNavigation @VisibleForTesting internal constructor(
12831283
}
12841284
}
12851285

1286-
/**
1287-
* Subscribes voice instructions trigger observer for all the necessary updates.
1288-
*/
1289-
@ExperimentalPreviewMapboxNavigationAPI
1290-
fun <T> registerVoiceInstructionsTriggerObserver(
1291-
observer: T
1292-
) where T : RoutesObserver, T : RouteProgressObserver {
1293-
registerRoutesObserver(observer)
1294-
registerRouteProgressObserver(observer)
1295-
}
1296-
1297-
/**
1298-
* Unsubscribes voice instructions trigger observer from all the updates it was subsribed for.
1299-
*/
1300-
@ExperimentalPreviewMapboxNavigationAPI
1301-
fun <T> unregisterVoiceInstructionsTriggerObserver(
1302-
observer: T
1303-
) where T : RoutesObserver, T : RouteProgressObserver {
1304-
unregisterRoutesObserver(observer)
1305-
unregisterRouteProgressObserver(observer)
1306-
}
1307-
13081286
/**
13091287
* Unregisters [RoutesObserver].
13101288
*/

libnavigation-core/src/test/java/com/mapbox/navigation/core/MapboxNavigationTest.kt

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2020,33 +2020,6 @@ internal class MapboxNavigationTest : MapboxNavigationBaseTest() {
20202020
}
20212021
}
20222022

2023-
@Test
2024-
fun registerVoiceInstructionsTriggerObserver() {
2025-
val observer = TestVoiceInstructionsTriggerObserver()
2026-
createMapboxNavigation()
2027-
2028-
mapboxNavigation.registerVoiceInstructionsTriggerObserver(observer)
2029-
2030-
verify(exactly = 1) {
2031-
directionsSession.registerRoutesObserver(observer)
2032-
tripSession.registerRouteProgressObserver(observer)
2033-
}
2034-
}
2035-
2036-
@Test
2037-
fun unregisterVoiceInstructionsTriggerObserver() {
2038-
val observer = TestVoiceInstructionsTriggerObserver()
2039-
createMapboxNavigation()
2040-
mapboxNavigation.registerVoiceInstructionsTriggerObserver(observer)
2041-
2042-
mapboxNavigation.unregisterVoiceInstructionsTriggerObserver(observer)
2043-
2044-
verify(exactly = 1) {
2045-
directionsSession.unregisterRoutesObserver(observer)
2046-
tripSession.unregisterRouteProgressObserver(observer)
2047-
}
2048-
}
2049-
20502023
private class TestVoiceInstructionsTriggerObserver : RoutesObserver, RouteProgressObserver {
20512024

20522025
override fun onRouteProgressChanged(routeProgress: RouteProgress) {

libnavui-voice/api/current.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ package com.mapbox.navigation.ui.voice.api {
8585
method @kotlin.jvm.Throws(exceptionClasses=IllegalArgumentException::class) public void volume(com.mapbox.navigation.ui.voice.model.SpeechVolume state) throws java.lang.IllegalArgumentException;
8686
}
8787

88-
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class VoiceInstructionsDownloadTrigger implements com.mapbox.navigation.core.trip.session.RouteProgressObserver com.mapbox.navigation.core.directions.session.RoutesObserver {
88+
@com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class VoiceInstructionsDownloadTrigger implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver {
8989
ctor public VoiceInstructionsDownloadTrigger(com.mapbox.navigation.ui.voice.api.MapboxSpeechApi speechApi);
9090
ctor public VoiceInstructionsDownloadTrigger(int observableTime, double timePercentageToTriggerAfter, com.mapbox.navigation.ui.voice.api.MapboxSpeechApi speechApi);
9191
method public void destroy();
92-
method public void onRouteProgressChanged(com.mapbox.navigation.base.trip.model.RouteProgress routeProgress);
93-
method public void onRoutesChanged(com.mapbox.navigation.core.directions.session.RoutesUpdatedResult result);
92+
method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
93+
method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation);
9494
field public static final com.mapbox.navigation.ui.voice.api.VoiceInstructionsDownloadTrigger.Companion Companion;
9595
field public static final int DEFAULT_OBSERVABLE_TIME_SECONDS = 180; // 0xb4
9696
field public static final double DEFAULT_TIME_PERCENTAGE_TO_TRIGGER_AFTER = 0.5;

libnavui-voice/src/main/java/com/mapbox/navigation/ui/voice/api/MapboxAudioGuidance.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@ internal constructor(
173173
.distinctUntilChanged()
174174
.map { language ->
175175
audioGuidanceVoice?.destroy()
176-
trigger?.let { unregisterVoiceInstructionsTriggerObserver(it) }
176+
trigger?.onDetached(this)
177177
audioGuidanceServices.mapboxAudioGuidanceVoice(this, language).also {
178178
audioGuidanceVoice = it
179-
trigger = VoiceInstructionsDownloadTrigger(it.mapboxSpeechApi).also {
180-
registerVoiceInstructionsTriggerObserver(it)
179+
trigger = VoiceInstructionsDownloadTrigger(it.mapboxSpeechApi).also { trigger ->
180+
trigger.onAttached(this)
181181
}
182182
}
183183
}

libnavui-voice/src/main/java/com/mapbox/navigation/ui/voice/api/VoiceInstructionsDownloadTrigger.kt

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ import com.mapbox.navigation.core.MapboxNavigation
66
import com.mapbox.navigation.core.directions.session.RoutesExtra
77
import com.mapbox.navigation.core.directions.session.RoutesObserver
88
import com.mapbox.navigation.core.directions.session.RoutesUpdatedResult
9+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
10+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
911
import com.mapbox.navigation.core.trip.session.RouteProgressObserver
1012
import com.mapbox.navigation.utils.internal.Time
1113
import com.mapbox.navigation.utils.internal.ifNonNull
1214

1315
/**
1416
* Class that is responsible for listening to relevant updates and triggering
1517
* voice instructions predownloading when needed.
16-
* Register and unregister with [MapboxNavigation.registerVoiceInstructionsTriggerObserver] and
17-
* [MapboxNavigation.unregisterVoiceInstructionsTriggerObserver].
18+
* Register and unregister with [MapboxNavigationApp.registerObserver]
19+
* and [MapboxNavigationApp.unregisterObserver]
20+
* or invoke [onAttached] and [onDetached] manually if you are not using [MapboxNavigationApp].
1821
*/
1922
@ExperimentalPreviewMapboxNavigationAPI
2023
class VoiceInstructionsDownloadTrigger internal constructor(
@@ -23,7 +26,7 @@ class VoiceInstructionsDownloadTrigger internal constructor(
2326
private val speechApi: MapboxSpeechApi,
2427
private val nextVoiceInstructionsProvider: NextVoiceInstructionsProvider,
2528
private val timeProvider: Time,
26-
) : RouteProgressObserver, RoutesObserver {
29+
) : MapboxNavigationObserver {
2730

2831
/**
2932
* Creates [VoiceInstructionsDownloadTrigger] with default
@@ -60,6 +63,10 @@ class VoiceInstructionsDownloadTrigger internal constructor(
6063
Time.SystemImpl
6164
)
6265

66+
private val routesObserver = RoutesObserver { onRoutesChanged(it) }
67+
68+
private val routeProgressObserver = RouteProgressObserver { onRouteProgressChanged(it) }
69+
6370
private val ignoredRouteUpdateReasons = setOf(
6471
RoutesExtra.ROUTES_UPDATE_REASON_CLEAN_UP,
6572
RoutesExtra.ROUTES_UPDATE_REASON_ALTERNATIVE,
@@ -68,9 +75,22 @@ class VoiceInstructionsDownloadTrigger internal constructor(
6875
private var lastDownloadTime: Long = 0
6976

7077
/**
71-
* See [RoutesObserver.onRoutesChanged].
78+
* See [MapboxNavigationObserver.onAttached].
79+
*/
80+
override fun onAttached(mapboxNavigation: MapboxNavigation) {
81+
mapboxNavigation.registerRoutesObserver(routesObserver)
82+
mapboxNavigation.registerRouteProgressObserver(routeProgressObserver)
83+
}
84+
85+
/**
86+
* See [MapboxNavigationObserver.onDetached].
7287
*/
73-
override fun onRoutesChanged(result: RoutesUpdatedResult) {
88+
override fun onDetached(mapboxNavigation: MapboxNavigation) {
89+
mapboxNavigation.unregisterRoutesObserver(routesObserver)
90+
mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver)
91+
}
92+
93+
private fun onRoutesChanged(result: RoutesUpdatedResult) {
7494
if (result.reason in ignoredRouteUpdateReasons) {
7595
return
7696
}
@@ -89,10 +109,7 @@ class VoiceInstructionsDownloadTrigger internal constructor(
89109
}
90110
}
91111

92-
/**
93-
* See [RouteProgressObserver.onRouteProgressChanged].
94-
*/
95-
override fun onRouteProgressChanged(routeProgress: RouteProgress) {
112+
private fun onRouteProgressChanged(routeProgress: RouteProgress) {
96113
if (shouldDownloadBasedOnTime()) {
97114
val legIndex = routeProgress.currentLegProgress?.legIndex
98115
val currentStepProgress = routeProgress.currentLegProgress?.currentStepProgress

libnavui-voice/src/test/java/com/mapbox/navigation/ui/voice/api/MapboxAudioGuidanceTest.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.mapbox.navigation.ui.voice.api
33
import com.mapbox.api.directions.v5.models.VoiceInstructions
44
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
55
import com.mapbox.navigation.core.MapboxNavigation
6+
import com.mapbox.navigation.core.directions.session.RoutesObserver
7+
import com.mapbox.navigation.core.trip.session.RouteProgressObserver
68
import com.mapbox.navigation.testing.MainCoroutineRule
79
import com.mapbox.navigation.ui.voice.TestMapboxAudioGuidanceServices
810
import com.mapbox.navigation.ui.voice.TestMapboxAudioGuidanceServices.Companion.SPEECH_ANNOUNCEMENT_DELAY_MS
@@ -296,27 +298,29 @@ class MapboxAudioGuidanceTest {
296298

297299
@Test
298300
fun `triggers are registered and unregistered`() = coroutineRule.runBlockingTest {
299-
val triggerSlot = mutableListOf<VoiceInstructionsDownloadTrigger>()
301+
val routesObserverSlot = mutableListOf<RoutesObserver>()
302+
val routeProgressObserverSlot = mutableListOf<RouteProgressObserver>()
300303
carAppAudioGuidance.onAttached(mapboxNavigation)
301304
clearMocks(mapboxNavigation, answers = false)
302305

303306
testMapboxAudioGuidanceServices.emitVoiceLanguage("ru")
304307
delay(SPEECH_ANNOUNCEMENT_DELAY_MS)
305308

306309
verify(exactly = 1) {
307-
mapboxNavigation.registerVoiceInstructionsTriggerObserver(capture(triggerSlot))
310+
mapboxNavigation.registerRoutesObserver(capture(routesObserverSlot))
311+
mapboxNavigation.registerRouteProgressObserver(capture(routeProgressObserverSlot))
308312
}
309313

310314
testMapboxAudioGuidanceServices.emitVoiceLanguage("fr")
311315
delay(SPEECH_ANNOUNCEMENT_DELAY_MS)
312316

313317
verify(exactly = 1) {
314-
mapboxNavigation.unregisterVoiceInstructionsTriggerObserver(triggerSlot.first())
318+
mapboxNavigation.unregisterRoutesObserver(routesObserverSlot.first())
319+
mapboxNavigation.registerRouteProgressObserver(routeProgressObserverSlot.first())
315320
}
316321
verify(exactly = 2) {
317-
mapboxNavigation.registerVoiceInstructionsTriggerObserver(
318-
any<VoiceInstructionsDownloadTrigger>()
319-
)
322+
mapboxNavigation.registerRoutesObserver(any())
323+
mapboxNavigation.registerRouteProgressObserver(any())
320324
}
321325

322326
carAppAudioGuidance.onDetached(mapboxNavigation)

0 commit comments

Comments
 (0)