Skip to content

Commit c3b998c

Browse files
author
Łukasz Paczos
committed
add ability to handle encoded coordinates in RouteOptions#toUrl
1 parent 6b84207 commit c3b998c

2 files changed

Lines changed: 30 additions & 11 deletions

File tree

services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -873,15 +873,15 @@ public static RouteOptions fromUrl(@NonNull URL url) {
873873

874874
optionsJson.addProperty("baseUrl", url.getProtocol() + "://" + url.getHost());
875875

876-
String[] pathElements = url.getPath().split("/");
877-
optionsJson.addProperty("user", pathElements[3]);
878-
optionsJson.addProperty("profile", pathElements[4]);
879-
optionsJson.addProperty("coordinates", pathElements[5]);
880-
881-
String[] queryElements = url.getQuery().split("&");
882-
for (String query : queryElements) {
883-
int idx = query.indexOf("=");
884-
try {
876+
try {
877+
String[] pathElements = url.getPath().split("/");
878+
optionsJson.addProperty("user", URLDecoder.decode(pathElements[3], UTF_8));
879+
optionsJson.addProperty("profile", URLDecoder.decode(pathElements[4], UTF_8));
880+
optionsJson.addProperty("coordinates", URLDecoder.decode(pathElements[5], UTF_8));
881+
882+
String[] queryElements = url.getQuery().split("&");
883+
for (String query : queryElements) {
884+
int idx = query.indexOf("=");
885885
String property = URLDecoder.decode(query.substring(0, idx), UTF_8);
886886
String value = URLDecoder.decode(query.substring(idx + 1), UTF_8);
887887

@@ -904,9 +904,9 @@ public static RouteOptions fromUrl(@NonNull URL url) {
904904
value
905905
);
906906
}
907-
} catch (UnsupportedEncodingException ex) {
908-
throw new RuntimeException(ex);
909907
}
908+
} catch (UnsupportedEncodingException ex) {
909+
throw new RuntimeException(ex);
910910
}
911911

912912
return fromJsonString(optionsJson.toString());

services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,25 @@ public void routeOptions_toUrl_fromUrl_withEncodedChars() {
432432
assertEquals(expectedOptions, resultingOptions);
433433
}
434434

435+
@Test
436+
public void routeOptions_fromUrl_withEncodedCoordinates() throws MalformedURLException {
437+
List<Point> coordinates = new ArrayList<>();
438+
coordinates.add(Point.fromLngLat(-122.4003312, 37.7736941));
439+
coordinates.add(Point.fromLngLat(-122.4187529, 37.7689715));
440+
441+
RouteOptions expectedOptions = RouteOptions.builder()
442+
.profile(DirectionsCriteria.PROFILE_DRIVING)
443+
.coordinatesList(coordinates)
444+
.waypointNames("my starting position;my destination")
445+
.build();
446+
447+
String url = "https://api.mapbox.com/directions/v5/mapbox/driving/-122.4003312%2C37.7736941;-122.4187529%2C37.7689715?access_token=pk.token&geometries=polyline6&waypoint_names=my%20starting%20position;my%20destination";
448+
449+
RouteOptions resultingOptions = RouteOptions.fromUrl(new URL(url));
450+
451+
assertEquals(expectedOptions, resultingOptions);
452+
}
453+
435454
@Test
436455
public void routeOptionsWithUTF8Chars_toUrlWithEncodedChars() {
437456
String expectedEncodedUrl =

0 commit comments

Comments
 (0)