From e2612e630485bab18c9c90ab1b746b211e056571 Mon Sep 17 00:00:00 2001 From: danesfeder Date: Tue, 5 Feb 2019 09:27:40 -0500 Subject: [PATCH] Allow multiple route simulations with NavigationView --- .../v5/{location => }/LocationEngineConductor.java | 12 +++++++----- .../navigation/ui/v5/NavigationViewModel.java | 10 ++++++++-- .../ui/v5/LocationEngineConductorTest.java | 13 ++++++++++++- .../navigation/ui/v5/NavigationViewModelTest.java | 1 - 4 files changed, 27 insertions(+), 9 deletions(-) rename libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/{location => }/LocationEngineConductor.java (75%) diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationEngineConductor.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductor.java similarity index 75% rename from libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationEngineConductor.java rename to libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductor.java index 0650f182f2c..364daeb2e94 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationEngineConductor.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductor.java @@ -1,4 +1,4 @@ -package com.mapbox.services.android.navigation.ui.v5.location; +package com.mapbox.services.android.navigation.ui.v5; import android.content.Context; @@ -7,21 +7,23 @@ import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.services.android.navigation.v5.location.replay.ReplayRouteLocationEngine; -public class LocationEngineConductor { +class LocationEngineConductor { private LocationEngine locationEngine; - public void initializeLocationEngine(Context context, LocationEngine locationEngine, boolean shouldReplayRoute) { + void initializeLocationEngine(Context context, LocationEngine locationEngine, boolean shouldReplayRoute) { initialize(context, locationEngine, shouldReplayRoute); } - public void updateSimulatedRoute(DirectionsRoute route) { + boolean updateSimulatedRoute(DirectionsRoute route) { if (locationEngine instanceof ReplayRouteLocationEngine) { ((ReplayRouteLocationEngine) locationEngine).assign(route); + return true; } + return false; } - public LocationEngine obtainLocationEngine() { + LocationEngine obtainLocationEngine() { return locationEngine; } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java index cf3b20b5c15..9868d3a5023 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java @@ -21,7 +21,6 @@ import com.mapbox.services.android.navigation.ui.v5.feedback.FeedbackItem; import com.mapbox.services.android.navigation.ui.v5.instruction.BannerInstructionModel; import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionModel; -import com.mapbox.services.android.navigation.ui.v5.location.LocationEngineConductor; import com.mapbox.services.android.navigation.ui.v5.route.OffRouteEvent; import com.mapbox.services.android.navigation.ui.v5.route.ViewRouteFetcher; import com.mapbox.services.android.navigation.ui.v5.route.ViewRouteListener; @@ -241,7 +240,7 @@ void updateRoute(DirectionsRoute route) { this.route.setValue(route); if (!isChangingConfigurations) { startNavigation(route); - locationEngineConductor.updateSimulatedRoute(route); + updateReplayEngine(route); sendEventOnRerouteAlong(route); isOffRoute.setValue(false); } @@ -412,6 +411,13 @@ private void startNavigation(DirectionsRoute route) { } } + private void updateReplayEngine(DirectionsRoute route) { + if (locationEngineConductor.updateSimulatedRoute(route)) { + LocationEngine replayEngine = locationEngineConductor.obtainLocationEngine(); + navigation.setLocationEngine(replayEngine); + } + } + private void endNavigation() { if (navigation != null) { navigation.onDestroy(); diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductorTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductorTest.java index 7f6a55ac0ee..d270937d72c 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductorTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/LocationEngineConductorTest.java @@ -6,7 +6,7 @@ import android.support.annotation.NonNull; import com.mapbox.android.core.location.LocationEngine; -import com.mapbox.services.android.navigation.ui.v5.location.LocationEngineConductor; +import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.services.android.navigation.v5.location.replay.ReplayRouteLocationEngine; import org.junit.Test; @@ -37,6 +37,17 @@ public void onInitWithSimulation_replayEngineIsProvided() { assertTrue(locationEngine instanceof ReplayRouteLocationEngine); } + @Test + public void onInitWithSimulation_replayEngineIsUpdated() { + LocationEngineConductor locationEngineConductor = new LocationEngineConductor(); + boolean simulateRouteEnabled = true; + locationEngineConductor.initializeLocationEngine(createMockContext(), null, simulateRouteEnabled); + + boolean didUpdate = locationEngineConductor.updateSimulatedRoute(mock(DirectionsRoute.class)); + + assertTrue(didUpdate); + } + @Test public void onInitWithSimulationAndCustomEngine_customEngineIsProvided() { LocationEngineConductor locationEngineConductor = new LocationEngineConductor(); diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModelTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModelTest.java index b3a0ef98b4e..042089320a0 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModelTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModelTest.java @@ -3,7 +3,6 @@ import android.app.Application; import com.mapbox.api.directions.v5.models.DirectionsRoute; -import com.mapbox.services.android.navigation.ui.v5.location.LocationEngineConductor; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; import org.junit.Test;