From 61f592bbd6ffbef86b01c32c34dd428a6b64f5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 11 Sep 2017 09:05:06 -0700 Subject: [PATCH 01/27] Marked style URL as untranslatable --- mapbox/app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapbox/app/src/main/res/values/strings.xml b/mapbox/app/src/main/res/values/strings.xml index 5847c5e80..cf7ebd61b 100644 --- a/mapbox/app/src/main/res/values/strings.xml +++ b/mapbox/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ Mapbox Android Services Settings - mapbox://styles/mapbox/streets-v9 + mapbox://styles/mapbox/streets-v9 category Directions From 31a2e90c7722227e72c4a5d6445830fc39392054 Mon Sep 17 00:00:00 2001 From: osana Date: Thu, 14 Sep 2017 16:17:20 -0700 Subject: [PATCH 02/27] [WIP] Add roundaboutExits param to MapboxDirections (#562) * Add roundaboutExits param to MapboxDirections Added roundaboutExits param to MapboxDirections. Still need to add fixtures, test and check param description * address PR review comments * add test fixture * add test * fix fixture generation * remove unused import * add constants to reflect two new types * fix line length --- Makefile | 4 +++ .../mapbox/services/android/Constants.java | 2 ++ .../api/directions/v5/DirectionsService.java | 4 ++- .../api/directions/v5/MapboxDirections.java | 25 ++++++++++++++++++- .../directions_v5_roundabout_exits.json | 1 + .../directions/v5/MapboxDirectionsTest.java | 20 +++++++++++++++ 6 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 mapbox/libjava-services/src/test/fixtures/directions_v5_roundabout_exits.json diff --git a/Makefile b/Makefile index 47edc2365..112b5a9bb 100644 --- a/Makefile +++ b/Makefile @@ -112,6 +112,10 @@ directions-fixtures: curl "https://api.mapbox.com/directions/v5/mapbox/driving-traffic/-122.416667,37.783333;-121.900000,37.333333?geometries=polyline&steps=true&access_token=$(MAPBOX_ACCESS_TOKEN)" \ -o mapbox/libjava-services/src/test/fixtures/directions_v5_traffic.json + # Directions: allow roundabout exits + curl "https://api.mapbox.com/directions/v5/mapbox/driving-traffic/-77.04014240930304,38.91313201360546;-77.04573453985853,38.90725177816208.json?steps=true&overview=full&geometries=polyline&roundabout_exits=true&access_token=$(MAPBOX_ACCESS_TOKEN)" \ + -o mapbox/libjava-services/src/test/fixtures/directions_v5_roundabout_exits.json + mapmatching-fixtures: curl "https://api.mapbox.com/matching/v5/mapbox/driving/$(MAP_MATCHING_COORDINATES)?geometries=polyline&language=sv&steps=true&access_token=$(MAPBOX_ACCESS_TOKEN)" \ -o mapbox/libjava-services/src/test/fixtures/mapmatching_v5_polyline.json diff --git a/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/Constants.java b/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/Constants.java index 0effb65e4..b6585f399 100644 --- a/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/Constants.java +++ b/mapbox/libandroid-services/src/main/java/com/mapbox/services/android/Constants.java @@ -30,6 +30,8 @@ public class Constants { @Experimental public static final String STEP_MANEUVER_TYPE_ROUNDABOUT = "roundabout"; @Experimental public static final String STEP_MANEUVER_TYPE_ROTARY = "rotary"; @Experimental public static final String STEP_MANEUVER_TYPE_ROUNDABOUT_TURN = "roundabout turn"; + @Experimental public static final String STEP_MANEUVER_TYPE_EXIT_ROUNDABOUT = "exit roundabout"; + @Experimental public static final String STEP_MANEUVER_TYPE_EXIT_ROTARY = "exit rotary"; @Experimental public static final String STEP_MANEUVER_TYPE_NOTIFICATION = "notification"; } diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/DirectionsService.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/DirectionsService.java index 388d78f22..6419a2c3f 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/DirectionsService.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/DirectionsService.java @@ -36,6 +36,7 @@ public interface DirectionsService { * route geometry. Each entry in an annotations field corresponds to a coordinate along the * route geometry. * @param language Language of returned turn-by-turn text instructions. + * @param roundaboutExits Define if exit on roundabout is allowed. * @return The {@link DirectionsResponse} in a Call wrapper. * @since 1.0.0 */ @@ -55,6 +56,7 @@ Call getCall( @Query("bearings") String bearings, @Query("continue_straight") Boolean continueStraight, @Query("annotations") String annotations, - @Query("language") String language + @Query("language") String language, + @Query("roundabout_exits") Boolean roundaboutExits ); } diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/MapboxDirections.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/MapboxDirections.java index 851b08c95..adc67811d 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/MapboxDirections.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/directions/v5/MapboxDirections.java @@ -76,7 +76,8 @@ private Call getCall() { builder.getBearings(), builder.isContinueStraight(), builder.getAnnotation(), - builder.getLanguage()); + builder.getLanguage(), + builder.allowsRoundaboutExits()); // Done return call; @@ -149,6 +150,7 @@ public static class Builder extends MapboxBuilder { private Position destination = null; private String[] annotation = null; private String language = null; + private Boolean roundaboutExits = null; /** * Constructor @@ -373,6 +375,18 @@ public T setLanguage(String language) { return (T) this; } + /** + * Optionally, set this to true if you want to enable instructions while exiting roundabouts + * and rotaries. + * + * @param roundaboutExits true if exit on a roundabout is allowed. + * @return Builder + * @since 2.2.4 + */ + public T setRoundaboutExits(Boolean roundaboutExits) { + this.roundaboutExits = roundaboutExits; + return (T) this; + } /* * Getters, they return the value in a format ready for the API to consume */ @@ -590,6 +604,15 @@ public T setBaseUrl(String baseUrl) { return (T) this; } + /** + * @return return true if you enabled additional instructions while exiting rotaries and + * roundabouts. See {@link #setRoundaboutExits(Boolean)}. + * @since 2.2.4 + */ + public Boolean allowsRoundaboutExits() { + return roundaboutExits; + } + /** * Build method * diff --git a/mapbox/libjava-services/src/test/fixtures/directions_v5_roundabout_exits.json b/mapbox/libjava-services/src/test/fixtures/directions_v5_roundabout_exits.json new file mode 100644 index 000000000..360f66ad8 --- /dev/null +++ b/mapbox/libjava-services/src/test/fixtures/directions_v5_roundabout_exits.json @@ -0,0 +1 @@ +{"waypoints":[{"name":"New Hampshire Avenue Northwest","location":[-77.040159,38.913142]},{"name":"N Street Northwest","location":[-77.045735,38.907244]}],"routes":[{"legs":[{"steps":[{"intersections":[{"out":0,"entry":[true],"location":[-77.040159,38.913142],"bearings":[216]},{"out":2,"in":0,"entry":[false,false,true,true],"location":[-77.04066,38.912608],"bearings":[30,90,210,270]},{"out":2,"in":0,"entry":[false,true,true,false],"location":[-77.041354,38.91187],"bearings":[30,90,210,270]},{"out":3,"in":1,"entry":[true,false,true,true],"location":[-77.041666,38.911537],"bearings":[0,30,180,210]},{"out":2,"in":0,"entry":[false,true,true,false],"location":[-77.042051,38.911129],"bearings":[30,90,210,270]},{"out":2,"in":0,"entry":[false,false,true],"location":[-77.042809,38.910322],"bearings":[30,195,225]}],"geometry":"cfolF~{euMzAtAHHBBLLdCzBj@h@DDNNPNp@l@LLNLpChCFHFLBJ@LAN","duration":124.39999999999999,"distance":421.2,"name":"New Hampshire Avenue Northwest","weight":136.39999999999998,"mode":"driving","maneuver":{"bearing_after":216,"bearing_before":0,"type":"depart","location":[-77.040159,38.913142],"instruction":"Head southwest on New Hampshire Avenue Northwest"}},{"intersections":[{"out":2,"in":0,"entry":[false,false,true],"location":[-77.043141,38.910215],"bearings":[90,120,285]},{"out":1,"in":0,"entry":[false,true,true],"location":[-77.043232,38.910239],"bearings":[105,285,300]},{"out":1,"in":0,"entry":[false,true,true],"location":[-77.043398,38.91026],"bearings":[90,270,285]},{"out":2,"in":1,"entry":[false,false,true],"location":[-77.043676,38.910234],"bearings":[45,75,240]},{"out":2,"in":1,"entry":[false,false,true],"location":[-77.043975,38.9101],"bearings":[15,45,225]},{"out":2,"in":0,"entry":[false,false,true,true],"location":[-77.044115,38.90997],"bearings":[30,75,210,300]},{"out":2,"in":0,"entry":[false,true,true,true,false],"location":[-77.04421,38.909799],"bearings":[15,150,195,210,315]},{"out":0,"in":2,"entry":[true,false,false],"location":[-77.044212,38.909496],"bearings":[165,315,345]}],"geometry":"{snlFrnfuMAHAFAJAH?J?F?F?F@F?F@F@F@F@HDJBHDHDHBDDDBDDBDDB@DBB@DBB@D@B@F@F@D?F@FAF?FADAFAFCFCDCFEDEDE","duration":104.69999999999999,"distance":182.3,"name":"New Hampshire Avenue Northwest","weight":120.8,"mode":"driving","maneuver":{"exit":5,"bearing_after":289,"location":[-77.043141,38.910215],"type":"roundabout","bearing_before":271,"modifier":"straight","instruction":"Enter the roundabout and take the 5th exit onto New Hampshire Avenue Northwest"}},{"intersections":[{"out":1,"in":2,"entry":[true,true,false],"location":[-77.044051,38.909248],"bearings":[135,165,315]},{"out":2,"in":0,"entry":[false,false,true],"location":[-77.044059,38.908982],"bearings":[15,60,210]},{"out":1,"in":0,"entry":[false,true,true],"location":[-77.044444,38.90857],"bearings":[30,210,270]},{"out":3,"in":1,"entry":[true,false,false,true],"location":[-77.0449,38.908073],"bearings":[0,30,180,210]},{"out":2,"in":0,"entry":[false,true,true],"location":[-77.045062,38.907902],"bearings":[30,90,210]}],"geometry":"ymnlFhtfuMNEH?H@D@JBpAjAbBzA`@^bCzB","duration":113.5,"distance":269.4,"name":"New Hampshire Avenue Northwest","weight":130,"mode":"driving","maneuver":{"exit":5,"bearing_after":163,"location":[-77.044051,38.909248],"type":"exit roundabout","bearing_before":142,"modifier":"slight right","instruction":"Make a slight right onto New Hampshire Avenue Northwest"}},{"intersections":[{"out":3,"in":0,"entry":[false,false,true,true],"location":[-77.045681,38.907244],"bearings":[30,90,210,270]}],"geometry":"ganlFn~fuM?J","duration":1.2,"distance":4.7,"name":"N Street Northwest","weight":1.2,"mode":"driving","maneuver":{"bearing_after":268,"location":[-77.045681,38.907244],"type":"turn","bearing_before":215,"modifier":"right","instruction":"Turn right onto N Street Northwest"}},{"intersections":[{"in":0,"entry":[true],"location":[-77.045735,38.907244],"bearings":[90]}],"geometry":"ganlFz~fuM","duration":0,"distance":0,"name":"N Street Northwest","weight":0,"mode":"driving","maneuver":{"bearing_after":0,"bearing_before":270,"type":"arrive","location":[-77.045735,38.907244],"instruction":"You have arrived at your destination"}}],"weight":388.4,"distance":877.5,"summary":"New Hampshire Avenue Northwest, Dupont Circle Northwest","duration":343.8}],"weight_name":"routability","geometry":"cfolF~{euMzAtAHHBBLLdCzBj@h@DDNNPNp@l@LLNLpChCFHFLBJ@LANAHAFAJAH?J?F?F?F@F?F@F@F@F@HDJBHDHDHBDDDBDDBDDB@DBB@DBB@D@B@F@F@D?F@FAF?FADAFAFCFCDCFEDEDENEH?H@D@JBpAjAbBzA`@^bCzB?J","weight":388.4,"distance":877.5,"duration":343.8}],"code":"Ok","uuid":"cj7kzo9zg5tjayani9nxmit7r"} \ No newline at end of file diff --git a/mapbox/libjava-services/src/test/java/com/mapbox/services/api/directions/v5/MapboxDirectionsTest.java b/mapbox/libjava-services/src/test/java/com/mapbox/services/api/directions/v5/MapboxDirectionsTest.java index fec30facb..d0121b312 100644 --- a/mapbox/libjava-services/src/test/java/com/mapbox/services/api/directions/v5/MapboxDirectionsTest.java +++ b/mapbox/libjava-services/src/test/java/com/mapbox/services/api/directions/v5/MapboxDirectionsTest.java @@ -45,6 +45,8 @@ public class MapboxDirectionsTest { private static final String DIRECTIONS_TRAFFIC_FIXTURE = "src/test/fixtures/directions_v5_traffic.json"; private static final String DIRECTIONS_ROTARY_FIXTURE = "src/test/fixtures/directions_v5_fixtures_rotary.json"; private static final String DIRECTIONS_V5_ANNOTATIONS_FIXTURE = "src/test/fixtures/directions_annotations_v5.json"; + private static final String DIRECTIONS_V5_ROUNDABOUTS_FIXTURE = + "src/test/fixtures/directions_v5_roundabout_exits.json"; private static final double DELTA = 1E-10; @@ -76,6 +78,9 @@ public MockResponse dispatch(RecordedRequest request) throws InterruptedExceptio if (request.getPath().contains("annotations")) { resource = DIRECTIONS_V5_ANNOTATIONS_FIXTURE; } + if (request.getPath().contains("roundabout_exits")) { + resource = DIRECTIONS_V5_ROUNDABOUTS_FIXTURE; + } try { String body = new String(Files.readAllBytes(Paths.get(resource)), Charset.forName("utf-8")); @@ -662,4 +667,19 @@ public void setLanguage_doesReturnCorrectTurnInstructionLanguage() throws IOExce assertTrue(response.body().getRoutes().get(0).getLegs().get(0) .getSteps().get(0).getManeuver().getInstruction().contains("Kör åt öster på Eddy Street")); } + + @Test + public void testRoundaboutExitsResponse() throws IOException { + MapboxDirections client = new MapboxDirections.Builder() + .setAccessToken("pk.XXX") + .setCoordinates(positions) + .setProfile(DirectionsCriteria.PROFILE_DRIVING) + .setBaseUrl(mockUrl.toString()) + .setRoundaboutExits(true) + .build(); + + Response response = client.executeCall(); + assertEquals(response.body().getRoutes().get(0).getLegs().get(0) + .getSteps().get(2).getManeuver().getType(), "exit roundabout"); + } } From d089d50b55eb4f888510383270c9d4f2a7f23096 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Tue, 19 Sep 2017 23:32:45 +0200 Subject: [PATCH 03/27] add new user agent api (#568) --- .../android/telemetry/MapboxTelemetry.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java index 5dbf46f2f..e88549bf7 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java @@ -35,7 +35,9 @@ import java.io.IOException; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Hashtable; +import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.Vector; @@ -75,6 +77,15 @@ public class MapboxTelemetry implements Callback, LocationEngineListener { private Hashtable customTurnstileEvent = null; private int sessionIdRotationTime = TelemetryConstants.DEFAULT_SESSION_ID_ROTATION_HOURS; private boolean debugLoggingEnabled = false; + private static final List VALID_USER_AGENTS = new ArrayList() { + { + add("MapboxEventsAndroid/"); + add("MapboxTelemetryAndroid/"); + add("MapboxEventsUnityAndroid/"); + add("mapbox-navigation-android/"); + add("mapbox-navigation-ui-android/"); + } + }; /** * Private constructor for configuring the single instance per app. @@ -187,6 +198,17 @@ public void setDebugLoggingEnabled(boolean debugLoggingEnabled) { } } + // For internal use only + // This is an experimental API. Experimental APIs are quickly evolving and + // might change or be removed in minor versions. + @Experimental + public void newUserAgent(String userAgent) { + if (isUserAgentValid(userAgent)) { + this.userAgent = userAgent; + setUserAgent(); + } + } + /** * Checks that TelemetryService has been configured by developer */ @@ -268,6 +290,17 @@ private void setUserAgent() { client.setUserAgent(fullUserAgent); } + private boolean isUserAgentValid(String userAgent) { + if (!TextUtils.isEmpty(userAgent)) { + for (String userAgentPrefix : VALID_USER_AGENTS) { + if (userAgent.startsWith(userAgentPrefix)) { + return true; + } + } + } + return false; + } + /** * Changes session ID based on time boundary */ From 4af17187fc2ba7087c10e265cd5373048121f4f5 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Tue, 19 Sep 2017 23:58:01 +0200 Subject: [PATCH 04/27] add missing device attribute to navigation events (#565) --- .../android/telemetry/MapboxEvent.java | 1 + .../android/telemetry/MapboxTelemetry.java | 58 ++++++++----------- 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java index 57e017af6..3de931d6b 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java @@ -31,6 +31,7 @@ public class MapboxEvent implements Serializable { public static final String KEY_USER_ID = "userId"; public static final String KEY_ENABLED_TELEMETRY = "enabled.telemetry"; public static final String KEY_MODEL = "model"; + public static final String KEY_DEVICE = "device"; public static final String KEY_OPERATING_SYSTEM = "operatingSystem"; public static final String KEY_RESOLUTION = "resolution"; public static final String KEY_ACCESSIBILITY_FONT_SCALE = "accessibilityFontScale"; diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java index e88549bf7..7aa1fe633 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java @@ -583,47 +583,35 @@ public void pushEvent(Hashtable eventWithAttributes) { eventWithAttributes.put(MapboxEvent.KEY_CELLULAR_NETWORK_TYPE, TelemetryUtils.getCellularNetworkType(context)); eventWithAttributes.put(MapboxEvent.KEY_WIFI, TelemetryUtils.getConnectedToWifi(context)); putEventOnQueue(eventWithAttributes); - } else if (eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_DEPART)) { - // User started a route - eventWithAttributes.put(MapboxNavigationEvent.KEY_VOLUME_LEVEL, TelemetryUtils.getVolumeLevel(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, TelemetryUtils.getScreenBrightness(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_APPLICATION_STATE, TelemetryUtils.getApplicationState(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_PLUGGED_IN, isPluggedIn()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_LEVEL, getBatteryLevel()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_CONNECTIVITY, TelemetryUtils.getCellularNetworkType(context)); - putEventOnQueue(eventWithAttributes); - } else if (eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_FEEDBACK)) { - // User feedback/reroute event - eventWithAttributes.put(MapboxNavigationEvent.KEY_VOLUME_LEVEL, TelemetryUtils.getVolumeLevel(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, TelemetryUtils.getScreenBrightness(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_APPLICATION_STATE, TelemetryUtils.getApplicationState(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_PLUGGED_IN, isPluggedIn()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_LEVEL, getBatteryLevel()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_CONNECTIVITY, TelemetryUtils.getCellularNetworkType(context)); - putEventOnQueue(eventWithAttributes); - } else if (eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_ARRIVE)) { - // User arrived - eventWithAttributes.put(MapboxNavigationEvent.KEY_VOLUME_LEVEL, TelemetryUtils.getVolumeLevel(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, TelemetryUtils.getScreenBrightness(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_APPLICATION_STATE, TelemetryUtils.getApplicationState(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_PLUGGED_IN, isPluggedIn()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_LEVEL, getBatteryLevel()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_CONNECTIVITY, TelemetryUtils.getCellularNetworkType(context)); - putEventOnQueue(eventWithAttributes); - } else if (eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_CANCEL)) { - // User canceled navigation - eventWithAttributes.put(MapboxNavigationEvent.KEY_VOLUME_LEVEL, TelemetryUtils.getVolumeLevel(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, TelemetryUtils.getScreenBrightness(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_APPLICATION_STATE, TelemetryUtils.getApplicationState(context)); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_PLUGGED_IN, isPluggedIn()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_LEVEL, getBatteryLevel()); - eventWithAttributes.put(MapboxNavigationEvent.KEY_CONNECTIVITY, TelemetryUtils.getCellularNetworkType(context)); + } else if (isANavigationEvent(eventType)) { + addGeneralNavigationMetadataTo(eventWithAttributes); putEventOnQueue(eventWithAttributes); } else { Log.w(LOG_TAG, String.format("Unknown event type provided: %s.", eventType)); } } + private boolean isANavigationEvent(String eventType) { + boolean isDepart = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_DEPART); + boolean isFeedback = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_FEEDBACK); + boolean isArrived = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_ARRIVE); + boolean isCanceled = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_CANCEL); + + boolean isANavigationEvent = isDepart || isFeedback || isArrived || isCanceled; + + return isANavigationEvent; + } + + private void addGeneralNavigationMetadataTo(Hashtable eventWithAttributes) { + eventWithAttributes.put(MapboxEvent.KEY_DEVICE, Build.MODEL); + eventWithAttributes.put(MapboxNavigationEvent.KEY_VOLUME_LEVEL, TelemetryUtils.getVolumeLevel(context)); + eventWithAttributes.put(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, TelemetryUtils.getScreenBrightness(context)); + eventWithAttributes.put(MapboxNavigationEvent.KEY_APPLICATION_STATE, TelemetryUtils.getApplicationState(context)); + eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_PLUGGED_IN, isPluggedIn()); + eventWithAttributes.put(MapboxNavigationEvent.KEY_BATTERY_LEVEL, getBatteryLevel()); + eventWithAttributes.put(MapboxNavigationEvent.KEY_CONNECTIVITY, TelemetryUtils.getCellularNetworkType(context)); + } + /** * Immediately attempt to send all events data in the queue to the server. */ From 59a9fc9213dc2db10d8ce535e0d23f2f8d3015f6 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Wed, 20 Sep 2017 00:15:00 +0200 Subject: [PATCH 05/27] Omit null optional fields in Nav events (#566) * omit originalRequestIdentifier, requestIdentifier and audioType optional fields over sending nulls * add support for null json literals --- .../navigation/MapboxNavigationEvent.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java index 90abc987f..3b62ef2f6 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java @@ -5,6 +5,8 @@ import com.mapbox.services.android.telemetry.constants.TelemetryConstants; import com.mapbox.services.android.telemetry.utils.TelemetryUtils; +import org.json.JSONObject; + import java.util.Date; import java.util.Hashtable; @@ -226,7 +228,8 @@ public static Hashtable buildCancelEvent( event.put(KEY_DISTANCE_COMPLETED, distanceCompleted); event.put(KEY_DISTANCE_REMAINING, distanceRemaining); event.put(KEY_DURATION_REMAINING, durationRemaining); - event.put(KEY_ARRIVAL_TIMESTAMP, arrivalTimestamp); + // arrivalTimestamp may be null + addArrivalTimestamp(event, arrivalTimestamp); return event; } @@ -258,15 +261,33 @@ private static Hashtable getMetadata( event.put(KEY_ORIGINAL_STEP_COUNT, originalStepCount); event.put(KEY_REROUTE_COUNT, rerouteCount); event.put(KEY_SIMULATION, isSimulation); - event.put(KEY_ORIGINAL_REQUEST_IDENTIFIER, originalRequestIdentifier); - event.put(KEY_REQUEST_IDENTIFIER, requestIdentifier); + // originalRequestIdentifier may be "null" + addPairIntoEventIfNeeded(event, KEY_ORIGINAL_REQUEST_IDENTIFIER, originalRequestIdentifier); + // requestIdentifier may be "null" + addPairIntoEventIfNeeded(event, KEY_REQUEST_IDENTIFIER, requestIdentifier); event.put(KEY_ORIGINAL_GEOMETRY, originalGeometry); event.put(KEY_ORIGINAL_ESTIMATED_DISTANCE, originalEstimatedDistance); event.put(KEY_ORIGINAL_ESTIMATED_DURATION, originalEstimatedDuration); - event.put(KEY_AUDIO_TYPE, audioType); + // audioType may be "null" + addPairIntoEventIfNeeded(event, KEY_AUDIO_TYPE, audioType); return event; } + private static void addArrivalTimestamp(Hashtable event, Date arrivalTimestamp) { + if (arrivalTimestamp == null) { + event.put(KEY_ARRIVAL_TIMESTAMP, JSONObject.NULL); + } else { + event.put(KEY_ARRIVAL_TIMESTAMP, TelemetryUtils.generateCreateDateFormatted(arrivalTimestamp)); + } + } + + private static void addPairIntoEventIfNeeded(Hashtable event, String key, String value) { + // See NavigationMetricsWrapper.java in https://github.com/mapbox/mapbox-navigation-android + if (value == null || value.equalsIgnoreCase("null")) { + event.put(key, JSONObject.NULL); + } + } + private static Hashtable getStepMetadata( String upcomingInstruction, String upcomingType, String upcomingModifier, String upcomingName, String previousInstruction, String previousType, String previousModifier, String previousName, From 0624cc5123b4661ccd12689d2c46e3fe5c5378ca Mon Sep 17 00:00:00 2001 From: Cameron Mace Date: Wed, 20 Sep 2017 10:22:11 -0400 Subject: [PATCH 06/27] added missing events (#569) * added missing events * added starttime --- .../navigation/MapboxNavigationEvent.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java index 3b62ef2f6..7921ccbe9 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java @@ -105,12 +105,17 @@ public static Hashtable buildDepartEvent( String geometry, String profile, int estimatedDistance, int estimatedDuration, int rerouteCount, boolean isSimulation, String originalRequestIdentifier, String requestIdentifier, String originalGeometry, int originalEstimatedDistance, - int originalEstimatedDuration, String audioType, int stepCount, int originalStepCount) { + int originalEstimatedDuration, String audioType, int stepCount, int originalStepCount, + int distanceCompleted, int distanceRemaining, int durationRemaining, Date startTimestamp) { Hashtable event = getMetadata(sdKIdentifier, sdkVersion, sessionIdentifier, lat, lng, geometry, profile, estimatedDistance, estimatedDuration, rerouteCount, isSimulation, originalRequestIdentifier, requestIdentifier, originalGeometry, originalEstimatedDistance, originalEstimatedDuration, audioType, stepCount, originalStepCount); event.put(KEY_EVENT, TYPE_DEPART); + event.put(KEY_START_TIMESTAMP, TelemetryUtils.generateCreateDateFormatted(startTimestamp)); + event.put(KEY_DISTANCE_COMPLETED, distanceCompleted); + event.put(KEY_DISTANCE_REMAINING, distanceRemaining); + event.put(KEY_DURATION_REMAINING, durationRemaining); return event; } @@ -194,10 +199,10 @@ public static Hashtable buildRerouteEvent( public static Hashtable buildArriveEvent( String sdKIdentifier, String sdkVersion, String sessionIdentifier, double lat, double lng, String geometry, String profile, int estimatedDistance, int estimatedDuration, - int rerouteCount, Date startTimestamp, int distanceCompleted, boolean isSimulation, - String originalRequestIdentifier, String requestIdentifier, String originalGeometry, - int originalEstimatedDistance, int originalEstimatedDuration, String audioType, int stepCount, - int originalStepCount) { + int rerouteCount, Date startTimestamp, int distanceCompleted, int distanceRemaining, + int durationRemaining, boolean isSimulation, String originalRequestIdentifier, + String requestIdentifier, String originalGeometry, int originalEstimatedDistance, + int originalEstimatedDuration, String audioType, int stepCount, int originalStepCount) { Hashtable event = getMetadata(sdKIdentifier, sdkVersion, sessionIdentifier, lat, lng, geometry, profile, estimatedDistance, estimatedDuration, rerouteCount, isSimulation, originalRequestIdentifier, requestIdentifier, originalGeometry, @@ -205,6 +210,8 @@ public static Hashtable buildArriveEvent( event.put(KEY_EVENT, TYPE_ARRIVE); event.put(KEY_START_TIMESTAMP, TelemetryUtils.generateCreateDateFormatted(startTimestamp)); event.put(KEY_DISTANCE_COMPLETED, distanceCompleted); + event.put(KEY_DISTANCE_REMAINING, distanceRemaining); + event.put(KEY_DURATION_REMAINING, durationRemaining); return event; } From a14b1e61747722c6af64d3deaa1e894cb8e897e8 Mon Sep 17 00:00:00 2001 From: Cameron Mace Date: Wed, 20 Sep 2017 16:59:01 -0400 Subject: [PATCH 07/27] bumped nav version (#570) --- .../android/telemetry/navigation/MapboxNavigationEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java index 7921ccbe9..3bafbfce4 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java @@ -15,7 +15,7 @@ */ public class MapboxNavigationEvent { - private static final int EVENT_VERSION = 1; + private static final int EVENT_VERSION = 3; // Event types public static final String TYPE_TURNSTILE = "navigation.turnstile"; From a58b53b016039e8c85987073893c3b778c832a63 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Thu, 21 Sep 2017 15:46:55 +0200 Subject: [PATCH 08/27] fix missing device attribute for navigation events (#571) --- .../java/com/mapbox/services/android/telemetry/MapboxEvent.java | 1 - .../com/mapbox/services/android/telemetry/MapboxTelemetry.java | 2 +- .../mapbox/services/android/telemetry/http/TelemetryClient.java | 1 + .../android/telemetry/navigation/MapboxNavigationEvent.java | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java index 3de931d6b..57e017af6 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java @@ -31,7 +31,6 @@ public class MapboxEvent implements Serializable { public static final String KEY_USER_ID = "userId"; public static final String KEY_ENABLED_TELEMETRY = "enabled.telemetry"; public static final String KEY_MODEL = "model"; - public static final String KEY_DEVICE = "device"; public static final String KEY_OPERATING_SYSTEM = "operatingSystem"; public static final String KEY_RESOLUTION = "resolution"; public static final String KEY_ACCESSIBILITY_FONT_SCALE = "accessibilityFontScale"; diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java index 7aa1fe633..d43145422 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java @@ -603,7 +603,7 @@ private boolean isANavigationEvent(String eventType) { } private void addGeneralNavigationMetadataTo(Hashtable eventWithAttributes) { - eventWithAttributes.put(MapboxEvent.KEY_DEVICE, Build.MODEL); + eventWithAttributes.put(MapboxNavigationEvent.KEY_DEVICE, Build.MODEL); eventWithAttributes.put(MapboxNavigationEvent.KEY_VOLUME_LEVEL, TelemetryUtils.getVolumeLevel(context)); eventWithAttributes.put(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, TelemetryUtils.getScreenBrightness(context)); eventWithAttributes.put(MapboxNavigationEvent.KEY_APPLICATION_STATE, TelemetryUtils.getApplicationState(context)); diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java index b3f849c3d..c316f3610 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java @@ -177,6 +177,7 @@ private void sendEventsWrapped(Vector> events, Callbac jsonObject.putOpt(MapboxNavigationEvent.KEY_ESTIMATED_DURATION, evt.get(MapboxNavigationEvent.KEY_ESTIMATED_DURATION)); jsonObject.putOpt(MapboxNavigationEvent.KEY_REROUTE_COUNT, evt.get(MapboxNavigationEvent.KEY_REROUTE_COUNT)); + jsonObject.putOpt(MapboxNavigationEvent.KEY_DEVICE, evt.get(MapboxNavigationEvent.KEY_DEVICE)); jsonObject.putOpt(MapboxNavigationEvent.KEY_VOLUME_LEVEL, evt.get(MapboxNavigationEvent.KEY_VOLUME_LEVEL)); jsonObject.putOpt(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS, evt.get(MapboxNavigationEvent.KEY_SCREEN_BRIGHTNESS)); diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java index 3bafbfce4..1c4248692 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/navigation/MapboxNavigationEvent.java @@ -47,6 +47,7 @@ public class MapboxNavigationEvent { public static final String KEY_ESTIMATED_DISTANCE = "estimatedDistance"; public static final String KEY_ESTIMATED_DURATION = "estimatedDuration"; public static final String KEY_REROUTE_COUNT = "rerouteCount"; + public static final String KEY_DEVICE = "device"; public static final String KEY_VOLUME_LEVEL = "volumeLevel"; public static final String KEY_SCREEN_BRIGHTNESS = "screenBrightness"; public static final String KEY_APPLICATION_STATE = "applicationState"; From f1cbd9bb49bd94304d07cd5b56fc62f8275cc1b1 Mon Sep 17 00:00:00 2001 From: Anthony Agby Date: Wed, 27 Sep 2017 16:36:43 -0400 Subject: [PATCH 09/27] Add sdkIdentifier + sdkversion (#574) * Add sdkIdentifier + sdkversion - add parameters to initialization call - add fields to MapboxEvent - set sdkIdentifier and sdkVersion when pushing turnstile event - write fallback method to preserve backwards compatability with previous versions --- .../android/telemetry/MapboxEvent.java | 2 + .../android/telemetry/MapboxTelemetry.java | 59 +++++++++++++++++-- .../telemetry/http/TelemetryClient.java | 2 + 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java index 57e017af6..a58031d0a 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxEvent.java @@ -49,6 +49,8 @@ public class MapboxEvent implements Serializable { public static final String KEY_ALTITUDE = "altitude"; public static final String KEY_APPLICATION_STATE = "applicationState"; public static final String KEY_HORIZONTAL_ACCURACY = "horizontalAccuracy"; + public static final String KEY_SDK_IDENTIFIER = "sdkIdentifier"; + public static final String KEY_SDK_VERSION = "sdkVersion"; // Gestures public static final String GESTURE_SINGLETAP = "SingleTap"; diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java index d43145422..6bdac12e8 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java @@ -33,6 +33,8 @@ import com.mapbox.services.android.telemetry.service.TelemetryService; import com.mapbox.services.android.telemetry.utils.TelemetryUtils; +import org.json.JSONObject; + import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; @@ -77,6 +79,8 @@ public class MapboxTelemetry implements Callback, LocationEngineListener { private Hashtable customTurnstileEvent = null; private int sessionIdRotationTime = TelemetryConstants.DEFAULT_SESSION_ID_ROTATION_HOURS; private boolean debugLoggingEnabled = false; + private String sdkIdentifier = ""; + private String sdkVersion = ""; private static final List VALID_USER_AGENTS = new ArrayList() { { add("MapboxEventsAndroid/"); @@ -111,11 +115,31 @@ public static synchronized MapboxTelemetry getInstance() { * * @param context The context associated with the application * @param accessToken The accessToken associated with the application + * @param userAgent source of requests * @param locationEngine Initialize telemetry with a custom location engine */ - public void initialize(@NonNull Context context, @NonNull String accessToken, - @NonNull String userAgent, @NonNull LocationEngine locationEngine) { + public void initialize(@NonNull Context context, @NonNull String accessToken, @NonNull String userAgent, + @NonNull LocationEngine locationEngine) { this.locationEngine = locationEngine; + + initialize(context, accessToken, userAgent); + } + + /** + * Initialize MapboxTelemetry - with sdkIdentifier + sdkVersion + * + * @param context The context associated with the application + * @param accessToken The accessToken associated with the application + * @param userAgent source of requests + * @param sdkIdentifier Identifies which sdk is sending the event + * @param sdkVersion version of the sdk sending the event + */ + + public void initialize(@NonNull Context context, @NonNull String accessToken, @NonNull String userAgent, + @NonNull String sdkIdentifier, @NonNull String sdkVersion) { + this.sdkIdentifier = sdkIdentifier; + this.sdkVersion = sdkVersion; + initialize(context, accessToken, userAgent); } @@ -124,6 +148,7 @@ public void initialize(@NonNull Context context, @NonNull String accessToken, * * @param context The context associated with the application * @param accessToken The accessToken associated with the application + * @param userAgent source of requests */ public void initialize(@NonNull Context context, @NonNull String accessToken, @NonNull String userAgent) { if (initialized) { @@ -134,9 +159,11 @@ public void initialize(@NonNull Context context, @NonNull String accessToken, @N this.context = context.getApplicationContext(); this.accessToken = accessToken; this.userAgent = userAgent; - if (this.context == null || TextUtils.isEmpty(this.accessToken) || TextUtils.isEmpty(this.userAgent)) { + + if (this.context == null || TextUtils.isEmpty(this.accessToken) || TextUtils.isEmpty(this.userAgent) + || this.sdkIdentifier == null || this.sdkVersion == null) { throw new TelemetryException( - "Please, make sure you provide a valid context, access token, and user agent. " + "Please, make sure you provide a valid context, access token, user agent, sdkIdentifier and sdkVersion. " + "For more information, please visit https://www.mapbox.com/android-sdk."); } @@ -651,6 +678,8 @@ private void pushTurnstileEvent() { event.put(MapboxEvent.KEY_CREATED, TelemetryUtils.generateCreateDate(null)); event.put(MapboxEvent.KEY_USER_ID, mapboxVendorId); event.put(MapboxEvent.KEY_ENABLED_TELEMETRY, isTelemetryEnabled()); + event.put(MapboxEvent.KEY_SDK_IDENTIFIER, addSdkIdentifier()); + event.put(MapboxEvent.KEY_SDK_VERSION, addsdkVersion()); events.add(event); flushEventsQueueImmediately(true); @@ -740,4 +769,26 @@ public void setAccessToken(@NonNull String accessToken) { this.accessToken = accessToken; client.setAccessToken(accessToken); } + + /** + * Check for empty strings and returns desired sdkIdentifier input for event + */ + private Object addSdkIdentifier() { + if (sdkIdentifier.isEmpty()) { + return JSONObject.NULL; + } + + return sdkIdentifier; + } + + /** + * Check for empty strings and returns desired sdkVersion input for event + */ + private Object addsdkVersion() { + if (sdkVersion.isEmpty()) { + return JSONObject.NULL; + } + + return sdkVersion; + } } diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java index c316f3610..728dafd05 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/http/TelemetryClient.java @@ -237,6 +237,8 @@ private void sendEventsWrapped(Vector> events, Callbac jsonObject.putOpt(MapboxEvent.KEY_SOURCE, evt.get(MapboxEvent.KEY_SOURCE)); jsonObject.putOpt(MapboxEvent.KEY_SESSION_ID, evt.get(MapboxEvent.KEY_SESSION_ID)); jsonObject.putOpt(MapboxEvent.KEY_LATITUDE, evt.get(MapboxEvent.KEY_LATITUDE)); + jsonObject.putOpt(MapboxEvent.KEY_SDK_IDENTIFIER, evt.get(MapboxEvent.KEY_SDK_IDENTIFIER)); + jsonObject.putOpt(MapboxEvent.KEY_SDK_VERSION, evt.get(MapboxEvent.KEY_SDK_VERSION)); // Make sure longitude is wrapped if (evt.containsKey(MapboxEvent.KEY_LONGITUDE)) { From e1de98d28ad7276c5e948faf7cb0a36843a8f412 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Fri, 29 Sep 2017 10:14:43 +0200 Subject: [PATCH 10/27] Release 2.2.5 (#578) * fix version name to release 2.2.5 * change version name back to 2.3.0-SNAPSHOT * updated changelog for 2.2.4 and 2.2.5 --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f7f80514..a5d4c3469 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ Mapbox welcomes participation and contributions from everyone. +### v2.2.5 + +- set sdkIdentifier and sdkVersion when pushing turnstile event [#574](https://github.com/mapbox/mapbox-java/pull/574) + +### v2.2.4 + +- Bumped Navigation Events `EVENT_VERSION` variable to version 3 [#570](https://github.com/mapbox/mapbox-java/pull/570) +- Adds missing event parameters to the NavigationEvent methods [#569](https://github.com/mapbox/mapbox-java/pull/569) +- Adds newUserAgent to telemetry [#568](https://github.com/mapbox/mapbox-java/pull/568) +- Fixes arrival timestamp formatting [#567](https://github.com/mapbox/mapbox-java/pull/567) +- Omit null optional fields in Nav events [#566](https://github.com/mapbox/mapbox-java/pull/566) +- Adds missing device attribute to Navigation events [#565](https://github.com/mapbox/mapbox-java/pull/565) +- Adds roundaboutExits param to MapboxDirections [#562](https://github.com/mapbox/mapbox-java/pull/562) + ### v2.2.3 - Introduce setDebugLoggingEnabled API [#549](https://github.com/mapbox/mapbox-java/pull/549) From 0038b429af4c66838f56905a49a54a46b172d1cf Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Thu, 5 Oct 2017 18:42:13 +0200 Subject: [PATCH 11/27] add navigation reroute events support (#581) --- .../com/mapbox/services/android/telemetry/MapboxTelemetry.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java index 6bdac12e8..681bc4333 100644 --- a/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java +++ b/mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java @@ -623,8 +623,9 @@ private boolean isANavigationEvent(String eventType) { boolean isFeedback = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_FEEDBACK); boolean isArrived = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_ARRIVE); boolean isCanceled = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_CANCEL); + boolean isReroute = eventType.equalsIgnoreCase(MapboxNavigationEvent.TYPE_REROUTE); - boolean isANavigationEvent = isDepart || isFeedback || isArrived || isCanceled; + boolean isANavigationEvent = isDepart || isFeedback || isArrived || isCanceled || isReroute; return isANavigationEvent; } From 2137263b2e05c74d642fdf73c613d5c51688cd63 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Thu, 5 Oct 2017 19:58:03 +0200 Subject: [PATCH 12/27] Make location provider optional (#502) * [WIP] make location provider optional * [WIP] fix location engine provider providing only those that are available * fix location engine provider public api and remove classes not necessary anymore * fix location engine provider public APIs * bump dependencies (build tools, support libraries, mapbox and lost) and address PR comments * ignore location engine coming from mapbox-android-sdk momentarily so that CI passes (chicken-egg problem) * fix naming * fix some breaking API changes * fix obtain best location engine not returning default location engine in some cases --- mapbox/app/build.gradle | 3 + .../geocoding/GeocodingServiceActivity.java | 16 ++-- .../geocoding/GeocodingWidgetActivity.java | 10 +- .../location/LocationEngineActivity.java | 93 ++++++++++++------- mapbox/app/src/main/res/values/strings.xml | 2 +- mapbox/dependencies.gradle | 16 ++-- mapbox/libandroid-services/build.gradle | 5 - .../android/location/MockLocationEngine.java | 5 + mapbox/libandroid-telemetry/build.gradle | 8 ++ .../android/telemetry/MapboxTelemetry.java | 20 ++-- .../location/AndroidLocationEngine.java | 35 ++++--- .../AndroidLocationEngineFactory.java | 17 ++++ .../telemetry/location/ClasspathChecker.java | 15 +++ .../location/GoogleLocationEngine.java | 26 ++++-- .../location/GoogleLocationEngineFactory.java | 24 +++++ .../telemetry/location/LocationEngine.java | 5 + .../location/LocationEngineProvider.java | 70 ++++++++++++++ .../location/LocationEngineSupplier.java | 11 +++ .../location/LostLocationEngine.java | 57 ++++++++---- .../location/LostLocationEngineFactory.java | 24 +++++ 20 files changed, 354 insertions(+), 108 deletions(-) create mode 100644 mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/AndroidLocationEngineFactory.java create mode 100644 mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/ClasspathChecker.java rename mapbox/{app/src/main/java/com/mapbox/services/android/testapp => libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry}/location/GoogleLocationEngine.java (88%) create mode 100644 mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/GoogleLocationEngineFactory.java create mode 100644 mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/LocationEngineProvider.java create mode 100644 mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/LocationEngineSupplier.java rename mapbox/{libandroid-services/src/main/java/com/mapbox/services/android => libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry}/location/LostLocationEngine.java (79%) create mode 100644 mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/location/LostLocationEngineFactory.java diff --git a/mapbox/app/build.gradle b/mapbox/app/build.gradle index 80da05ea6..9edb3c7fc 100644 --- a/mapbox/app/build.gradle +++ b/mapbox/app/build.gradle @@ -59,6 +59,9 @@ dependencies { // Google Play Services compile rootProject.ext.dep.gmsLocation + // LOST + compile rootProject.ext.dep.lost + // Picasso (Static Image) compile rootProject.ext.dep.picasso diff --git a/mapbox/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingServiceActivity.java b/mapbox/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingServiceActivity.java index 6ec668956..686bc8020 100644 --- a/mapbox/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingServiceActivity.java +++ b/mapbox/app/src/main/java/com/mapbox/services/android/testapp/geocoding/GeocodingServiceActivity.java @@ -14,9 +14,9 @@ import android.widget.Toast; import com.mapbox.services.android.geocoder.AndroidGeocoder; -import com.mapbox.services.android.telemetry.location.AndroidLocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngineListener; +import com.mapbox.services.android.telemetry.location.LocationEngineProvider; import com.mapbox.services.android.testapp.R; import com.mapbox.services.android.testapp.geocoding.service.Constants; import com.mapbox.services.android.testapp.geocoding.service.FetchAddressIntentService; @@ -122,10 +122,14 @@ private void updateValuesFromBundle(Bundle savedInstanceState) { } /** - * Builds Android location engine + * Builds location engine */ - private synchronized void buildAndroidLocationEngine() { - locationEngine = AndroidLocationEngine.getLocationEngine(this); + private void buildAndroidLocationEngine() { + LocationEngineProvider locationEngineProvider = new LocationEngineProvider(this); + locationEngine = locationEngineProvider.obtainLocationEngineBy(LocationEngine.Type.GOOGLE_PLAY_SERVICES); + if (locationEngine == null) { + locationEngine = locationEngineProvider.obtainBestLocationEngineAvailable(); + } locationEngine.addLocationEngineListener(this); locationEngine.activate(); } @@ -264,8 +268,8 @@ private static class AddressResultReceiver extends ResultReceiver { private final WeakReference progressBarReference; private final WeakReference