Skip to content

Commit 9633965

Browse files
Guardiola31337Guardiola31337
authored andcommitted
use snapped location in check faster route, fix voice instructions logic, add instruction loader null checks to prevent potential npes and opt-in mocking of final classes/methods and fix voice instruction milestone tests (#1318)
1 parent 34588d4 commit 9633965

File tree

8 files changed

+43
-42
lines changed

8 files changed

+43
-42
lines changed

libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/instruction/InstructionView.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -750,15 +750,22 @@ private void updateDataFromInstruction(InstructionModel model) {
750750
private void updateDataFromBannerInstruction(InstructionModel model) {
751751
updateManeuverView(model);
752752
if (model.getPrimaryBannerText() != null) {
753-
createInstructionLoader(upcomingPrimaryText, model.getPrimaryBannerText()).loadInstruction();
753+
InstructionLoader instructionLoader = createInstructionLoader(upcomingPrimaryText, model.getPrimaryBannerText());
754+
if (instructionLoader != null) {
755+
instructionLoader.loadInstruction();
756+
}
754757
}
755758
if (model.getSecondaryBannerText() != null) {
756759
if (upcomingSecondaryText.getVisibility() == GONE) {
757760
upcomingSecondaryText.setVisibility(VISIBLE);
758761
upcomingPrimaryText.setMaxLines(1);
759762
adjustBannerTextVerticalBias(0.65f);
760763
}
761-
createInstructionLoader(upcomingSecondaryText, model.getSecondaryBannerText()).loadInstruction();
764+
InstructionLoader instructionLoader = createInstructionLoader(upcomingSecondaryText,
765+
model.getSecondaryBannerText());
766+
if (instructionLoader != null) {
767+
instructionLoader.loadInstruction();
768+
}
762769
} else {
763770
upcomingPrimaryText.setMaxLines(2);
764771
upcomingSecondaryText.setVisibility(GONE);

libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/milestone/VoiceInstructionMilestone.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mapbox.services.android.navigation.v5.milestone;
22

33
import com.mapbox.api.directions.v5.models.DirectionsRoute;
4+
import com.mapbox.navigator.VoiceInstruction;
45
import com.mapbox.services.android.navigation.v5.instruction.Instruction;
56
import com.mapbox.services.android.navigation.v5.navigation.VoiceInstructionLoader;
67
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
@@ -104,10 +105,10 @@ private void cacheInstructions(RouteProgress routeProgress, boolean isFirst) {
104105
}
105106

106107
private boolean updateCurrentAnnouncement(RouteProgress routeProgress) {
107-
String currentAnnouncement = routeProgress.currentAnnouncement();
108-
if (!currentAnnouncement.isEmpty() && !announcement.equals(currentAnnouncement)) {
109-
announcement = currentAnnouncement;
110-
ssmlAnnouncement = routeProgress.currentSsmlAnnouncement();
108+
VoiceInstruction currentVoiceInstruction = routeProgress.voiceInstruction();
109+
if (currentVoiceInstruction != null) {
110+
announcement = currentVoiceInstruction.getAnnouncement();
111+
ssmlAnnouncement = currentVoiceInstruction.getSsmlAnnouncement();
111112
cacheInstructions(routeProgress, false);
112113
return true;
113114
}

libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationRouteProcessor.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,6 @@ private void addUpcomingStepPoints(RouteProgress.Builder progressBuilder) {
124124

125125
private void addVoiceInstructions(NavigationStatus status, RouteProgress.Builder progressBuilder) {
126126
VoiceInstruction voiceInstruction = status.getVoiceInstruction();
127-
if (voiceInstruction != null) {
128-
progressBuilder.currentAnnouncement(voiceInstruction.getAnnouncement());
129-
progressBuilder.currentSsmlAnnouncement(voiceInstruction.getSsmlAnnouncement());
130-
}
127+
progressBuilder.voiceInstruction(voiceInstruction);
131128
}
132129
}

libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/RouteProcessorRunnable.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ private void process() {
5959
NavigationEngineFactory engineFactory = navigation.retrieveEngineFactory();
6060
final boolean userOffRoute = isUserOffRoute(options, status, rawLocation, routeProgress, engineFactory);
6161
final Location snappedLocation = findSnappedLocation(status, rawLocation, routeProgress, engineFactory);
62-
final boolean checkFasterRoute = checkFasterRoute(options, rawLocation, routeProgress, engineFactory, userOffRoute);
62+
final boolean checkFasterRoute = checkFasterRoute(options, snappedLocation, routeProgress, engineFactory,
63+
userOffRoute);
6364
final List<Milestone> milestones = findTriggeredMilestones(navigation, routeProgress);
6465

6566
sendUpdateToResponseHandler(userOffRoute, milestones, snappedLocation, checkFasterRoute, routeProgress);

libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/routeprogress/RouteProgress.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.mapbox.api.directions.v5.models.RouteLeg;
1010
import com.mapbox.api.directions.v5.models.StepIntersection;
1111
import com.mapbox.geojson.Point;
12+
import com.mapbox.navigator.VoiceInstruction;
1213

1314
import java.util.List;
1415

@@ -28,8 +29,6 @@
2829
@AutoValue
2930
public abstract class RouteProgress {
3031

31-
private static final String EMPTY_ANNOUNCEMENT = "";
32-
3332
/**
3433
* Get the route the navigation session is currently using. When a reroute occurs and a new
3534
* directions route gets obtained, with the next location update this directions route should
@@ -161,16 +160,13 @@ public int remainingWaypoints() {
161160
public abstract boolean inTunnel();
162161

163162
/**
164-
* @return current announcement
165-
* @since 0.19.0
166-
*/
167-
public abstract String currentAnnouncement();
168-
169-
/**
170-
* @return current announcement with SSML markup
171-
* @since 0.19.0
163+
* Current voice instruction.
164+
*
165+
* @return current voice instruction
166+
* @since 0.20.0
172167
*/
173-
public abstract String currentSsmlAnnouncement();
168+
@Nullable
169+
public abstract VoiceInstruction voiceInstruction();
174170

175171
public abstract RouteProgress.Builder toBuilder();
176172

@@ -251,9 +247,7 @@ public abstract Builder intersectionDistancesAlongStep(
251247

252248
public abstract Builder inTunnel(boolean inTunnel);
253249

254-
public abstract Builder currentAnnouncement(String announcement);
255-
256-
public abstract Builder currentSsmlAnnouncement(String ssmlAnnouncement);
250+
public abstract Builder voiceInstruction(@Nullable VoiceInstruction voiceInstruction);
257251

258252
abstract RouteProgress autoBuild(); // not public
259253

@@ -279,8 +273,6 @@ public RouteProgress build() {
279273
}
280274

281275
public static Builder builder() {
282-
return new AutoValue_RouteProgress.Builder()
283-
.currentAnnouncement(EMPTY_ANNOUNCEMENT)
284-
.currentSsmlAnnouncement(EMPTY_ANNOUNCEMENT);
276+
return new AutoValue_RouteProgress.Builder();
285277
}
286278
}

libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/snap/SnapToRoute.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ private Location buildSnappedLocation(Location location, NavigationStatus status
2424
snappedLocation.setLatitude(status.getLocation().latitude());
2525
snappedLocation.setLongitude(status.getLocation().longitude());
2626
snappedLocation.setBearing(status.getBearing());
27+
snappedLocation.setTime(status.getTime().getTime());
2728
return snappedLocation;
2829
}
2930
}

libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/milestone/VoiceInstructionMilestoneTest.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.mapbox.services.android.navigation.v5.milestone;
22

33
import com.mapbox.api.directions.v5.models.DirectionsRoute;
4+
import com.mapbox.navigator.VoiceInstruction;
45
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
56

67
import org.junit.Test;
78

89
import static junit.framework.Assert.assertEquals;
910
import static junit.framework.Assert.assertFalse;
1011
import static junit.framework.Assert.assertNotNull;
12+
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
1113
import static org.mockito.Mockito.mock;
1214
import static org.mockito.Mockito.when;
1315

@@ -23,26 +25,25 @@ public void sanity() {
2325
@Test
2426
public void onSameInstructionOccurring_milestoneDoesNotTriggerTwice() {
2527
RouteProgress firstProgress = mock(RouteProgress.class);
26-
when(firstProgress.currentAnnouncement()).thenReturn("instruction");
28+
VoiceInstruction voiceInstruction = mock(VoiceInstruction.class);
29+
when(firstProgress.voiceInstruction()).thenReturn(voiceInstruction, null);
30+
when(voiceInstruction.getAnnouncement()).thenReturn("instruction");
2731
when(firstProgress.directionsRoute()).thenReturn(mock(DirectionsRoute.class));
28-
RouteProgress secondProgress = mock(RouteProgress.class);
29-
when(secondProgress.directionsRoute()).thenReturn(mock(DirectionsRoute.class));
30-
when(secondProgress.currentAnnouncement()).thenReturn("instruction");
3132
VoiceInstructionMilestone milestone = buildVoiceInstructionMilestone();
3233

3334
milestone.isOccurring(firstProgress, firstProgress);
34-
boolean shouldNotBeOccurring = milestone.isOccurring(firstProgress, secondProgress);
35+
boolean shouldNotBeOccurring = milestone.isOccurring(firstProgress, firstProgress);
3536

3637
assertFalse(shouldNotBeOccurring);
3738
}
3839

3940
@Test
4041
public void onOccurringMilestone_voiceSsmlInstructionsAreReturned() {
41-
RouteProgress routeProgress = mock(RouteProgress.class);
42+
RouteProgress routeProgress = mock(RouteProgress.class, RETURNS_DEEP_STUBS);
4243
when(routeProgress.directionsRoute()).thenReturn(mock(DirectionsRoute.class));
43-
when(routeProgress.currentAnnouncement()).thenReturn("current announcement");
44+
when(routeProgress.voiceInstruction().getAnnouncement()).thenReturn("current announcement");
4445
String currentSsmlAnnouncement = "current SSML announcement";
45-
when(routeProgress.currentSsmlAnnouncement()).thenReturn(currentSsmlAnnouncement);
46+
when(routeProgress.voiceInstruction().getSsmlAnnouncement()).thenReturn(currentSsmlAnnouncement);
4647
VoiceInstructionMilestone milestone = buildVoiceInstructionMilestone();
4748

4849
milestone.isOccurring(routeProgress, routeProgress);
@@ -52,12 +53,12 @@ public void onOccurringMilestone_voiceSsmlInstructionsAreReturned() {
5253

5354
@Test
5455
public void onOccurringMilestone_voiceInstructionsAreReturned() {
55-
RouteProgress routeProgress = mock(RouteProgress.class);
56+
RouteProgress routeProgress = mock(RouteProgress.class, RETURNS_DEEP_STUBS);
5657
when(routeProgress.directionsRoute()).thenReturn(mock(DirectionsRoute.class));
5758
String currentAnnouncement = "current announcement";
58-
when(routeProgress.currentAnnouncement()).thenReturn(currentAnnouncement);
59+
when(routeProgress.voiceInstruction().getAnnouncement()).thenReturn(currentAnnouncement);
5960
String currentSsmlAnnouncement = "current SSML announcement";
60-
when(routeProgress.currentSsmlAnnouncement()).thenReturn(currentSsmlAnnouncement);
61+
when(routeProgress.voiceInstruction().getSsmlAnnouncement()).thenReturn(currentSsmlAnnouncement);
6162
VoiceInstructionMilestone milestone = buildVoiceInstructionMilestone();
6263

6364
milestone.isOccurring(routeProgress, routeProgress);
@@ -67,12 +68,12 @@ public void onOccurringMilestone_voiceInstructionsAreReturned() {
6768

6869
@Test
6970
public void onOccurringMilestone_instructionsAreReturned() {
70-
RouteProgress routeProgress = mock(RouteProgress.class);
71+
RouteProgress routeProgress = mock(RouteProgress.class, RETURNS_DEEP_STUBS);
7172
when(routeProgress.directionsRoute()).thenReturn(mock(DirectionsRoute.class));
7273
String currentAnnouncement = "current announcement";
73-
when(routeProgress.currentAnnouncement()).thenReturn(currentAnnouncement);
74+
when(routeProgress.voiceInstruction().getAnnouncement()).thenReturn(currentAnnouncement);
7475
String currentSsmlAnnouncement = "current SSML announcement";
75-
when(routeProgress.currentSsmlAnnouncement()).thenReturn(currentSsmlAnnouncement);
76+
when(routeProgress.voiceInstruction().getSsmlAnnouncement()).thenReturn(currentSsmlAnnouncement);
7677
VoiceInstructionMilestone milestone = buildVoiceInstructionMilestone();
7778

7879
milestone.isOccurring(routeProgress, routeProgress);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
mock-maker-inline

0 commit comments

Comments
 (0)