From 1772f38738074633bcf6d26e6412d257a1f05acf Mon Sep 17 00:00:00 2001 From: danesfeder Date: Wed, 12 Sep 2018 17:30:29 -0400 Subject: [PATCH] Create synchronized Navigator for location and status updates --- build.gradle | 1 - .../v5/navigation/MapboxNavigation.java | 12 ++--- .../v5/navigation/MapboxNavigator.java | 51 +++++++++++++++++++ .../navigation/NavigationEngineFactory.java | 30 ++--------- .../NavigationLocationEngineListener.java | 34 ++----------- .../navigation/NavigationLocationUpdate.java | 17 ------- .../navigation/NavigationRouteProcessor.java | 14 ++--- .../v5/navigation/NavigationService.java | 2 +- .../RouteProcessorBackgroundThread.java | 23 ++++++--- .../v5/navigation/RouteProcessorRunnable.java | 44 +++++++++------- .../v5/offroute/OffRouteDetector.java | 16 +----- .../navigation/v5/snap/SnapToRoute.java | 16 ++---- .../NavigationLocationEngineListenerTest.java | 26 ++-------- .../NavigationRouteProcessorTest.java | 11 ++-- .../v5/offroute/OffRouteDetectorTest.java | 18 +++---- .../navigation/v5/snap/SnapToRouteTest.java | 14 +++-- 16 files changed, 132 insertions(+), 197 deletions(-) create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigator.java delete mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationUpdate.java diff --git a/build.gradle b/build.gradle index 225112c9169..c0ec9c86c72 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,6 @@ buildscript { google() jcenter() maven { url 'https://plugins.gradle.org/m2' } - maven { url 'https://mapbox.bintray.com/mapbox' } } dependencies { classpath pluginDependencies.gradle diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigation.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigation.java index d6e19d07234..96d4b9acb49 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigation.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigation.java @@ -55,7 +55,7 @@ public class MapboxNavigation implements ServiceConnection { private NavigationEngineFactory navigationEngineFactory; private NavigationTelemetry navigationTelemetry = null; private NavigationService navigationService; - private Navigator navigator; + private MapboxNavigator mapboxNavigator; private DirectionsRoute directionsRoute; private MapboxNavigationOptions options; private LocationEngine locationEngine = null; @@ -157,9 +157,9 @@ private void initializeForTest() { */ private void initialize() { // Initialize event dispatcher and add internal listeners - navigator = new Navigator(); + mapboxNavigator = new MapboxNavigator(new Navigator()); navigationEventDispatcher = new NavigationEventDispatcher(); - navigationEngineFactory = new NavigationEngineFactory(navigator); + navigationEngineFactory = new NavigationEngineFactory(); initializeDefaultLocationEngine(); initializeTelemetry(); @@ -796,14 +796,14 @@ NavigationEngineFactory retrieveEngineFactory() { return navigationEngineFactory; } - Navigator retrieveNavigator() { - return navigator; + MapboxNavigator retrieveMapboxNavigator() { + return mapboxNavigator; } private void startNavigationWith(@NonNull DirectionsRoute directionsRoute) { ValidationUtils.validDirectionsRoute(directionsRoute, options.defaultMilestonesEnabled()); this.directionsRoute = directionsRoute; - navigator.setDirections(directionsRoute.toJson()); + mapboxNavigator.updateRoute(directionsRoute.toJson()); if (!isBound) { navigationTelemetry.startSession(directionsRoute); startNavigationService(); diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigator.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigator.java new file mode 100644 index 00000000000..9a56ff1a828 --- /dev/null +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigator.java @@ -0,0 +1,51 @@ +package com.mapbox.services.android.navigation.v5.navigation; + +import android.location.Location; + +import com.mapbox.geojson.Point; +import com.mapbox.navigator.FixLocation; +import com.mapbox.navigator.NavigationStatus; +import com.mapbox.navigator.Navigator; + +import java.util.Date; + +class MapboxNavigator { + + private final Navigator navigator; + + MapboxNavigator(Navigator navigator) { + this.navigator = navigator; + } + + void updateRoute(String routeJson) { + navigator.setDirections(routeJson); + } + + NavigationStatus retrieveStatus(Date date) { + return navigator.getStatus(date); + } + + void updateLocation(Location location) { + navigator.updateLocation(buildFixLocationFrom(location)); + } + + private FixLocation buildFixLocationFrom(Location rawLocation) { + Point rawPoint = Point.fromLngLat(rawLocation.getLongitude(), rawLocation.getLatitude()); + Date time = new Date(rawLocation.getTime()); + Float speed = rawLocation.getSpeed(); + Float bearing = rawLocation.getBearing(); + Float altitude = (float) rawLocation.getAltitude(); + Float horizontalAccuracy = rawLocation.getAccuracy(); + String provider = rawLocation.getProvider(); + + return new FixLocation( + rawPoint, + time, + speed, + bearing, + altitude, + horizontalAccuracy, + provider + ); + } +} diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEngineFactory.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEngineFactory.java index b9d08f0d705..f86c0bafd8e 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEngineFactory.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEngineFactory.java @@ -1,15 +1,11 @@ package com.mapbox.services.android.navigation.v5.navigation; -import android.location.Location; - -import com.mapbox.navigator.Navigator; import com.mapbox.services.android.navigation.v5.navigation.camera.Camera; import com.mapbox.services.android.navigation.v5.navigation.camera.SimpleCamera; import com.mapbox.services.android.navigation.v5.offroute.OffRoute; import com.mapbox.services.android.navigation.v5.offroute.OffRouteDetector; import com.mapbox.services.android.navigation.v5.route.FasterRoute; import com.mapbox.services.android.navigation.v5.route.FasterRouteDetector; -import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; import com.mapbox.services.android.navigation.v5.snap.Snap; import com.mapbox.services.android.navigation.v5.snap.SnapToRoute; @@ -20,26 +16,8 @@ class NavigationEngineFactory { private Snap snapEngine; private Camera cameraEngine; - NavigationEngineFactory(Navigator navigator) { - initializeDefaultEngines(navigator); - } - - // For testing purposes only NavigationEngineFactory() { - cameraEngine = new SimpleCamera(); - fasterRouteEngine = new FasterRouteDetector(); - snapEngine = new Snap() { - @Override - public Location getSnappedLocation(Location location, RouteProgress routeProgress) { - return location; - } - }; - offRouteEngine = new OffRoute() { - @Override - public boolean isUserOffRoute(Location location, RouteProgress routeProgress, MapboxNavigationOptions options) { - return false; - } - }; + initializeDefaultEngines(); } OffRoute retrieveOffRouteEngine() { @@ -86,10 +64,10 @@ void updateCameraEngine(Camera cameraEngine) { this.cameraEngine = cameraEngine; } - private void initializeDefaultEngines(Navigator navigator) { + private void initializeDefaultEngines() { cameraEngine = new SimpleCamera(); - snapEngine = new SnapToRoute(navigator); - offRouteEngine = new OffRouteDetector(navigator); + snapEngine = new SnapToRoute(); + offRouteEngine = new OffRouteDetector(); fasterRouteEngine = new FasterRouteDetector(); } } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListener.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListener.java index ce9f11b9bdb..dbedbfdf968 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListener.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListener.java @@ -4,25 +4,18 @@ import com.mapbox.android.core.location.LocationEngine; import com.mapbox.android.core.location.LocationEngineListener; -import com.mapbox.geojson.Point; -import com.mapbox.navigator.FixLocation; -import com.mapbox.navigator.Navigator; import com.mapbox.services.android.navigation.v5.location.LocationValidator; -import java.util.Date; - class NavigationLocationEngineListener implements LocationEngineListener { private final RouteProcessorBackgroundThread thread; - private final Navigator navigator; private final LocationEngine locationEngine; private final LocationValidator validator; - NavigationLocationEngineListener(RouteProcessorBackgroundThread thread, Navigator navigator, - LocationEngine locationEngine, LocationValidator validator) { + NavigationLocationEngineListener(RouteProcessorBackgroundThread thread, LocationEngine locationEngine, + LocationValidator validator) { this.thread = thread; this.locationEngine = locationEngine; - this.navigator = navigator; this.validator = validator; } @@ -34,31 +27,10 @@ public void onConnected() { @Override public void onLocationChanged(Location location) { - navigator.updateLocation(buildFixLocationFrom(location)); - thread.updateLocation(location); + thread.updateRawLocation(location); } boolean isValidLocationUpdate(Location location) { return location != null && validator.isValidUpdate(location); } - - private FixLocation buildFixLocationFrom(Location rawLocation) { - Point rawPoint = Point.fromLngLat(rawLocation.getLongitude(), rawLocation.getLatitude()); - Date time = new Date(rawLocation.getTime()); - Float speed = rawLocation.getSpeed(); - Float bearing = rawLocation.getBearing(); - Float altitude = (float) rawLocation.getAltitude(); - Float horizontalAccuracy = rawLocation.getAccuracy(); - String provider = rawLocation.getProvider(); - - return new FixLocation( - rawPoint, - time, - speed, - bearing, - altitude, - horizontalAccuracy, - provider - ); - } } \ No newline at end of file diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationUpdate.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationUpdate.java deleted file mode 100644 index 8343739f4be..00000000000 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationUpdate.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mapbox.services.android.navigation.v5.navigation; - -import android.location.Location; - -import com.google.auto.value.AutoValue; - -@AutoValue -abstract class NavigationLocationUpdate { - - static NavigationLocationUpdate create(Location location, MapboxNavigation mapboxNavigation) { - return new AutoValue_NavigationLocationUpdate(location, mapboxNavigation); - } - - abstract Location location(); - - abstract MapboxNavigation mapboxNavigation(); -} diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessor.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessor.java index 53f5ea50fe9..5da7229d261 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessor.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessor.java @@ -8,13 +8,11 @@ import com.mapbox.api.directions.v5.models.StepIntersection; import com.mapbox.geojson.Point; import com.mapbox.navigator.NavigationStatus; -import com.mapbox.navigator.Navigator; import com.mapbox.navigator.VoiceInstruction; import com.mapbox.services.android.navigation.v5.routeprogress.CurrentLegAnnotation; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; import com.mapbox.services.android.navigation.v5.utils.RingBuffer; -import java.util.Date; import java.util.List; import static com.mapbox.services.android.navigation.v5.navigation.NavigationHelper.createCurrentAnnotation; @@ -29,7 +27,6 @@ class NavigationRouteProcessor { private static final int ONE_INDEX = 1; private final RingBuffer previousProgressList = new RingBuffer<>(2); - private final Navigator navigator; private DirectionsRoute route; private RouteLeg currentLeg; private LegStep currentStep; @@ -40,14 +37,9 @@ class NavigationRouteProcessor { private List> currentIntersectionDistances; private CurrentLegAnnotation currentLegAnnotation; - NavigationRouteProcessor(Navigator navigator) { - this.navigator = navigator; - } - - RouteProgress buildNewRouteProgress(Date date, DirectionsRoute route) { - NavigationStatus status = navigator.getStatus(date); + RouteProgress buildNewRouteProgress(NavigationStatus status, DirectionsRoute route) { updateRoute(route); - return buildRouteProgressWith(status); + return buildRouteProgressFrom(status); } RouteProgress retrievePreviousRouteProgress() { @@ -60,7 +52,7 @@ private void updateRoute(DirectionsRoute route) { } } - private RouteProgress buildRouteProgressWith(NavigationStatus status) { + private RouteProgress buildRouteProgressFrom(NavigationStatus status) { int legIndex = status.getLegIndex(); int stepIndex = status.getStepIndex(); int upcomingStepIndex = stepIndex + ONE_INDEX; diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationService.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationService.java index 68c4833fbdf..a2271e0dd31 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationService.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationService.java @@ -124,7 +124,7 @@ private void initializeLocationProvider(MapboxNavigation mapboxNavigation) { int accuracyThreshold = mapboxNavigation.options().locationAcceptableAccuracyInMetersThreshold(); LocationValidator validator = new LocationValidator(accuracyThreshold); NavigationLocationEngineListener listener = new NavigationLocationEngineListener( - thread, mapboxNavigation.retrieveNavigator(), locationEngine, validator + thread, locationEngine, validator ); locationUpdater = new NavigationLocationEngineUpdater(locationEngine, listener); } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorBackgroundThread.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorBackgroundThread.java index c111615f462..20f26045724 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorBackgroundThread.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorBackgroundThread.java @@ -22,14 +22,14 @@ class RouteProcessorBackgroundThread extends HandlerThread { private final Listener listener; private final NavigationRouteProcessor routeProcessor; private Handler workerHandler; - private Location unfilteredLocation; + private RouteProcessorRunnable runnable; RouteProcessorBackgroundThread(MapboxNavigation navigation, Handler responseHandler, Listener listener) { super(MAPBOX_NAVIGATION_THREAD_NAME, Process.THREAD_PRIORITY_BACKGROUND); this.navigation = navigation; this.responseHandler = responseHandler; this.listener = listener; - this.routeProcessor = new NavigationRouteProcessor(navigation.retrieveNavigator()); + this.routeProcessor = new NavigationRouteProcessor(); } @Override @@ -38,19 +38,26 @@ public synchronized void start() { if (workerHandler == null) { workerHandler = new Handler(getLooper()); } - - NavigationLocationUpdate locationUpdate = NavigationLocationUpdate.create(unfilteredLocation, navigation); - RouteProcessorRunnable runnable = new RouteProcessorRunnable( - routeProcessor, locationUpdate, workerHandler, responseHandler, listener + runnable = new RouteProcessorRunnable( + routeProcessor, navigation, workerHandler, responseHandler, listener ); workerHandler.post(runnable); } - void updateLocation(Location location) { - unfilteredLocation = location; + @Override + public boolean quit() { + if (isAlive()) { + workerHandler.removeCallbacks(runnable); + } + return super.quit(); + } + + void updateRawLocation(Location rawLocation) { if (!isAlive()) { start(); } + navigation.retrieveMapboxNavigator().updateLocation(rawLocation); + runnable.updateRawLocation(rawLocation); } /** diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorRunnable.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorRunnable.java index 295514ef023..54e7696b41d 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorRunnable.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorRunnable.java @@ -4,6 +4,7 @@ import android.os.Handler; import com.mapbox.api.directions.v5.models.DirectionsRoute; +import com.mapbox.navigator.NavigationStatus; import com.mapbox.services.android.navigation.v5.milestone.Milestone; import com.mapbox.services.android.navigation.v5.offroute.OffRoute; import com.mapbox.services.android.navigation.v5.offroute.OffRouteDetector; @@ -20,20 +21,21 @@ class RouteProcessorRunnable implements Runnable { - private static final int ONE_SECOND = 1000; + private static final int ONE_SECOND_IN_MILLISECONDS = 1000; private final NavigationRouteProcessor routeProcessor; - private final NavigationLocationUpdate locationUpdate; + private final MapboxNavigation navigation; private final Handler workerHandler; private final Handler responseHandler; private final RouteProcessorBackgroundThread.Listener listener; + private Location rawLocation; RouteProcessorRunnable(NavigationRouteProcessor routeProcessor, - NavigationLocationUpdate locationUpdate, + MapboxNavigation navigation, Handler workerHandler, Handler responseHandler, RouteProcessorBackgroundThread.Listener listener) { this.routeProcessor = routeProcessor; - this.locationUpdate = locationUpdate; + this.navigation = navigation; this.workerHandler = workerHandler; this.responseHandler = responseHandler; this.listener = listener; @@ -44,40 +46,44 @@ public void run() { process(); } + void updateRawLocation(Location rawLocation) { + this.rawLocation = rawLocation; + } + private void process() { Timber.d("NAV_DEBUG Processor Runnable fired - processing..."); - MapboxNavigation mapboxNavigation = locationUpdate.mapboxNavigation(); - MapboxNavigationOptions options = mapboxNavigation.options(); - Location rawLocation = locationUpdate.location(); - DirectionsRoute route = mapboxNavigation.getRoute(); - Date currentDate = new Date(); - RouteProgress routeProgress = routeProcessor.buildNewRouteProgress(currentDate, route); + MapboxNavigator mapboxNavigator = navigation.retrieveMapboxNavigator(); + MapboxNavigationOptions options = navigation.options(); + DirectionsRoute route = navigation.getRoute(); + + NavigationStatus status = mapboxNavigator.retrieveStatus(new Date()); + RouteProgress routeProgress = routeProcessor.buildNewRouteProgress(status, route); - NavigationEngineFactory engineFactory = mapboxNavigation.retrieveEngineFactory(); - final boolean userOffRoute = isUserOffRoute(options, currentDate, rawLocation, routeProgress, engineFactory); - final Location snappedLocation = findSnappedLocation(currentDate, rawLocation, routeProgress, engineFactory); + NavigationEngineFactory engineFactory = navigation.retrieveEngineFactory(); + final boolean userOffRoute = isUserOffRoute(options, status, rawLocation, routeProgress, engineFactory); + final Location snappedLocation = findSnappedLocation(status, rawLocation, routeProgress, engineFactory); final boolean checkFasterRoute = checkFasterRoute(options, rawLocation, routeProgress, engineFactory, userOffRoute); - final List milestones = findTriggeredMilestones(mapboxNavigation, routeProgress); + final List milestones = findTriggeredMilestones(navigation, routeProgress); - workerHandler.postDelayed(this, ONE_SECOND); + workerHandler.postDelayed(this, ONE_SECOND_IN_MILLISECONDS); sendUpdateToResponseHandler(userOffRoute, milestones, snappedLocation, checkFasterRoute, routeProgress); } - private boolean isUserOffRoute(MapboxNavigationOptions options, Date date, Location rawLocation, + private boolean isUserOffRoute(MapboxNavigationOptions options, NavigationStatus status, Location rawLocation, RouteProgress routeProgress, NavigationEngineFactory engineFactory) { OffRoute offRoute = engineFactory.retrieveOffRouteEngine(); if (offRoute instanceof OffRouteDetector) { - return ((OffRouteDetector) offRoute).isUserOffRouteWith(date); + return ((OffRouteDetector) offRoute).isUserOffRouteWith(status); } return offRoute.isUserOffRoute(rawLocation, routeProgress, options); } - private Location findSnappedLocation(Date date, Location rawLocation, RouteProgress routeProgress, + private Location findSnappedLocation(NavigationStatus status, Location rawLocation, RouteProgress routeProgress, NavigationEngineFactory engineFactory) { Snap snap = engineFactory.retrieveSnapEngine(); if (snap instanceof SnapToRoute) { - return ((SnapToRoute) snap).getSnappedLocationWith(rawLocation, date); + return ((SnapToRoute) snap).getSnappedLocationWith(rawLocation, status); } return snap.getSnappedLocation(rawLocation, routeProgress); } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetector.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetector.java index 85411207760..e959c5569fb 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetector.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetector.java @@ -3,33 +3,19 @@ import android.location.Location; import com.mapbox.navigator.NavigationStatus; -import com.mapbox.navigator.Navigator; import com.mapbox.navigator.RouteState; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; -import java.util.Date; - public class OffRouteDetector extends OffRoute { - private final Navigator navigator; - - public OffRouteDetector(Navigator navigator) { - this.navigator = navigator; - } - @Override public boolean isUserOffRoute(Location location, RouteProgress routeProgress, MapboxNavigationOptions options) { // No impl return false; } - public boolean isUserOffRouteWith(Date date) { - return determineIsUserOffRoute(date); - } - - private boolean determineIsUserOffRoute(Date date) { - NavigationStatus status = navigator.getStatus(date); + public boolean isUserOffRouteWith(NavigationStatus status) { return status.getRouteState() == RouteState.OFFROUTE; } } diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/snap/SnapToRoute.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/snap/SnapToRoute.java index 31baa60bec7..5ebdb4f451a 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/snap/SnapToRoute.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/snap/SnapToRoute.java @@ -4,32 +4,22 @@ import android.support.annotation.NonNull; import com.mapbox.navigator.NavigationStatus; -import com.mapbox.navigator.Navigator; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; -import java.util.Date; - public class SnapToRoute extends Snap { - private final Navigator navigator; - - public SnapToRoute(Navigator navigator) { - this.navigator = navigator; - } - @Override public Location getSnappedLocation(Location location, RouteProgress routeProgress) { // No impl return location; } - public Location getSnappedLocationWith(Location location, Date date) { - return buildSnappedLocation(location, date); + public Location getSnappedLocationWith(Location location, NavigationStatus status) { + return buildSnappedLocation(location, status); } @NonNull - private Location buildSnappedLocation(Location location, Date date) { - NavigationStatus status = navigator.getStatus(date); + private Location buildSnappedLocation(Location location, NavigationStatus status) { Location snappedLocation = new Location(location); snappedLocation.setLatitude(status.getLocation().latitude()); snappedLocation.setLongitude(status.getLocation().longitude()); diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListenerTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListenerTest.java index f7f30a5ddd4..0c30a3f602b 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListenerTest.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationLocationEngineListenerTest.java @@ -3,18 +3,13 @@ import android.location.Location; import com.mapbox.android.core.location.LocationEngine; -import com.mapbox.navigator.FixLocation; -import com.mapbox.navigator.Navigator; import com.mapbox.services.android.navigation.v5.location.LocationValidator; -import org.junit.Ignore; import org.junit.Test; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -@Ignore public class NavigationLocationEngineListenerTest { @Test @@ -35,31 +30,16 @@ public void queueValidLocationUpdate_threadReceivesUpdate() { listener.onLocationChanged(location); - verify(thread).updateLocation(location); - } - - @Test - public void queueInvalidLocationUpdate_navigatorReceivesUpdate() { - Navigator navigator = mock(Navigator.class); - NavigationLocationEngineListener listener = buildListener(navigator); - - listener.onLocationChanged(mock(Location.class)); - - verify(navigator).updateLocation(any(FixLocation.class)); + verify(thread).updateRawLocation(location); } private NavigationLocationEngineListener buildListener(RouteProcessorBackgroundThread thread) { - return new NavigationLocationEngineListener(thread, mock(Navigator.class), mock(LocationEngine.class), + return new NavigationLocationEngineListener(thread, mock(LocationEngine.class), mock(LocationValidator.class)); } - private NavigationLocationEngineListener buildListener(Navigator navigator) { - return new NavigationLocationEngineListener(mock(RouteProcessorBackgroundThread.class), navigator, - mock(LocationEngine.class), mock(LocationValidator.class)); - } - private NavigationLocationEngineListener buildListener(LocationEngine locationEngine) { - return new NavigationLocationEngineListener(mock(RouteProcessorBackgroundThread.class), mock(Navigator.class), + return new NavigationLocationEngineListener(mock(RouteProcessorBackgroundThread.class), locationEngine, mock(LocationValidator.class)); } } \ No newline at end of file diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessorTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessorTest.java index c227e8b00a0..c14852f1966 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessorTest.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessorTest.java @@ -1,6 +1,6 @@ package com.mapbox.services.android.navigation.v5.navigation; -import com.mapbox.navigator.Navigator; +import com.mapbox.navigator.NavigationStatus; import com.mapbox.services.android.navigation.v5.BaseTest; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; @@ -8,20 +8,19 @@ import org.junit.Test; import java.io.IOException; -import java.util.Date; import static junit.framework.Assert.assertNotNull; +import static org.mockito.Mockito.mock; @Ignore public class NavigationRouteProcessorTest extends BaseTest { @Test public void buildNewRouteProgress_routeProgressReturned() throws IOException { - Navigator navigator = new Navigator(); - NavigationRouteProcessor processor = new NavigationRouteProcessor(navigator); - Date date = new Date(); + NavigationRouteProcessor processor = new NavigationRouteProcessor(); - RouteProgress progress = processor.buildNewRouteProgress(date, buildTestDirectionsRoute()); + // TODO mock final status + RouteProgress progress = processor.buildNewRouteProgress(mock(NavigationStatus.class), buildTestDirectionsRoute()); assertNotNull(progress); } diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetectorTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetectorTest.java index ade2909547f..272f5c03f52 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetectorTest.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/offroute/OffRouteDetectorTest.java @@ -1,17 +1,13 @@ package com.mapbox.services.android.navigation.v5.offroute; import com.mapbox.navigator.NavigationStatus; -import com.mapbox.navigator.Navigator; import com.mapbox.navigator.RouteState; import org.junit.Ignore; import org.junit.Test; -import java.util.Date; - import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -20,26 +16,24 @@ public class OffRouteDetectorTest { @Test public void isUserOffRouteWith_returnsTrueWithRouteStateOffRoute() { - Navigator navigator = mock(Navigator.class); + // TODO mock final class NavigationStatus status = mock(NavigationStatus.class); when(status.getRouteState()).thenReturn(RouteState.OFFROUTE); - when(navigator.getStatus(any(Date.class))).thenReturn(status); - OffRouteDetector offRouteDetector = new OffRouteDetector(navigator); + OffRouteDetector offRouteDetector = new OffRouteDetector(); - boolean isOffRoute = offRouteDetector.isUserOffRouteWith(new Date()); + boolean isOffRoute = offRouteDetector.isUserOffRouteWith(status); assertTrue(isOffRoute); } @Test public void isUserOffRouteWith_returnsFalseWithRouteStateOffRoute() { - Navigator navigator = mock(Navigator.class); + // TODO mock final class NavigationStatus status = mock(NavigationStatus.class); when(status.getRouteState()).thenReturn(RouteState.COMPLETE); - when(navigator.getStatus(any(Date.class))).thenReturn(status); - OffRouteDetector offRouteDetector = new OffRouteDetector(navigator); + OffRouteDetector offRouteDetector = new OffRouteDetector(); - boolean isOffRoute = offRouteDetector.isUserOffRouteWith(new Date()); + boolean isOffRoute = offRouteDetector.isUserOffRouteWith(status); assertFalse(isOffRoute); } diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/snap/SnapToRouteTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/snap/SnapToRouteTest.java index 9c6ccdee2a8..4fcccfd3ebc 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/snap/SnapToRouteTest.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/snap/SnapToRouteTest.java @@ -2,13 +2,11 @@ import android.location.Location; -import com.mapbox.navigator.Navigator; +import com.mapbox.navigator.NavigationStatus; import org.junit.Ignore; import org.junit.Test; -import java.util.Date; - import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import static org.mockito.Mockito.mock; @@ -18,19 +16,19 @@ public class SnapToRouteTest { @Test public void sanity() { - Navigator navigator = mock(Navigator.class); - Snap snap = new SnapToRoute(navigator); + Snap snap = new SnapToRoute(); assertNotNull(snap); } @Test public void getSnappedLocation_returnsProviderNameCorrectly() { - Navigator navigator = mock(Navigator.class); - SnapToRoute snap = new SnapToRoute(navigator); + // TODO mock final class + NavigationStatus status = mock(NavigationStatus.class); + SnapToRoute snap = new SnapToRoute(); Location location = new Location("test"); - Location snappedLocation = snap.getSnappedLocationWith(location, new Date()); + Location snappedLocation = snap.getSnappedLocationWith(location, status); assertTrue(snappedLocation.getProvider().equals("test")); }