From b626b27317170ff5ee085c5d4f59517c4ef8bf21 Mon Sep 17 00:00:00 2001 From: Devota Aabel Date: Fri, 12 Oct 2018 19:20:23 -0400 Subject: [PATCH 1/3] Added nav-native etas --- .../android/navigation/ui/v5/summary/SummaryModel.java | 4 ++-- .../v5/navigation/NavigationNotificationProvider.java | 4 +++- .../navigation/v5/navigation/NavigationRouteProcessor.java | 5 +++++ .../android/navigation/v5/routeprogress/RouteProgress.java | 6 ++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java index 48153520abd..5f51617d770 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java @@ -22,10 +22,10 @@ public class SummaryModel { public SummaryModel(Context context, DistanceFormatter distanceFormatter, RouteProgress progress, @NavigationTimeFormat.Type int timeFormatType) { distanceRemaining = distanceFormatter.formatDistance(progress.distanceRemaining()).toString(); - timeRemaining = formatTimeRemaining(context, progress.durationRemaining()); + timeRemaining = formatTimeRemaining(context, progress.legDurationRemaining()); Calendar time = Calendar.getInstance(); boolean isTwentyFourHourFormat = DateFormat.is24HourFormat(context); - arrivalTime = formatTime(time, progress.durationRemaining(), timeFormatType, isTwentyFourHourFormat); + arrivalTime = formatTime(time, progress.legDurationRemaining(), timeFormatType, isTwentyFourHourFormat); } String getDistanceRemaining() { diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationNotificationProvider.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationNotificationProvider.java index 5497f6aba2c..d1e51bc0880 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationNotificationProvider.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationNotificationProvider.java @@ -25,7 +25,9 @@ void updateNavigationNotification(RouteProgress routeProgress) { } void shutdown(Context context) { - navigationNotification.onNavigationStopped(context); + if (navigationNotification != null) { + navigationNotification.onNavigationStopped(context); + } navigationNotification = null; shouldUpdate = false; } 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 af45d71becd..2ad9cb5310f 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 @@ -9,6 +9,7 @@ import com.mapbox.api.directions.v5.models.StepIntersection; import com.mapbox.geojson.Point; import com.mapbox.navigator.NavigationStatus; +import com.mapbox.navigator.RouteState; import com.mapbox.navigator.VoiceInstruction; import com.mapbox.services.android.navigation.v5.routeprogress.CurrentLegAnnotation; import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress; @@ -69,6 +70,9 @@ private RouteProgress buildRouteProgressFrom(NavigationStatus status) { double routeDistanceRemaining = routeDistanceRemaining(legDistanceRemaining, legIndex, route); double stepDistanceRemaining = status.getRemainingStepDistance(); double stepDistanceTraveled = currentStep.distance() - stepDistanceRemaining; + double remainingLegDuration = status.getRouteState() == RouteState.TRACKING + ? status.getRemainingLegDuration() / 1000 : route.duration(); + currentLegAnnotation = createCurrentAnnotation(currentLegAnnotation, currentLeg, legDistanceRemaining); StepIntersection currentIntersection = findCurrentIntersection( currentIntersections, currentIntersectionDistances, stepDistanceTraveled @@ -81,6 +85,7 @@ private RouteProgress buildRouteProgressFrom(NavigationStatus status) { .stepDistanceRemaining(stepDistanceRemaining) .legDistanceRemaining(legDistanceRemaining) .distanceRemaining(routeDistanceRemaining) + .legDurationRemaining(remainingLegDuration) .directionsRoute(route) .currentStepPoints(currentStepPoints) .upcomingStepPoints(upcomingStepPoints) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java index d19110d75c0..7420484c25e 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java @@ -87,6 +87,8 @@ public double durationRemaining() { return (1 - fractionTraveled()) * directionsRoute().duration(); } + public abstract double legDurationRemaining(); + /** * Get the fraction traveled along the current route, this is a float value between 0 and 1 and * isn't guaranteed to reach 1 before the user reaches the end of the route. @@ -221,6 +223,10 @@ public abstract static class Builder { public abstract Builder distanceRemaining(double distanceRemaining); + public abstract Builder legDurationRemaining(double durationRemaining); + + abstract double legDurationRemaining(); + public abstract Builder intersections(List intersections); abstract List intersections(); From 33469824b28855323795999f886e2eec8b7688af Mon Sep 17 00:00:00 2001 From: Devota Aabel Date: Fri, 12 Oct 2018 19:37:17 -0400 Subject: [PATCH 2/3] Added quick fix for tests --- .../android/navigation/ui/v5/TestRouteProgressBuilder.java | 1 + .../services/android/navigation/v5/TestRouteProgressBuilder.java | 1 + 2 files changed, 2 insertions(+) diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java index b7f0e3ec8d4..35d8296a113 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java @@ -55,6 +55,7 @@ RouteProgress buildTestRouteProgress(DirectionsRoute route, .legDistanceRemaining(legDistanceRemaining) .distanceRemaining(distanceRemaining) .directionsRoute(route) + .legDurationRemaining(0) .currentStepPoints(currentStepPoints) .upcomingStepPoints(upcomingStepPoints) .intersections(intersections) diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java index edfb967c9fa..e41be06c2c6 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java @@ -57,6 +57,7 @@ RouteProgress buildTestRouteProgress(DirectionsRoute route, .legDistanceRemaining(legDistanceRemaining) .distanceRemaining(distanceRemaining) .directionsRoute(route) + .legDurationRemaining(0) .currentStepPoints(currentStepPoints) .upcomingStepPoints(upcomingStepPoints) .intersections(intersections) From 9fad7add169a2faab3704c065248b798bf0ce6db Mon Sep 17 00:00:00 2001 From: danesfeder Date: Fri, 12 Oct 2018 19:46:09 -0400 Subject: [PATCH 3/3] Move duration remaining to RouteLegProgress --- .../ui/v5/summary/SummaryModel.java | 5 +++-- .../ui/v5/TestRouteProgressBuilder.java | 3 ++- .../navigation/NavigationRouteProcessor.java | 11 ++++++----- .../v5/routeprogress/RouteLegProgress.java | 6 +++--- .../v5/routeprogress/RouteProgress.java | 13 +++++++------ .../v5/TestRouteProgressBuilder.java | 3 ++- .../routeprogress/RouteLegProgressTest.java | 19 ------------------- 7 files changed, 23 insertions(+), 37 deletions(-) diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java index 5f51617d770..796f159f799 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/summary/SummaryModel.java @@ -22,10 +22,11 @@ public class SummaryModel { public SummaryModel(Context context, DistanceFormatter distanceFormatter, RouteProgress progress, @NavigationTimeFormat.Type int timeFormatType) { distanceRemaining = distanceFormatter.formatDistance(progress.distanceRemaining()).toString(); - timeRemaining = formatTimeRemaining(context, progress.legDurationRemaining()); + double legDurationRemaining = progress.currentLegProgress().durationRemaining(); + timeRemaining = formatTimeRemaining(context, legDurationRemaining); Calendar time = Calendar.getInstance(); boolean isTwentyFourHourFormat = DateFormat.is24HourFormat(context); - arrivalTime = formatTime(time, progress.legDurationRemaining(), timeFormatType, isTwentyFourHourFormat); + arrivalTime = formatTime(time, legDurationRemaining, timeFormatType, isTwentyFourHourFormat); } String getDistanceRemaining() { diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java index 35d8296a113..1d76f36c319 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/TestRouteProgressBuilder.java @@ -25,6 +25,7 @@ RouteProgress buildTestRouteProgress(DirectionsRoute route, double distanceRemaining, int stepIndex, int legIndex) throws Exception { + double legDurationRemaining = route.legs().get(0).duration(); List steps = route.legs().get(legIndex).steps(); LegStep currentStep = steps.get(stepIndex); String currentStepGeometry = currentStep.geometry(); @@ -53,9 +54,9 @@ RouteProgress buildTestRouteProgress(DirectionsRoute route, return RouteProgress.builder() .stepDistanceRemaining(stepDistanceRemaining) .legDistanceRemaining(legDistanceRemaining) + .legDurationRemaining(legDurationRemaining) .distanceRemaining(distanceRemaining) .directionsRoute(route) - .legDurationRemaining(0) .currentStepPoints(currentStepPoints) .upcomingStepPoints(upcomingStepPoints) .intersections(intersections) 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 2ad9cb5310f..eb00886e6cb 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 @@ -27,6 +27,7 @@ class NavigationRouteProcessor { private static final int ONE_INDEX = 1; + public static final int ONE_SECOND = 1000; private RouteProgress previousRouteProgress; private DirectionsRoute route; private RouteLeg currentLeg; @@ -70,8 +71,8 @@ private RouteProgress buildRouteProgressFrom(NavigationStatus status) { double routeDistanceRemaining = routeDistanceRemaining(legDistanceRemaining, legIndex, route); double stepDistanceRemaining = status.getRemainingStepDistance(); double stepDistanceTraveled = currentStep.distance() - stepDistanceRemaining; - double remainingLegDuration = status.getRouteState() == RouteState.TRACKING - ? status.getRemainingLegDuration() / 1000 : route.duration(); + double legDurationRemaining = status.getRouteState() == RouteState.TRACKING + ? status.getRemainingLegDuration() / ONE_SECOND : route.duration(); currentLegAnnotation = createCurrentAnnotation(currentLegAnnotation, currentLeg, legDistanceRemaining); StepIntersection currentIntersection = findCurrentIntersection( @@ -82,10 +83,10 @@ private RouteProgress buildRouteProgressFrom(NavigationStatus status) { ); RouteProgress.Builder progressBuilder = RouteProgress.builder() - .stepDistanceRemaining(stepDistanceRemaining) - .legDistanceRemaining(legDistanceRemaining) .distanceRemaining(routeDistanceRemaining) - .legDurationRemaining(remainingLegDuration) + .legDistanceRemaining(legDistanceRemaining) + .legDurationRemaining(legDurationRemaining) + .stepDistanceRemaining(stepDistanceRemaining) .directionsRoute(route) .currentStepPoints(currentStepPoints) .upcomingStepPoints(upcomingStepPoints) diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgress.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgress.java index 4382248ebbb..fed03ec6e20 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgress.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgress.java @@ -66,9 +66,7 @@ public double distanceTraveled() { * @return long value representing the duration remaining till end of step, in unit seconds. * @since 0.1.0 */ - public double durationRemaining() { - return (1 - fractionTraveled()) * routeLeg().duration(); - } + public abstract double durationRemaining(); /** * Get the fraction traveled along the current leg, this is a float value between 0 and 1 and @@ -217,6 +215,8 @@ public abstract static class Builder { abstract int stepIndex(); + abstract Builder durationRemaining(double durationRemaining); + abstract Builder stepDistanceRemaining(double stepDistanceRemaining); abstract double stepDistanceRemaining(); diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java index 7420484c25e..3226fd05b80 100644 --- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java +++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java @@ -87,8 +87,6 @@ public double durationRemaining() { return (1 - fractionTraveled()) * directionsRoute().duration(); } - public abstract double legDurationRemaining(); - /** * Get the fraction traveled along the current route, this is a float value between 0 and 1 and * isn't guaranteed to reach 1 before the user reaches the end of the route. @@ -190,6 +188,8 @@ public int remainingWaypoints() { abstract List> intersectionDistancesAlongStep(); + abstract double legDurationRemaining(); + @AutoValue.Builder public abstract static class Builder { @@ -209,6 +209,10 @@ public abstract static class Builder { abstract double legDistanceRemaining(); + public abstract Builder legDurationRemaining(double durationRemaining); + + abstract double legDurationRemaining(); + public abstract Builder stepDistanceRemaining(double stepDistanceRemaining); abstract double stepDistanceRemaining(); @@ -223,10 +227,6 @@ public abstract static class Builder { public abstract Builder distanceRemaining(double distanceRemaining); - public abstract Builder legDurationRemaining(double durationRemaining); - - abstract double legDurationRemaining(); - public abstract Builder intersections(List intersections); abstract List intersections(); @@ -263,6 +263,7 @@ public RouteProgress build() { .routeLeg(currentLeg) .stepIndex(stepIndex()) .distanceRemaining(legDistanceRemaining()) + .durationRemaining(legDurationRemaining()) .stepDistanceRemaining(stepDistanceRemaining()) .currentStepPoints(currentStepPoints()) .upcomingStepPoints(upcomingStepPoints()) diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java index e41be06c2c6..271f11f15a5 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/TestRouteProgressBuilder.java @@ -31,6 +31,7 @@ RouteProgress buildTestRouteProgress(DirectionsRoute route, double distanceRemaining, int stepIndex, int legIndex) throws Exception { + double legDurationRemaining = route.legs().get(0).duration(); List steps = route.legs().get(legIndex).steps(); LegStep currentStep = steps.get(stepIndex); List currentStepPoints = buildCurrentStepPoints(currentStep); @@ -55,9 +56,9 @@ RouteProgress buildTestRouteProgress(DirectionsRoute route, return RouteProgress.builder() .stepDistanceRemaining(stepDistanceRemaining) .legDistanceRemaining(legDistanceRemaining) + .legDurationRemaining(legDurationRemaining) .distanceRemaining(distanceRemaining) .directionsRoute(route) - .legDurationRemaining(0) .currentStepPoints(currentStepPoints) .upcomingStepPoints(upcomingStepPoints) .intersections(intersections) diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgressTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgressTest.java index c0ca51944aa..cf14e7c91f7 100644 --- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgressTest.java +++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteLegProgressTest.java @@ -158,25 +158,6 @@ public void getDistanceTraveled_equalsLegDistanceAtEndOfLeg() throws Exception { assertEquals(firstLegDistance, distanceTraveled, BaseTest.DELTA); } - @Test - public void getDurationRemaining_equalsLegDurationAtBeginning() throws Exception { - RouteProgress routeProgress = buildBeginningOfLegRouteProgress(); - DirectionsRoute route = routeProgress.directionsRoute(); - RouteLeg firstLeg = route.legs().get(0); - - Double firstLegDuration = firstLeg.duration(); - double currentLegDurationRemaining = routeProgress.currentLegProgress().durationRemaining(); - - assertEquals(firstLegDuration, currentLegDurationRemaining, BaseTest.DELTA); - } - - @Test - public void getDurationRemaining_equalsZeroAtEndOfLeg() throws Exception { - RouteProgress routeProgress = buildEndOfLegRouteProgress(); - - assertEquals(0, routeProgress.currentLegProgress().durationRemaining(), BaseTest.DELTA); - } - @Test public void followOnStep_doesReturnTwoStepsAheadOfCurrent() throws Exception { int stepIndex = 5;