From 484264ed8bfcbe703d3d0444fccf4f7256502490 Mon Sep 17 00:00:00 2001
From: danesfeder
Date: Mon, 12 Feb 2018 16:59:32 -0500
Subject: [PATCH 1/4] Update Maps SDK with MAS 3.0
---
build.gradle | 1 +
gradle/dependencies.gradle | 4 +-
.../ui/v5/route/NavigationMapRoute.java | 50 +++++++++----------
.../navigation/ui/v5/utils/MapUtils.java | 4 +-
4 files changed, 29 insertions(+), 30 deletions(-)
diff --git a/build.gradle b/build.gradle
index e66e3e3c9a1..5c9f47073a5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,6 +25,7 @@ task testReport(type: TestReport, group: 'Build') {
allprojects {
repositories {
maven { url 'https://plugins.gradle.org/m2' }
+ maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
google()
jcenter()
}
diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index bf13343e8f2..53e909e1117 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -8,10 +8,10 @@ ext {
]
version = [
- mapboxMapSdk : '5.5.2',
+ mapboxMapSdk : '6.0.0-beta.6',
mapboxServices : '2.2.10',
mapboxSdkServices : '3.0.1',
- locationLayerPlugin: '0.4.0',
+ locationLayerPlugin: '0.5.0-beta.2',
autoValue : '1.5',
autoValueParcel : '0.2.5',
junit : '4.12',
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
index 8302ad4eb6b..21daefcb016 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
@@ -16,6 +16,10 @@
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.api.directions.v5.models.RouteLeg;
import com.mapbox.core.constants.Constants;
+import com.mapbox.geojson.Feature;
+import com.mapbox.geojson.FeatureCollection;
+import com.mapbox.geojson.LineString;
+import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
@@ -33,11 +37,6 @@
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation;
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
-import com.mapbox.services.commons.geojson.Feature;
-import com.mapbox.services.commons.geojson.FeatureCollection;
-import com.mapbox.services.commons.geojson.LineString;
-import com.mapbox.services.commons.geojson.Point;
-import com.mapbox.services.commons.models.Position;
import com.mapbox.turf.TurfConstants;
import com.mapbox.turf.TurfMeasurement;
import com.mapbox.turf.TurfMisc;
@@ -306,11 +305,11 @@ private void drawRoutes() {
for (int i = featureCollections.size() - 1; i >= 0; i--) {
MapUtils.updateMapSourceFromFeatureCollection(
mapboxMap, featureCollections.get(i),
- featureCollections.get(i).getFeatures().get(0).getStringProperty(SOURCE_KEY)
+ featureCollections.get(i).features().get(0).getStringProperty(SOURCE_KEY)
);
// Get some required information for the next step
- String sourceId = featureCollections.get(i).getFeatures()
+ String sourceId = featureCollections.get(i).features()
.get(0).getStringProperty(SOURCE_KEY);
int index = featureCollections.indexOf(featureCollections.get(i));
@@ -350,8 +349,8 @@ private void generateFeatureCollectionList(List directionsRoute
private static FeatureCollection waypointFeatureCollection(DirectionsRoute route) {
final List waypointFeatures = new ArrayList<>();
for (RouteLeg leg : route.legs()) {
- waypointFeatures.add(getPointFromLineString(leg, 0));
- waypointFeatures.add(getPointFromLineString(leg, leg.steps().size() - 1));
+ waypointFeatures.add(getPointFromLineString(route, 0));
+ waypointFeatures.add(getPointFromLineString(route, leg.steps().size() - 1));
}
return FeatureCollection.fromFeatures(waypointFeatures);
}
@@ -580,15 +579,13 @@ private void drawWaypointMarkers(@NonNull MapboxMap mapboxMap, @Nullable Drawabl
}
}
- private static Feature getPointFromLineString(RouteLeg leg, int stepIndex) {
- Feature feature = Feature.fromGeometry(Point.fromCoordinates(
- new double[] {
- leg.steps().get(stepIndex).maneuver().location().longitude(),
- leg.steps().get(stepIndex).maneuver().location().latitude()
- }));
+ private static Feature getPointFromLineString(DirectionsRoute route, int index) {
+ List coordinates = route.routeOptions().coordinates();
+ Point waypoint = coordinates.get(index);
+ Feature feature = Feature.fromGeometry(waypoint);
feature.addStringProperty(SOURCE_KEY, WAYPOINT_SOURCE_ID);
feature.addStringProperty("waypoint",
- stepIndex == 0 ? "origin" : "destination"
+ index == 0 ? "origin" : "destination"
);
return feature;
}
@@ -666,9 +663,9 @@ private boolean calculateClickDistancesFromRoutes(HashMap linePoints = new ArrayList<>();
- List positions = lineString.getCoordinates();
- for (Position pos : positions) {
- linePoints.add(com.mapbox.geojson.Point.fromLngLat(pos.getLongitude(), pos.getLatitude()));
+ List positions = lineString.coordinates();
+ for (Point pos : positions) {
+ linePoints.add(com.mapbox.geojson.Point.fromLngLat(pos.longitude(), pos.latitude()));
}
com.mapbox.geojson.Feature feature = TurfMisc.nearestPointOnLine(clickPoint, linePoints);
@@ -690,8 +687,8 @@ private void updateRoute() {
// Update all route geometries to reflect their appropriate colors depending on if they are
// alternative or primary.
for (FeatureCollection featureCollection : featureCollections) {
- if (!(featureCollection.getFeatures().get(0).getGeometry() instanceof Point)) {
- int index = featureCollection.getFeatures().get(0).getNumberProperty(INDEX_KEY).intValue();
+ if (!(featureCollection.features().get(0).geometry() instanceof Point)) {
+ int index = featureCollection.features().get(0).getNumberProperty(INDEX_KEY).intValue();
updatePrimaryShieldRoute(String.format(Locale.US, ID_FORMAT, GENERIC_ROUTE_SHIELD_LAYER_ID,
index), index);
updatePrimaryRoute(String.format(Locale.US, ID_FORMAT, GENERIC_ROUTE_LAYER_ID,
@@ -764,12 +761,13 @@ private void buildTrafficFeaturesFromRoute(DirectionsRoute route, int index,
if (leg.annotation() != null && leg.annotation().congestion() != null) {
for (int i = 0; i < leg.annotation().congestion().size(); i++) {
// See https://github.com/mapbox/mapbox-navigation-android/issues/353
- if (leg.annotation().congestion().size() + 1 <= lineString.getCoordinates().size()) {
- double[] startCoord = lineString.getCoordinates().get(i).getCoordinates();
- double[] endCoord = lineString.getCoordinates().get(i + 1).getCoordinates();
+ if (leg.annotation().congestion().size() + 1 <= lineString.coordinates().size()) {
- LineString congestionLineString = LineString.fromCoordinates(new double[][] {startCoord,
- endCoord});
+ List points = new ArrayList<>();
+ points.add(lineString.coordinates().get(i));
+ points.add(lineString.coordinates().get(i + 1));
+
+ LineString congestionLineString = LineString.fromLngLats(points);
Feature feature = Feature.fromGeometry(congestionLineString);
feature.addStringProperty(CONGESTION_KEY, leg.annotation().congestion().get(i));
feature.addStringProperty(SOURCE_KEY, String.format(Locale.US, ID_FORMAT,
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/utils/MapUtils.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/utils/MapUtils.java
index b3689acca64..78a812de222 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/utils/MapUtils.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/utils/MapUtils.java
@@ -3,12 +3,12 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import com.mapbox.geojson.Feature;
+import com.mapbox.geojson.FeatureCollection;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.style.layers.Layer;
import com.mapbox.mapboxsdk.style.sources.GeoJsonOptions;
import com.mapbox.mapboxsdk.style.sources.GeoJsonSource;
-import com.mapbox.services.commons.geojson.Feature;
-import com.mapbox.services.commons.geojson.FeatureCollection;
/**
* Utils class useful for performing map operations such as adding sources, layers, and more.
From 8b1d172e4020c9f0af72798493f8588279fd273c Mon Sep 17 00:00:00 2001
From: danesfeder
Date: Mon, 12 Feb 2018 17:36:17 -0500
Subject: [PATCH 2/4] Add java 8 to test app
---
app/build.gradle | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/build.gradle b/app/build.gradle
index 62f0656d2f8..7c1ad49b257 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,6 +4,11 @@ android {
compileSdkVersion androidVersions.compileSdkVersion
buildToolsVersion androidVersions.buildToolsVersion
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
defaultConfig {
applicationId "com.mapbox.services.android.navigation.testapp"
minSdkVersion androidVersions.minSdkVersion
From ff18a94cd3522d618191adf33ef2b69cb27e10a3 Mon Sep 17 00:00:00 2001
From: danesfeder
Date: Mon, 12 Feb 2018 16:59:32 -0500
Subject: [PATCH 3/4] Update Maps SDK with MAS 3.0
---
.../ui/v5/route/NavigationMapRoute.java | 29 +++++++------------
1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
index 21daefcb016..c8f0a1c352d 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
@@ -79,8 +79,7 @@ public class NavigationMapRoute implements ProgressChangeListener, MapView.OnMap
private static final String WAYPOINT_SOURCE_ID = "mapbox-navigation-waypoint-source";
private static final String WAYPOINT_LAYER_ID = "mapbox-navigation-waypoint-layer";
private static final String ID_FORMAT = "%s-%d";
- private static final String GENERIC_ROUTE_SHIELD_LAYER_ID
- = "mapbox-navigation-route-shield-layer";
+ private static final String GENERIC_ROUTE_SHIELD_LAYER_ID = "mapbox-navigation-route-shield-layer";
@StyleRes
private int styleRes;
@@ -485,8 +484,7 @@ private void addRouteShieldLayer(String layerId, String sourceId, int index) {
*/
private void getAttributes() {
Context context = mapView.getContext();
- TypedArray typedArray
- = context.obtainStyledAttributes(styleRes, R.styleable.NavigationMapRoute);
+ TypedArray typedArray = context.obtainStyledAttributes(styleRes, R.styleable.NavigationMapRoute);
// Primary Route attributes
routeDefaultColor = typedArray.getColor(R.styleable.NavigationMapRoute_routeColor,
@@ -633,8 +631,7 @@ private boolean invalidMapClick() {
private boolean findClickedRoute(@NonNull LatLng point) {
HashMap routeDistancesAwayFromClick = new HashMap<>();
- com.mapbox.geojson.Point clickPoint
- = com.mapbox.geojson.Point.fromLngLat(point.getLongitude(), point.getLatitude());
+ Point clickPoint = Point.fromLngLat(point.getLongitude(), point.getLatitude());
if (calculateClickDistancesFromRoutes(routeDistancesAwayFromClick, clickPoint)) {
return true;
@@ -648,9 +645,9 @@ private boolean findClickedRoute(@NonNull LatLng point) {
}
private boolean calculateClickDistancesFromRoutes(HashMap routeDistancesAwayFromClick,
- com.mapbox.geojson.Point clickPoint) {
+ Point clickPoint) {
for (LineString lineString : routeLineStrings.keySet()) {
- com.mapbox.geojson.Point pointOnLine = findPointOnLine(clickPoint, lineString);
+ Point pointOnLine = findPointOnLine(clickPoint, lineString);
if (pointOnLine == null) {
return true;
@@ -661,15 +658,10 @@ private boolean calculateClickDistancesFromRoutes(HashMap linePoints = new ArrayList<>();
- List positions = lineString.coordinates();
- for (Point pos : positions) {
- linePoints.add(com.mapbox.geojson.Point.fromLngLat(pos.longitude(), pos.latitude()));
- }
-
- com.mapbox.geojson.Feature feature = TurfMisc.nearestPointOnLine(clickPoint, linePoints);
- return (com.mapbox.geojson.Point) feature.geometry();
+ private Point findPointOnLine(Point clickPoint, LineString lineString) {
+ List linePoints = lineString.coordinates();
+ Feature feature = TurfMisc.nearestPointOnLine(clickPoint, linePoints);
+ return (Point) feature.geometry();
}
private void checkNewRouteFound(int currentRouteIndex) {
@@ -749,8 +741,7 @@ private FeatureCollection addTrafficToSource(DirectionsRoute route, int index) {
private void buildRouteFeatureFromGeometry(int index, List features, LineString originalGeometry) {
Feature feat = Feature.fromGeometry(originalGeometry);
- feat.addStringProperty(SOURCE_KEY, String.format(Locale.US, ID_FORMAT, GENERIC_ROUTE_SOURCE_ID,
- index));
+ feat.addStringProperty(SOURCE_KEY, String.format(Locale.US, ID_FORMAT, GENERIC_ROUTE_SOURCE_ID, index));
feat.addNumberProperty(INDEX_KEY, index);
features.add(feat);
}
From 251ea82ea4d3e3da1f49374adb41406656105f00 Mon Sep 17 00:00:00 2001
From: Guardiola31337
Date: Mon, 12 Mar 2018 12:17:27 +0100
Subject: [PATCH 4/4] bump dependencies to the latest versions and adapt code
to them
---
app/build.gradle | 3 +
.../navigation/testapp/MainActivity.java | 11 +-
.../activity/MockNavigationActivity.java | 17 +-
.../testapp/activity/RerouteActivity.java | 8 +-
.../navigationui/NavigationViewActivity.java | 16 +-
build.gradle | 3 +-
gradle/dependencies.gradle | 16 +-
libandroid-navigation-ui/build.gradle | 11 +-
.../navigation/ui/v5/NavigationLauncher.java | 2 +-
.../navigation/ui/v5/NavigationView.java | 6 +-
.../navigation/ui/v5/NavigationViewModel.java | 2 +-
.../ui/v5/NavigationViewSubscriber.java | 2 +-
.../ui/v5/location/LocationViewModel.java | 10 +-
.../ui/v5/route/NavigationMapRoute.java | 124 +++--
libandroid-navigation/build.gradle | 4 +-
.../v5/location/MockLocationEngine.java | 8 +-
.../v5/navigation/MapboxNavigation.java | 10 +-
.../v5/navigation/NavigationHelper.java | 2 +-
.../navigation/NavigationMetricsWrapper.java | 448 ++++++++++++------
.../v5/navigation/NavigationService.java | 7 +-
.../v5/navigation/NavigationTelemetry.java | 45 +-
.../v5/navigation/metrics/FeedbackEvent.java | 8 +-
.../v5/navigation/metrics/RerouteEvent.java | 4 +-
.../v5/offroute/OffRouteDetector.java | 3 +-
.../navigation/v5/snap/SnapToRoute.java | 2 +-
.../navigation/v5/utils/DistanceUtils.java | 15 +-
.../navigation/v5/utils/MathUtils.java | 80 ++++
.../navigation/FasterRouteDetectorTest.java | 2 +-
.../v5/navigation/MapboxNavigationTest.java | 2 +-
.../NavigationEventDispatcherTest.java | 2 +-
.../v5/navigation/NavigationHelperTest.java | 2 +-
.../NavigationRouteProcessorTest.java | 2 +-
32 files changed, 537 insertions(+), 340 deletions(-)
create mode 100644 libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/MathUtils.java
diff --git a/app/build.gradle b/app/build.gradle
index 7c1ad49b257..1590a4d50cc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -54,6 +54,9 @@ dependencies {
implementation dependenciesList.supportRecyclerView
implementation dependenciesList.supportConstraintLayout
implementation dependenciesList.supportCardView
+ implementation dependenciesList.lifecycleExtensions
+
+ implementation dependenciesList.gmsLocation
// Logging
implementation dependenciesList.timber
diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java
index 66b19927d94..d6b99a9d5d8 100644
--- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java
+++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/MainActivity.java
@@ -1,6 +1,5 @@
package com.mapbox.services.android.navigation.testapp;
-import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -13,6 +12,8 @@
import android.widget.TextView;
import android.widget.Toast;
+import com.mapbox.android.core.permissions.PermissionsListener;
+import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.services.android.navigation.testapp.activity.MockNavigationActivity;
import com.mapbox.services.android.navigation.testapp.activity.RerouteActivity;
import com.mapbox.services.android.navigation.testapp.activity.navigationui.EmbeddedNavigationActivity;
@@ -20,18 +21,12 @@
import com.mapbox.services.android.navigation.testapp.activity.navigationui.NavigationViewActivity;
import com.mapbox.services.android.navigation.testapp.activity.navigationui.WaypointNavigationActivity;
import com.mapbox.services.android.navigation.testapp.activity.navigationui.fragment.FragmentNavigationActivity;
-import com.mapbox.services.android.telemetry.permissions.PermissionsListener;
-import com.mapbox.services.android.telemetry.permissions.PermissionsManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity implements PermissionsListener {
-
- private static final String[] PERMISSIONS = {Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_NETWORK_STATE};
-
private RecyclerView recyclerView;
private PermissionsManager permissionsManager;
@@ -94,7 +89,7 @@ protected void onCreate(Bundle savedInstanceState) {
permissionsManager = new PermissionsManager(this);
if (!PermissionsManager.areLocationPermissionsGranted(this)) {
recyclerView.setEnabled(false);
- permissionsManager.requestPermissions(this, PERMISSIONS);
+ permissionsManager.requestLocationPermissions(this);
}
}
diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java
index 731e5c9bd5b..9c7f8027e5c 100644
--- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java
+++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/MockNavigationActivity.java
@@ -11,19 +11,19 @@
import android.widget.Button;
import android.widget.Toast;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.annotations.MarkerOptions;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
-import com.mapbox.mapboxsdk.constants.MyLocationTracking;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
-import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode;
import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
+import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode;
import com.mapbox.services.android.navigation.testapp.R;
import com.mapbox.services.android.navigation.testapp.Utils;
import com.mapbox.services.android.navigation.testapp.activity.notification.CustomNavigationNotification;
@@ -42,7 +42,6 @@
import com.mapbox.services.android.navigation.v5.offroute.OffRouteListener;
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
import com.mapbox.turf.TurfConstants;
import com.mapbox.turf.TurfMeasurement;
@@ -126,7 +125,7 @@ public void onStartRouteClick() {
((MockLocationEngine) locationEngine).setRoute(route);
navigation.setLocationEngine(locationEngine);
navigation.startNavigation(route);
- mapboxMap.addOnMapClickListener(null);
+ mapboxMap.removeOnMapClickListener(this);
}
}
@@ -142,8 +141,6 @@ private void newOrigin() {
Point.fromLngLat(latLng.getLongitude(), latLng.getLatitude())
);
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12));
- mapboxMap.setMyLocationEnabled(true);
- mapboxMap.getTrackingSettings().setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
}
}
@@ -152,15 +149,13 @@ public void onMapReady(MapboxMap mapboxMap) {
this.mapboxMap = mapboxMap;
locationLayerPlugin = new LocationLayerPlugin(mapView, mapboxMap, null);
- locationLayerPlugin.setLocationLayerEnabled(LocationLayerMode.NAVIGATION);
-
+ locationLayerPlugin.setRenderMode(RenderMode.GPS);
navigationMapRoute = new NavigationMapRoute(navigation, mapView, mapboxMap);
mapboxMap.addOnMapClickListener(this);
Snackbar.make(mapView, "Tap map to place waypoint", BaseTransientBottomBar.LENGTH_LONG).show();
locationEngine = new MockLocationEngine(1000, 50, true);
- mapboxMap.setLocationSource(locationEngine);
newOrigin();
}
@@ -181,7 +176,7 @@ public void onMapClick(@NonNull LatLng point) {
}
private void calculateRoute() {
- Location userLocation = mapboxMap.getMyLocation();
+ Location userLocation = locationEngine.getLastLocation();
if (userLocation == null) {
Timber.d("calculateRoute: User location is null, therefore, origin can't be set.");
return;
@@ -216,7 +211,7 @@ public void onResponse(Call call, Response call, Throwable throwable) {
- Timber.e("onFailure: navigation.getRoute()", throwable);
+ Timber.e(throwable, "onFailure: navigation.getRoute()");
}
});
}
diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java
index 9168586d7c0..f3ad4e4f3d5 100644
--- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java
+++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/RerouteActivity.java
@@ -9,8 +9,10 @@
import android.support.v7.app.AppCompatActivity;
import android.view.View;
+import com.mapbox.android.core.location.LocationEngineListener;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
+import com.mapbox.core.constants.Constants;
import com.mapbox.geojson.LineString;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
@@ -23,9 +25,8 @@
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
-import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode;
import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
-import com.mapbox.services.Constants;
+import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode;
import com.mapbox.services.android.navigation.testapp.R;
import com.mapbox.services.android.navigation.v5.location.MockLocationEngine;
import com.mapbox.services.android.navigation.v5.milestone.Milestone;
@@ -37,7 +38,6 @@
import com.mapbox.services.android.navigation.v5.offroute.OffRouteListener;
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
-import com.mapbox.services.android.telemetry.location.LocationEngineListener;
import java.util.ArrayList;
import java.util.List;
@@ -150,7 +150,7 @@ public void onMapReady(MapboxMap mapboxMap) {
mapboxMap.setOnMapClickListener(this);
locationLayerPlugin = new LocationLayerPlugin(mapView, mapboxMap, null);
- locationLayerPlugin.setLocationLayerEnabled(LocationLayerMode.NAVIGATION);
+ locationLayerPlugin.setRenderMode(RenderMode.GPS);
// Setup the mockLocationEngine
mockLocationEngine = new MockLocationEngine(1000, 30, false);
diff --git a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationViewActivity.java b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationViewActivity.java
index 5302f6d0a52..2bcb5cb26dc 100644
--- a/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationViewActivity.java
+++ b/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationViewActivity.java
@@ -18,8 +18,12 @@
import android.widget.Toast;
import com.mapbox.api.directions.v5.DirectionsCriteria;
+import com.mapbox.android.core.location.LocationEngine;
+import com.mapbox.android.core.location.LocationEngineListener;
+import com.mapbox.android.core.location.LocationEngineProvider;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
+import com.mapbox.core.constants.Constants;
import com.mapbox.geojson.LineString;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
@@ -33,9 +37,8 @@
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
-import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode;
import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
-import com.mapbox.services.Constants;
+import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode;
import com.mapbox.services.android.navigation.testapp.R;
import com.mapbox.services.android.navigation.ui.v5.NavigationLauncher;
import com.mapbox.services.android.navigation.ui.v5.NavigationLauncherOptions;
@@ -44,9 +47,6 @@
import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
import com.mapbox.services.android.navigation.v5.navigation.NavigationUnitType;
import com.mapbox.services.android.navigation.v5.utils.LocaleUtils;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
-import com.mapbox.services.android.telemetry.location.LocationEngineListener;
-import com.mapbox.services.android.telemetry.location.LostLocationEngine;
import java.util.ArrayList;
import java.util.List;
@@ -60,7 +60,7 @@
import retrofit2.Response;
import timber.log.Timber;
-import static com.mapbox.services.android.telemetry.location.LocationEnginePriority.HIGH_ACCURACY;
+import static com.mapbox.android.core.location.LocationEnginePriority.HIGH_ACCURACY;
public class NavigationViewActivity extends AppCompatActivity implements OnMapReadyCallback,
MapboxMap.OnMapLongClickListener, LocationEngineListener, Callback,
@@ -248,7 +248,7 @@ public void onNewPrimaryRouteSelected(DirectionsRoute directionsRoute) {
@SuppressWarnings( {"MissingPermission"})
private void initLocationEngine() {
- locationEngine = new LostLocationEngine(this);
+ locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
locationEngine.setPriority(HIGH_ACCURACY);
locationEngine.setInterval(0);
locationEngine.setFastestInterval(1000);
@@ -265,7 +265,7 @@ private void initLocationEngine() {
@SuppressWarnings( {"MissingPermission"})
private void initLocationLayer() {
locationLayer = new LocationLayerPlugin(mapView, mapboxMap, locationEngine);
- locationLayer.setLocationLayerEnabled(LocationLayerMode.COMPASS);
+ locationLayer.setRenderMode(RenderMode.COMPASS);
}
private void initMapRoute() {
diff --git a/build.gradle b/build.gradle
index 5c9f47073a5..766d116989b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,7 +25,6 @@ task testReport(type: TestReport, group: 'Build') {
allprojects {
repositories {
maven { url 'https://plugins.gradle.org/m2' }
- maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
google()
jcenter()
}
@@ -48,4 +47,4 @@ task clean(type: Delete) {
delete rootProject.buildDir
}
-apply from: "${rootDir}/gradle/sonarqube.gradle"
\ No newline at end of file
+apply from: "${rootDir}/gradle/sonarqube.gradle"
diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 53e909e1117..c46fd6347a5 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -8,10 +8,10 @@ ext {
]
version = [
- mapboxMapSdk : '6.0.0-beta.6',
- mapboxServices : '2.2.10',
+ mapboxMapSdk : '6.0.1',
mapboxSdkServices : '3.0.1',
- locationLayerPlugin: '0.5.0-beta.2',
+ mapboxEvents : '3.0.3',
+ locationLayerPlugin: '0.5.0',
autoValue : '1.5',
autoValueParcel : '0.2.5',
junit : '4.12',
@@ -29,8 +29,9 @@ ext {
spoonRunner : '1.6.2',
commonsIO : '2.5',
robolectric : '3.5.1',
- lifecycle : '1.0.0',
- picasso : '2.5.2'
+ lifecycle : '1.1.1',
+ picasso : '2.5.2',
+ gmsLocation : '11.0.4'
]
pluginVersion = [
@@ -48,10 +49,9 @@ ext {
dependenciesList = [
// mapbox
mapboxMapSdk : "com.mapbox.mapboxsdk:mapbox-android-sdk:${version.mapboxMapSdk}",
- mapboxServices : "com.mapbox.mapboxsdk:mapbox-android-services:${version.mapboxServices}",
- mapboxJavaServices : "com.mapbox.mapboxsdk:mapbox-java-services:${version.mapboxServices}",
mapboxSdkServices : "com.mapbox.mapboxsdk:mapbox-sdk-services:${version.mapboxSdkServices}",
mapboxSdkTurf : "com.mapbox.mapboxsdk:mapbox-sdk-turf:${version.mapboxSdkServices}",
+ mapboxEvents : "com.mapbox.mapboxsdk:mapbox-android-telemetry:${version.mapboxEvents}",
locationLayerPlugin : "com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:${version.locationLayerPlugin}",
// AutoValue
@@ -99,6 +99,8 @@ ext {
// aws polly
polly : "com.amazonaws:aws-android-sdk-polly:${version.awsPolly}",
+ // play services
+ gmsLocation : "com.google.android.gms:play-services-location:${version.gmsLocation}",
errorprone : "com.google.errorprone:error_prone_core:${version.errorprone}"
diff --git a/libandroid-navigation-ui/build.gradle b/libandroid-navigation-ui/build.gradle
index c8afda54816..36293713f8c 100644
--- a/libandroid-navigation-ui/build.gradle
+++ b/libandroid-navigation-ui/build.gradle
@@ -36,11 +36,7 @@ dependencies {
api project(':libandroid-navigation')
// Mapbox Map SDK
- implementation(dependenciesList.mapboxMapSdk) {
- exclude module: 'lost'
- exclude module: 'mapbox-java-geojson'
- exclude module: 'mapbox-android-telemetry'
- }
+ implementation dependenciesList.mapboxMapSdk
// Support libraries
implementation dependenciesList.supportDesign
@@ -53,10 +49,7 @@ dependencies {
annotationProcessor dependenciesList.lifecycleCompiler
// Mapbox plugins
- implementation(dependenciesList.locationLayerPlugin) {
- exclude module: 'mapbox-android-services'
- exclude module: 'mapbox-android-sdk'
- }
+ implementation dependenciesList.locationLayerPlugin
// AutoValues
annotationProcessor dependenciesList.autoValue
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java
index bb462450738..42c34f180eb 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationLauncher.java
@@ -29,7 +29,7 @@
* You have an option to include a AWS Cognito Pool ID, which will initialize the UI with AWS Polly Voice instructions
*
* For testing, you can launch with simulation, in which our
- * {@link com.mapbox.services.android.location.MockLocationEngine} will begin
+ * {@link com.mapbox.services.android.navigation.v5.location.MockLocationEngine} will begin
* following the given {@link DirectionsRoute} once the UI is initialized
*
*/
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java
index 6de1c0f0125..f99ddf9ba09 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java
@@ -30,8 +30,8 @@
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
-import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode;
import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
+import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode;
import com.mapbox.services.android.navigation.ui.v5.camera.NavigationCamera;
import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionLoader;
import com.mapbox.services.android.navigation.ui.v5.instruction.InstructionView;
@@ -200,12 +200,12 @@ public void onDestroy() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
map = mapboxMap;
- initMapPadding();
ThemeSwitcher.setMapStyle(getContext(), map, new MapboxMap.OnStyleLoadedListener() {
@Override
public void onStyleLoaded(String style) {
initRoute();
initLocationLayer();
+ initMapPadding();
initLifecycleObservers();
initNavigationPresenter();
initClickListeners();
@@ -514,7 +514,7 @@ private void initLocationLayer() {
int locationLayerStyleRes = ThemeSwitcher.retrieveNavigationViewStyle(getContext(),
R.attr.navigationViewLocationLayerStyle);
locationLayer = new LocationLayerPlugin(mapView, map, null, locationLayerStyleRes);
- locationLayer.setLocationLayerEnabled(LocationLayerMode.NAVIGATION);
+ locationLayer.setRenderMode(RenderMode.GPS);
}
/**
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java
index 77ee021e6b2..9fcc7f1aab5 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewModel.java
@@ -9,6 +9,7 @@
import android.net.NetworkInfo;
import android.text.TextUtils;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
@@ -34,7 +35,6 @@
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.utils.LocaleUtils;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
import java.util.Locale;
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewSubscriber.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewSubscriber.java
index 7a966e21c2c..2668de9d8bc 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewSubscriber.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewSubscriber.java
@@ -5,13 +5,13 @@
import android.location.Location;
import android.support.annotation.Nullable;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.geojson.Point;
import com.mapbox.services.android.navigation.ui.v5.feedback.FeedbackItem;
import com.mapbox.services.android.navigation.ui.v5.location.LocationViewModel;
import com.mapbox.services.android.navigation.ui.v5.route.OffRouteEvent;
import com.mapbox.services.android.navigation.ui.v5.route.RouteViewModel;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
class NavigationViewSubscriber {
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationViewModel.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationViewModel.java
index 2fab11c1d3c..e2216891bb4 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationViewModel.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/location/LocationViewModel.java
@@ -8,13 +8,13 @@
import android.arch.lifecycle.OnLifecycleEvent;
import android.location.Location;
+import com.mapbox.android.core.location.LocationEngine;
+import com.mapbox.android.core.location.LocationEngineListener;
+import com.mapbox.android.core.location.LocationEnginePriority;
+import com.mapbox.android.core.location.LocationEngineProvider;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.services.android.navigation.v5.location.MockLocationEngine;
import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
-import com.mapbox.services.android.telemetry.location.LocationEngineListener;
-import com.mapbox.services.android.telemetry.location.LocationEnginePriority;
-import com.mapbox.services.android.telemetry.location.LocationEngineProvider;
public class LocationViewModel extends AndroidViewModel implements LifecycleObserver, LocationEngineListener {
@@ -95,7 +95,7 @@ public void updateRoute(DirectionsRoute route) {
* Initializes the {@link LocationEngine} based on whether or not
* simulation is enabled.
*/
- @SuppressWarnings({"MissingPermission"})
+ @SuppressWarnings( {"MissingPermission"})
private void initLocation(Application application) {
if (!shouldSimulateRoute) {
LocationEngineProvider locationEngineProvider = new LocationEngineProvider(application.getApplicationContext());
diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
index c8f0a1c352d..35ef2390e20 100644
--- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
+++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/route/NavigationMapRoute.java
@@ -23,9 +23,7 @@
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
-import com.mapbox.mapboxsdk.style.functions.Function;
-import com.mapbox.mapboxsdk.style.functions.stops.Stop;
-import com.mapbox.mapboxsdk.style.functions.stops.Stops;
+import com.mapbox.mapboxsdk.style.expressions.Expression;
import com.mapbox.mapboxsdk.style.layers.Layer;
import com.mapbox.mapboxsdk.style.layers.LineLayer;
import com.mapbox.mapboxsdk.style.layers.Property;
@@ -47,9 +45,14 @@
import java.util.List;
import java.util.Locale;
-import static com.mapbox.mapboxsdk.style.functions.stops.Stop.stop;
-import static com.mapbox.mapboxsdk.style.functions.stops.Stops.categorical;
-import static com.mapbox.mapboxsdk.style.functions.stops.Stops.exponential;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.color;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.exponential;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.get;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.interpolate;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.literal;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.match;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.stop;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.zoom;
/**
* Provide a route using {@link NavigationMapRoute#addRoutes(List)} and a route will be drawn using
@@ -348,8 +351,8 @@ private void generateFeatureCollectionList(List directionsRoute
private static FeatureCollection waypointFeatureCollection(DirectionsRoute route) {
final List waypointFeatures = new ArrayList<>();
for (RouteLeg leg : route.legs()) {
- waypointFeatures.add(getPointFromLineString(route, 0));
- waypointFeatures.add(getPointFromLineString(route, leg.steps().size() - 1));
+ waypointFeatures.add(getPointFromLineString(leg, 0));
+ waypointFeatures.add(getPointFromLineString(leg, leg.steps().size() - 1));
}
return FeatureCollection.fromFeatures(waypointFeatures);
}
@@ -371,16 +374,14 @@ private void updatePrimaryRoute(String layerId, int index) {
Layer layer = mapboxMap.getLayer(layerId);
if (layer != null) {
layer.setProperties(
- PropertyFactory.lineColor(
- Function.property(CONGESTION_KEY, categorical(
- stop("moderate", PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeModerateColor : alternativeRouteModerateColor)),
- stop("heavy", PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor)),
- stop("severe", PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor))
- )).withDefaultValue(PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeDefaultColor : alternativeRouteDefaultColor)))
+ PropertyFactory.lineColor(match(
+ Expression.toString(get(CONGESTION_KEY)),
+ color(index == primaryRouteIndex ? routeDefaultColor : alternativeRouteDefaultColor),
+ stop("moderate", color(index == primaryRouteIndex ? routeModerateColor : alternativeRouteModerateColor)),
+ stop("heavy", color(index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor)),
+ stop("severe", color(index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor))
+ )
+ )
);
if (index == primaryRouteIndex) {
mapboxMap.removeLayer(layer);
@@ -393,8 +394,7 @@ private void updatePrimaryShieldRoute(String layerId, int index) {
Layer layer = mapboxMap.getLayer(layerId);
if (layer != null) {
layer.setProperties(
- PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeShieldColor : alternativeRouteShieldColor)
+ PropertyFactory.lineColor(index == primaryRouteIndex ? routeShieldColor : alternativeRouteShieldColor)
);
if (index == primaryRouteIndex) {
mapboxMap.removeLayer(layer);
@@ -411,26 +411,24 @@ private void addRouteLayer(String layerId, String sourceId, int index) {
Layer routeLayer = new LineLayer(layerId, sourceId).withProperties(
PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
- PropertyFactory.lineWidth(Function.zoom(
- exponential(
- stop(4f, PropertyFactory.lineWidth(3f * scale)),
- stop(10f, PropertyFactory.lineWidth(4f * scale)),
- stop(13f, PropertyFactory.lineWidth(6f * scale)),
- stop(16f, PropertyFactory.lineWidth(10f * scale)),
- stop(19f, PropertyFactory.lineWidth(14f * scale)),
- stop(22f, PropertyFactory.lineWidth(18f * scale))
- ).withBase(1.5f))
+ PropertyFactory.lineWidth(interpolate(
+ exponential(1.5f), zoom(),
+ stop(4f, 3f * scale),
+ stop(10f, 4f * scale),
+ stop(13f, 6f * scale),
+ stop(16f, 10f * scale),
+ stop(19f, 14f * scale),
+ stop(22f, 18f * scale)
+ )
),
- PropertyFactory.lineColor(
- Function.property(CONGESTION_KEY, categorical(
- stop("moderate", PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeModerateColor : alternativeRouteModerateColor)),
- stop("heavy", PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor)),
- stop("severe", PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor))
- )).withDefaultValue(PropertyFactory.lineColor(
- index == primaryRouteIndex ? routeDefaultColor : alternativeRouteDefaultColor)))
+ PropertyFactory.lineColor(match(
+ Expression.toString(get(CONGESTION_KEY)),
+ color(index == primaryRouteIndex ? routeDefaultColor : alternativeRouteDefaultColor),
+ stop("moderate", color(index == primaryRouteIndex ? routeModerateColor : alternativeRouteModerateColor)),
+ stop("heavy", color(index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor)),
+ stop("severe", color(index == primaryRouteIndex ? routeSevereColor : alternativeRouteSevereColor))
+ )
+ )
);
MapUtils.addLayerToMap(mapboxMap, routeLayer, belowLayer);
}
@@ -463,14 +461,14 @@ private void addRouteShieldLayer(String layerId, String sourceId, int index) {
Layer routeLayer = new LineLayer(layerId, sourceId).withProperties(
PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
- PropertyFactory.lineWidth(Function.zoom(
- exponential(
- stop(10f, PropertyFactory.lineWidth(7f)),
- stop(14f, PropertyFactory.lineWidth(10.5f * scale)),
- stop(16.5f, PropertyFactory.lineWidth(15.5f * scale)),
- stop(19f, PropertyFactory.lineWidth(24f * scale)),
- stop(22f, PropertyFactory.lineWidth(29f * scale))
- ).withBase(1.5f))
+ PropertyFactory.lineWidth(interpolate(
+ exponential(1.5f), zoom(),
+ stop(10f, 7f),
+ stop(14f, 10.5f * scale),
+ stop(16.5f, 15.5f * scale),
+ stop(19f, 24f * scale),
+ stop(22f, 29f * scale)
+ )
),
PropertyFactory.lineColor(
index == primaryRouteIndex ? routeShieldColor : alternativeRouteShieldColor)
@@ -554,20 +552,19 @@ private void drawWaypointMarkers(@NonNull MapboxMap mapboxMap, @Nullable Drawabl
mapboxMap.addImage("destinationMarker", bitmap);
waypointLayer = new SymbolLayer(WAYPOINT_LAYER_ID, WAYPOINT_SOURCE_ID).withProperties(
- PropertyFactory.iconImage(Function.property(
- "waypoint",
- categorical(
- stop("origin", PropertyFactory.iconImage("originMarker")),
- stop("destination", PropertyFactory.iconImage("destinationMarker"))
+ PropertyFactory.iconImage(match(
+ Expression.toString(get("waypoint")), literal("originMarker"),
+ stop("origin", literal("originMarker")),
+ stop("destination", literal("destinationMarker"))
)
+ ),
+ PropertyFactory.iconSize(interpolate(
+ exponential(1.5f), zoom(),
+ stop(22f, 2.8f),
+ stop(12f, 1.3f),
+ stop(10f, 0.8f),
+ stop(0f, 0.6f)
)),
- PropertyFactory.iconSize(Function.zoom(
- Stops.exponential(
- Stop.stop(22f, PropertyFactory.iconSize(2.8f)),
- Stop.stop(12f, PropertyFactory.iconSize(1.3f)),
- Stop.stop(10f, PropertyFactory.iconSize(0.8f)),
- Stop.stop(0f, PropertyFactory.iconSize(0.6f))
- ).withBase(1.5f))),
PropertyFactory.iconPitchAlignment(Property.ANCHOR_MAP),
PropertyFactory.iconAllowOverlap(true),
PropertyFactory.iconIgnorePlacement(true)
@@ -577,10 +574,11 @@ private void drawWaypointMarkers(@NonNull MapboxMap mapboxMap, @Nullable Drawabl
}
}
- private static Feature getPointFromLineString(DirectionsRoute route, int index) {
- List coordinates = route.routeOptions().coordinates();
- Point waypoint = coordinates.get(index);
- Feature feature = Feature.fromGeometry(waypoint);
+ private static Feature getPointFromLineString(RouteLeg leg, int index) {
+ Feature feature = Feature.fromGeometry(Point.fromLngLat(
+ leg.steps().get(index).maneuver().location().longitude(),
+ leg.steps().get(index).maneuver().location().latitude()
+ ));
feature.addStringProperty(SOURCE_KEY, WAYPOINT_SOURCE_ID);
feature.addStringProperty("waypoint",
index == 0 ? "origin" : "destination"
diff --git a/libandroid-navigation/build.gradle b/libandroid-navigation/build.gradle
index ba64a5c6907..9e79aed2f11 100644
--- a/libandroid-navigation/build.gradle
+++ b/libandroid-navigation/build.gradle
@@ -39,9 +39,7 @@ android {
}
dependencies {
- // Mapbox Android Services
- api dependenciesList.mapboxServices
-
+ api dependenciesList.mapboxEvents
api dependenciesList.mapboxSdkServices
api dependenciesList.mapboxSdkTurf
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/location/MockLocationEngine.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/location/MockLocationEngine.java
index 74a29c6a646..3317bcaa2d9 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/location/MockLocationEngine.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/location/MockLocationEngine.java
@@ -4,17 +4,15 @@
import android.os.Handler;
import android.support.annotation.Nullable;
+import com.mapbox.android.core.location.LocationEngine;
+import com.mapbox.android.core.location.LocationEngineListener;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
+import com.mapbox.core.constants.Constants;
import com.mapbox.geojson.LineString;
import com.mapbox.geojson.Point;
-
-import com.mapbox.services.android.telemetry.location.LocationEngine;
-import com.mapbox.services.android.telemetry.location.LocationEngineListener;
-import com.mapbox.core.constants.Constants;
import com.mapbox.turf.TurfConstants;
import com.mapbox.turf.TurfMeasurement;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
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 401259d014e..8f2d1c4009b 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
@@ -9,6 +9,9 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import com.mapbox.android.core.location.LocationEngine;
+import com.mapbox.android.core.location.LocationEnginePriority;
+import com.mapbox.android.core.location.LocationEngineProvider;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.services.android.navigation.v5.milestone.BannerInstructionMilestone;
import com.mapbox.services.android.navigation.v5.milestone.Milestone;
@@ -27,9 +30,6 @@
import com.mapbox.services.android.navigation.v5.snap.Snap;
import com.mapbox.services.android.navigation.v5.snap.SnapToRoute;
import com.mapbox.services.android.navigation.v5.utils.ValidationUtils;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
-import com.mapbox.services.android.telemetry.location.LocationEnginePriority;
-import com.mapbox.services.android.telemetry.location.LostLocationEngine;
import java.util.ArrayList;
import java.util.List;
@@ -188,7 +188,7 @@ private void initializeDefaultLocationEngine() {
private LocationEngine obtainLocationEngine() {
if (locationEngine == null) {
- return new LostLocationEngine(context);
+ return new LocationEngineProvider(context).obtainBestLocationEngineAvailable();
}
return locationEngine;
@@ -347,6 +347,7 @@ public LocationEngine getLocationEngine() {
* Navigation uses a camera engine to determine the camera position while routing.
* By default, it uses a {@link SimpleCamera}. If you would like to customize how the camera is
* positioned, create a new {@link Camera} and set it here.
+ *
* @param cameraEngine camera engine used to configure camera position while routing
* @since 0.10.0
*/
@@ -357,6 +358,7 @@ public void setCameraEngine(@NonNull Camera cameraEngine) {
/**
* Returns the current camera engine used to configure the camera position while routing. By default,
* a {@link SimpleCamera} is used.
+ *
* @return camera engine used to configure camera position while routing
* @since 0.10.0
*/
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelper.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelper.java
index 7f05dd9c2f4..2e63073d51d 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelper.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelper.java
@@ -25,7 +25,7 @@
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.snap.Snap;
-import com.mapbox.services.android.telemetry.utils.MathUtils;
+import com.mapbox.services.android.navigation.v5.utils.MathUtils;
import com.mapbox.turf.TurfConstants;
import com.mapbox.turf.TurfMeasurement;
import com.mapbox.turf.TurfMisc;
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationMetricsWrapper.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationMetricsWrapper.java
index 9adad2689ab..a51852d6592 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationMetricsWrapper.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationMetricsWrapper.java
@@ -1,19 +1,29 @@
package com.mapbox.services.android.navigation.v5.navigation;
+import android.content.Context;
import android.location.Location;
+import com.mapbox.android.telemetry.AppUserTurnstile;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.FeedbackData;
+import com.mapbox.android.telemetry.FeedbackEventData;
+import com.mapbox.android.telemetry.MapboxTelemetry;
+import com.mapbox.android.telemetry.NavigationCancelData;
+import com.mapbox.android.telemetry.NavigationEventFactory;
+import com.mapbox.android.telemetry.NavigationLocationData;
+import com.mapbox.android.telemetry.NavigationMetadata;
+import com.mapbox.android.telemetry.NavigationNewData;
+import com.mapbox.android.telemetry.NavigationRerouteData;
+import com.mapbox.android.telemetry.NavigationState;
+import com.mapbox.android.telemetry.NavigationStepMetadata;
import com.mapbox.services.android.navigation.BuildConfig;
import com.mapbox.services.android.navigation.v5.navigation.metrics.RerouteEvent;
import com.mapbox.services.android.navigation.v5.navigation.metrics.SessionState;
import com.mapbox.services.android.navigation.v5.routeprogress.MetricsRouteProgress;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.utils.DistanceUtils;
-import com.mapbox.services.android.telemetry.MapboxTelemetry;
-import com.mapbox.services.android.telemetry.navigation.MapboxNavigationEvent;
-import com.mapbox.services.android.telemetry.utils.TelemetryUtils;
import java.util.Date;
-import java.util.Hashtable;
import java.util.List;
final class NavigationMetricsWrapper {
@@ -27,180 +37,323 @@ final class NavigationMetricsWrapper {
private static String upcomingName;
private static String previousType;
private static String previousName;
+ // TODO Where are we going to create MapboxTelemetry instance? Which class is going to hold it?
+ private static MapboxTelemetry mapboxTelemetry;
private NavigationMetricsWrapper() {
// Empty private constructor for preventing initialization of this class.
}
+ static void init(Context context, String accessToken, String userAgent) {
+ mapboxTelemetry = new MapboxTelemetry(context, accessToken, userAgent);
+ mapboxTelemetry.enable();
+ }
+
+ static void enableLogging() {
+ mapboxTelemetry.updateDebugLoggingEnabled(true);
+ }
+
+ static void disable() {
+ if (mapboxTelemetry != null) {
+ mapboxTelemetry.disable();
+ }
+ }
+
+ static void push(Event event) {
+ mapboxTelemetry.push(event);
+ }
+
static void arriveEvent(SessionState sessionState, RouteProgress routeProgress, Location location) {
- Hashtable arriveEvent = MapboxNavigationEvent.buildArriveEvent(
- sdkIdentifier, BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
- sessionState.sessionIdentifier(), location.getLatitude(), location.getLongitude(),
- sessionState.currentGeometry(), routeProgress.directionsRoute().routeOptions().profile(),
- routeProgress.directionsRoute().distance().intValue(),
- routeProgress.directionsRoute().duration().intValue(),
- sessionState.rerouteCount(), checkNullStartTimestamp(sessionState),
+ Date startTimestamp = obtainStartTimestamp(sessionState);
+ // TODO We should generate the Nav event spec version somehow. Should be managed and generated by the Events
+ // library?
+ int hardcodedEventVersion = 7;
+ MetricsRouteProgress metricsRouteProgress = new MetricsRouteProgress(routeProgress);
+ int absoluteDistanceToDestination = DistanceUtils.calculateAbsoluteDistance(location, metricsRouteProgress);
+ NavigationMetadata metadata = new NavigationMetadata(
+ startTimestamp,
(int) (sessionState.eventRouteDistanceCompleted() + routeProgress.distanceTraveled()),
- (int) routeProgress.distanceRemaining(), (int) routeProgress.durationRemaining(),
- sessionState.mockLocation(), sessionState.originalRequestIdentifier(),
- sessionState.requestIdentifier(),
- sessionState.originalGeometry(), sessionState.originalDistance(),
- sessionState.originalDuration(), null, sessionState.currentStepCount(),
- sessionState.originalStepCount()
+ (int) routeProgress.distanceRemaining(),
+ (int) routeProgress.durationRemaining(),
+ sdkIdentifier,
+ BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
+ hardcodedEventVersion,
+ sessionState.sessionIdentifier(),
+ location.getLatitude(),
+ location.getLongitude(),
+ sessionState.currentGeometry(),
+ routeProgress.directionsRoute().routeOptions().profile(),
+ sessionState.mockLocation(),
+ sessionState.locationEngineName(),
+ absoluteDistanceToDestination
);
-
- MetricsRouteProgress metricsRouteProgress = new MetricsRouteProgress(routeProgress);
- int absoluteDistance = DistanceUtils.calculateAbsoluteDistance(location, metricsRouteProgress);
-
- MapboxTelemetry.getInstance().addPercentTimeInForeground(sessionState.percentInForeground(), arriveEvent);
- MapboxTelemetry.getInstance().addPercentTimeInPortrait(sessionState.percentInPortrait(), arriveEvent);
- MapboxTelemetry.getInstance().addAbsoluteDistanceToDestination(absoluteDistance, arriveEvent);
- MapboxTelemetry.getInstance().addLocationEngineName(sessionState.locationEngineName(), arriveEvent);
- MapboxTelemetry.getInstance().pushEvent(arriveEvent);
- MapboxTelemetry.getInstance().flushEventsQueueImmediately(false);
+ metadata.setEstimatedDistance(routeProgress.directionsRoute().distance().intValue());
+ metadata.setEstimatedDuration(routeProgress.directionsRoute().duration().intValue());
+ metadata.setRerouteCount(sessionState.rerouteCount());
+ metadata.setOriginalRequestIdentifier(sessionState.originalRequestIdentifier());
+ metadata.setRequestIdentifier(sessionState.requestIdentifier());
+ metadata.setOriginalGeometry(sessionState.originalGeometry());
+ metadata.setOriginalEstimatedDistance(sessionState.originalDistance());
+ metadata.setOriginalEstimatedDuration(sessionState.originalDuration());
+ metadata.setStepCount(sessionState.currentStepCount());
+ metadata.setOriginalStepCount(sessionState.originalStepCount());
+ metadata.setPercentTimeInForeground(sessionState.percentInForeground());
+ metadata.setPercentTimeInPortrait(sessionState.percentInPortrait());
+ NavigationState state = new NavigationState(metadata);
+ NavigationEventFactory factory = new NavigationEventFactory();
+ Event arriveEvent = factory.createNavigationEvent(Event.Type.NAV_ARRIVE, state);
+ mapboxTelemetry.push(arriveEvent);
}
static void cancelEvent(SessionState sessionState, MetricsRouteProgress metricProgress, Location location) {
- Hashtable cancelEvent = MapboxNavigationEvent.buildCancelEvent(
- sdkIdentifier, BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
- sessionState.sessionIdentifier(),
- location.getLatitude(), location.getLongitude(),
- sessionState.currentGeometry(), metricProgress.getDirectionsRouteProfile(),
- metricProgress.getDirectionsRouteDistance(),
- metricProgress.getDirectionsRouteDuration(),
- sessionState.rerouteCount(), checkNullStartTimestamp(sessionState),
+ Date startTimestamp = obtainStartTimestamp(sessionState);
+ // TODO We should generate the Nav event spec version somehow. Should be managed and generated by the Events
+ // library?
+ int hardcodedEventVersion = 7;
+ int absoluteDistanceToDestination = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
+ NavigationMetadata metadata = new NavigationMetadata(
+ startTimestamp,
(int) (sessionState.eventRouteDistanceCompleted() + metricProgress.getDistanceTraveled()),
- metricProgress.getDistanceRemaining(), metricProgress.getDurationRemaining(),
+ metricProgress.getDistanceRemaining(),
+ metricProgress.getDurationRemaining(),
+ sdkIdentifier,
+ BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
+ hardcodedEventVersion,
+ sessionState.sessionIdentifier(),
+ location.getLatitude(),
+ location.getLongitude(),
+ sessionState.currentGeometry(),
+ metricProgress.getDirectionsRouteProfile(),
sessionState.mockLocation(),
- sessionState.originalRequestIdentifier(),
- sessionState.requestIdentifier(),
- sessionState.originalGeometry(),
- sessionState.originalDistance(), sessionState.originalDuration(), null,
- sessionState.arrivalTimestamp(), sessionState.currentStepCount(), sessionState.originalStepCount()
+ sessionState.locationEngineName(),
+ absoluteDistanceToDestination
);
-
- int absoluteDistance = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
-
- MapboxTelemetry.getInstance().addPercentTimeInForeground(sessionState.percentInForeground(), cancelEvent);
- MapboxTelemetry.getInstance().addPercentTimeInPortrait(sessionState.percentInPortrait(), cancelEvent);
- MapboxTelemetry.getInstance().addAbsoluteDistanceToDestination(absoluteDistance, cancelEvent);
- MapboxTelemetry.getInstance().addLocationEngineName(sessionState.locationEngineName(), cancelEvent);
- MapboxTelemetry.getInstance().pushEvent(cancelEvent);
- MapboxTelemetry.getInstance().flushEventsQueueImmediately(false);
+ metadata.setEstimatedDistance(metricProgress.getDirectionsRouteDistance());
+ metadata.setEstimatedDuration(metricProgress.getDirectionsRouteDuration());
+ metadata.setRerouteCount(sessionState.rerouteCount());
+ metadata.setOriginalRequestIdentifier(sessionState.originalRequestIdentifier());
+ metadata.setRequestIdentifier(sessionState.requestIdentifier());
+ metadata.setOriginalGeometry(sessionState.originalGeometry());
+ metadata.setOriginalEstimatedDistance(sessionState.originalDistance());
+ metadata.setOriginalEstimatedDuration(sessionState.originalDuration());
+ metadata.setStepCount(sessionState.currentStepCount());
+ metadata.setOriginalStepCount(sessionState.originalStepCount());
+ metadata.setPercentTimeInForeground(sessionState.percentInForeground());
+ metadata.setPercentTimeInPortrait(sessionState.percentInPortrait());
+ NavigationState state = new NavigationState(metadata);
+ Date arrivalDate = sessionState.arrivalTimestamp();
+ NavigationCancelData data = new NavigationCancelData();
+ if (arrivalDate != null) {
+ data.setArrivalTimestamp(arrivalDate);
+ }
+ state.setNavigationCancelData(data);
+ NavigationEventFactory factory = new NavigationEventFactory();
+ Event cancelEvent = factory.createNavigationEvent(Event.Type.NAV_CANCEL, state);
+ mapboxTelemetry.push(cancelEvent);
}
static void departEvent(SessionState sessionState, MetricsRouteProgress metricProgress, Location location) {
- Hashtable departEvent = MapboxNavigationEvent.buildDepartEvent(
- sdkIdentifier, BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
- sessionState.sessionIdentifier(), location.getLatitude(), location.getLongitude(),
- sessionState.currentGeometry(), metricProgress.getDirectionsRouteProfile(),
- metricProgress.getDirectionsRouteDistance(),
- metricProgress.getDirectionsRouteDuration(),
- sessionState.rerouteCount(), sessionState.mockLocation(),
- sessionState.originalRequestIdentifier(), sessionState.requestIdentifier(),
- sessionState.originalGeometry(), sessionState.originalDistance(), sessionState.originalDuration(),
- null, sessionState.currentStepCount(), sessionState.originalStepCount(),
- metricProgress.getDistanceTraveled(), metricProgress.getDistanceRemaining(),
- metricProgress.getDurationRemaining(), checkNullStartTimestamp(sessionState)
+ Date startTimestamp = obtainStartTimestamp(sessionState);
+ // TODO We should generate the Nav event spec version somehow. Should be managed and generated by the Events
+ // library?
+ int hardcodedEventVersion = 7;
+ int absoluteDistanceToDestination = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
+ NavigationMetadata metadata = new NavigationMetadata(
+ startTimestamp,
+ metricProgress.getDistanceTraveled(),
+ metricProgress.getDistanceRemaining(),
+ metricProgress.getDurationRemaining(),
+ sdkIdentifier,
+ BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
+ hardcodedEventVersion,
+ sessionState.sessionIdentifier(),
+ location.getLatitude(),
+ location.getLongitude(),
+ sessionState.currentGeometry(),
+ metricProgress.getDirectionsRouteProfile(),
+ sessionState.mockLocation(),
+ sessionState.locationEngineName(),
+ absoluteDistanceToDestination
);
-
- int absoluteDistance = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
-
- MapboxTelemetry.getInstance().addPercentTimeInForeground(sessionState.percentInForeground(), departEvent);
- MapboxTelemetry.getInstance().addPercentTimeInPortrait(sessionState.percentInPortrait(), departEvent);
- MapboxTelemetry.getInstance().addAbsoluteDistanceToDestination(absoluteDistance, departEvent);
- MapboxTelemetry.getInstance().addLocationEngineName(sessionState.locationEngineName(), departEvent);
- MapboxTelemetry.getInstance().pushEvent(departEvent);
- MapboxTelemetry.getInstance().flushEventsQueueImmediately(false);
+ metadata.setEstimatedDistance(metricProgress.getDirectionsRouteDistance());
+ metadata.setEstimatedDuration(metricProgress.getDirectionsRouteDuration());
+ metadata.setRerouteCount(sessionState.rerouteCount());
+ metadata.setOriginalRequestIdentifier(sessionState.originalRequestIdentifier());
+ metadata.setRequestIdentifier(sessionState.requestIdentifier());
+ metadata.setOriginalGeometry(sessionState.originalGeometry());
+ metadata.setOriginalEstimatedDistance(sessionState.originalDistance());
+ metadata.setOriginalEstimatedDuration(sessionState.originalDuration());
+ metadata.setStepCount(sessionState.currentStepCount());
+ metadata.setOriginalStepCount(sessionState.originalStepCount());
+ metadata.setPercentTimeInForeground(sessionState.percentInForeground());
+ metadata.setPercentTimeInPortrait(sessionState.percentInPortrait());
+ NavigationState state = new NavigationState(metadata);
+ NavigationEventFactory factory = new NavigationEventFactory();
+ Event departEvent = factory.createNavigationEvent(Event.Type.NAV_DEPART, state);
+ mapboxTelemetry.push(departEvent);
}
static void rerouteEvent(RerouteEvent rerouteEvent, MetricsRouteProgress metricProgress,
Location location) {
-
SessionState sessionState = rerouteEvent.getSessionState();
+ Date startTimestamp = obtainStartTimestamp(sessionState);
+ // TODO We should generate the Nav event spec version somehow. Should be managed and generated by the Events
+ // library?
+ int hardcodedEventVersion = 7;
+ int absoluteDistanceToDestination = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
+ NavigationMetadata metadata = new NavigationMetadata(
+ startTimestamp,
+ (int) sessionState.eventRouteDistanceCompleted(),
+ sessionState.eventRouteProgress().getDistanceRemaining(),
+ sessionState.eventRouteProgress().getDurationRemaining(),
+ sdkIdentifier,
+ BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
+ hardcodedEventVersion,
+ sessionState.sessionIdentifier(),
+ location.getLatitude(),
+ location.getLongitude(),
+ sessionState.currentGeometry(),
+ metricProgress.getDirectionsRouteProfile(),
+ sessionState.mockLocation(),
+ sessionState.locationEngineName(),
+ absoluteDistanceToDestination
+ );
+ metadata.setEstimatedDistance(metricProgress.getDirectionsRouteDistance());
+ metadata.setEstimatedDuration(metricProgress.getDirectionsRouteDuration());
+ metadata.setRerouteCount(sessionState.rerouteCount());
+ metadata.setOriginalRequestIdentifier(sessionState.originalRequestIdentifier());
+ metadata.setRequestIdentifier(sessionState.requestIdentifier());
+ metadata.setOriginalGeometry(sessionState.originalGeometry());
+ metadata.setOriginalEstimatedDistance(sessionState.originalDistance());
+ metadata.setOriginalEstimatedDuration(sessionState.originalDuration());
+ metadata.setStepCount(sessionState.currentStepCount());
+ metadata.setOriginalStepCount(sessionState.originalStepCount());
+ metadata.setPercentTimeInForeground(sessionState.percentInForeground());
+ metadata.setPercentTimeInPortrait(sessionState.percentInPortrait());
+ metadata.setCreated(new Date(location.getTime()));
+ NavigationState state = new NavigationState(metadata);
+ Location[] before = convertToArray(sessionState.beforeEventLocations());
+ Location[] after = convertToArray(sessionState.afterEventLocations());
+ NavigationLocationData locationData = new NavigationLocationData(before, after);
+ state.setNavigationLocationData(locationData);
+ int newDistanceRemaining = rerouteEvent.getNewDistanceRemaining();
+ int newDurationRemaining = rerouteEvent.getNewDurationRemaining();
+ String newGeometry = rerouteEvent.getNewRouteGeometry();
+ NavigationNewData navigationNewData = new NavigationNewData(newDistanceRemaining, newDurationRemaining,
+ newGeometry);
+ int secondsSinceLastReroute = sessionState.secondsSinceLastReroute();
+ NavigationRerouteData navigationRerouteData = new NavigationRerouteData(navigationNewData, secondsSinceLastReroute);
+ state.setNavigationRerouteData(navigationRerouteData);
+ FeedbackData feedbackData = new FeedbackData();
+ // TODO Do we want to set the screenshot here?
+ state.setFeedbackData(feedbackData);
updateRouteProgressSessionData(metricProgress);
-
- Hashtable navRerouteEvent = MapboxNavigationEvent.buildRerouteEvent(
- sdkIdentifier, BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME, sessionState.sessionIdentifier(),
- location.getLatitude(), location.getLongitude(),
- sessionState.currentGeometry(), metricProgress.getDirectionsRouteProfile(),
- metricProgress.getDirectionsRouteDistance(),
- metricProgress.getDirectionsRouteDuration(),
- sessionState.rerouteCount(), checkNullStartTimestamp(sessionState),
- convertToArray(sessionState.beforeEventLocations()),
- convertToArray(sessionState.afterEventLocations()),
- (int) sessionState.eventRouteDistanceCompleted(), // distanceCompleted
- sessionState.eventRouteProgress().getDistanceRemaining(), // distanceRemaining
- sessionState.eventRouteProgress().getDurationRemaining(), // durationRemaining
- rerouteEvent.getNewDistanceRemaining(), // new distanceRemaining
- rerouteEvent.getNewDurationRemaining(), // new durationRemaining
- sessionState.secondsSinceLastReroute(), TelemetryUtils.buildUUID(),
- rerouteEvent.getNewRouteGeometry(), sessionState.mockLocation(),
- sessionState.originalRequestIdentifier(), sessionState.requestIdentifier(), sessionState.originalGeometry(),
- sessionState.originalDistance(), sessionState.originalDuration(), null,
- upcomingInstruction, upcomingType, upcomingModifier, upcomingName,
- previousInstruction, previousType, previousModifier, previousName,
- metricProgress.getCurrentStepDistance(),
- metricProgress.getCurrentStepDuration(),
- metricProgress.getCurrentStepDistanceRemaining(),
- metricProgress.getCurrentStepDurationRemaining(),
- sessionState.currentStepCount(), sessionState.originalStepCount());
- navRerouteEvent.put(MapboxNavigationEvent.KEY_CREATED, TelemetryUtils.generateCreateDate(location));
-
- int absoluteDistance = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
-
- MapboxTelemetry.getInstance().addPercentTimeInForeground(sessionState.percentInForeground(), navRerouteEvent);
- MapboxTelemetry.getInstance().addPercentTimeInPortrait(sessionState.percentInPortrait(), navRerouteEvent);
- MapboxTelemetry.getInstance().addAbsoluteDistanceToDestination(absoluteDistance, navRerouteEvent);
- MapboxTelemetry.getInstance().addLocationEngineName(sessionState.locationEngineName(), navRerouteEvent);
- MapboxTelemetry.getInstance().pushEvent(navRerouteEvent);
- MapboxTelemetry.getInstance().flushEventsQueueImmediately(false);
+ NavigationStepMetadata navigationStepMetadata = new NavigationStepMetadata();
+ navigationStepMetadata.setUpcomingInstruction(upcomingInstruction);
+ navigationStepMetadata.setUpcomingType(upcomingType);
+ navigationStepMetadata.setUpcomingModifier(upcomingModifier);
+ navigationStepMetadata.setUpcomingName(upcomingName);
+ navigationStepMetadata.setPreviousInstruction(previousInstruction);
+ navigationStepMetadata.setPreviousType(previousType);
+ navigationStepMetadata.setPreviousModifier(previousModifier);
+ navigationStepMetadata.setPreviousName(previousName);
+ int distance = metricProgress.getCurrentStepDistance();
+ navigationStepMetadata.setDistance(distance);
+ int duration = metricProgress.getCurrentStepDuration();
+ navigationStepMetadata.setDuration(duration);
+ int stepDistanceRemaining = metricProgress.getCurrentStepDistanceRemaining();
+ navigationStepMetadata.setDistanceRemaining(stepDistanceRemaining);
+ int stepDurationRemaining = metricProgress.getCurrentStepDurationRemaining();
+ navigationStepMetadata.setDurationRemaining(stepDurationRemaining);
+ state.setNavigationStepMetadata(navigationStepMetadata);
+ NavigationEventFactory factory = new NavigationEventFactory();
+ Event navRerouteEvent = factory.createNavigationEvent(Event.Type.NAV_REROUTE, state);
+ mapboxTelemetry.push(navRerouteEvent);
}
static void feedbackEvent(SessionState sessionState, MetricsRouteProgress metricProgress, Location location,
- String description, String feedbackType, String screenshot, String feedbackId,
- String vendorId) {
-
- updateRouteProgressSessionData(metricProgress);
-
- Hashtable feedbackEvent = MapboxNavigationEvent.buildFeedbackEvent(sdkIdentifier,
- BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME, sessionState.sessionIdentifier(), location.getLatitude(),
- location.getLongitude(), sessionState.currentGeometry(), metricProgress.getDirectionsRouteProfile(),
- metricProgress.getDirectionsRouteDistance(), metricProgress.getDirectionsRouteDuration(),
- sessionState.rerouteCount(), checkNullStartTimestamp(sessionState), feedbackType,
- convertToArray(sessionState.beforeEventLocations()),
- convertToArray(sessionState.afterEventLocations()),
+ String description, String feedbackType, String screenshot, String feedbackSource) {
+ Date startTimestamp = obtainStartTimestamp(sessionState);
+ // TODO We should generate the Nav event spec version somehow. Should be managed and generated by the Events
+ // library?
+ int hardcodedEventVersion = 7;
+ int absoluteDistanceToDestination = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
+ NavigationMetadata metadata = new NavigationMetadata(
+ startTimestamp,
(int) sessionState.eventRouteDistanceCompleted(),
sessionState.eventRouteProgress().getDistanceRemaining(),
sessionState.eventRouteProgress().getDurationRemaining(),
- description, vendorId, feedbackId, screenshot,
- sessionState.mockLocation(), sessionState.originalRequestIdentifier(),
- sessionState.requestIdentifier(), sessionState.originalGeometry(),
- sessionState.originalDistance(), sessionState.originalDuration(), null,
- upcomingInstruction, upcomingType, upcomingModifier, upcomingName,
- previousInstruction, previousType, previousModifier, previousName,
- metricProgress.getCurrentStepDistance(),
- metricProgress.getCurrentStepDuration(),
- metricProgress.getCurrentStepDistanceRemaining(),
- metricProgress.getCurrentStepDurationRemaining(),
- sessionState.currentStepCount(), sessionState.originalStepCount()
+ sdkIdentifier,
+ BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME,
+ hardcodedEventVersion,
+ sessionState.sessionIdentifier(),
+ location.getLatitude(),
+ location.getLongitude(),
+ sessionState.currentGeometry(),
+ metricProgress.getDirectionsRouteProfile(),
+ sessionState.mockLocation(),
+ sessionState.locationEngineName(),
+ absoluteDistanceToDestination
);
+ metadata.setEstimatedDistance(metricProgress.getDirectionsRouteDistance());
+ metadata.setEstimatedDuration(metricProgress.getDirectionsRouteDuration());
+ metadata.setRerouteCount(sessionState.rerouteCount());
+ metadata.setOriginalRequestIdentifier(sessionState.originalRequestIdentifier());
+ metadata.setRequestIdentifier(sessionState.requestIdentifier());
+ metadata.setOriginalGeometry(sessionState.originalGeometry());
+ metadata.setOriginalEstimatedDistance(sessionState.originalDistance());
+ metadata.setOriginalEstimatedDuration(sessionState.originalDuration());
+ metadata.setStepCount(sessionState.currentStepCount());
+ metadata.setOriginalStepCount(sessionState.originalStepCount());
+ metadata.setPercentTimeInForeground(sessionState.percentInForeground());
+ metadata.setPercentTimeInPortrait(sessionState.percentInPortrait());
+ metadata.setCreated(new Date(location.getTime()));
+ NavigationState state = new NavigationState(metadata);
+ Location[] before = convertToArray(sessionState.beforeEventLocations());
+ Location[] after = convertToArray(sessionState.afterEventLocations());
+ NavigationLocationData locationData = new NavigationLocationData(before, after);
+ state.setNavigationLocationData(locationData);
+ FeedbackData feedbackData = new FeedbackData();
+ feedbackData.setScreenshot(screenshot);
+ state.setFeedbackData(feedbackData);
+ updateRouteProgressSessionData(metricProgress);
+ NavigationStepMetadata navigationStepMetadata = new NavigationStepMetadata();
+ navigationStepMetadata.setUpcomingInstruction(upcomingInstruction);
+ navigationStepMetadata.setUpcomingType(upcomingType);
+ navigationStepMetadata.setUpcomingModifier(upcomingModifier);
+ navigationStepMetadata.setUpcomingName(upcomingName);
+ navigationStepMetadata.setPreviousInstruction(previousInstruction);
+ navigationStepMetadata.setPreviousType(previousType);
+ navigationStepMetadata.setPreviousModifier(previousModifier);
+ navigationStepMetadata.setPreviousName(previousName);
+ int distance = metricProgress.getCurrentStepDistance();
+ navigationStepMetadata.setDistance(distance);
+ int duration = metricProgress.getCurrentStepDuration();
+ navigationStepMetadata.setDuration(duration);
+ int stepDistanceRemaining = metricProgress.getCurrentStepDistanceRemaining();
+ navigationStepMetadata.setDistanceRemaining(stepDistanceRemaining);
+ int stepDurationRemaining = metricProgress.getCurrentStepDurationRemaining();
+ navigationStepMetadata.setDurationRemaining(stepDurationRemaining);
+ state.setNavigationStepMetadata(navigationStepMetadata);
+ FeedbackEventData feedbackEventData = new FeedbackEventData(feedbackType, feedbackSource);
+ feedbackEventData.setDescription(description);
+ state.setFeedbackEventData(feedbackEventData);
+ NavigationEventFactory factory = new NavigationEventFactory();
+ Event feedbackEvent = factory.createNavigationEvent(Event.Type.NAV_FEEDBACK, state);
+ mapboxTelemetry.push(feedbackEvent);
+ }
- int absoluteDistance = DistanceUtils.calculateAbsoluteDistance(location, metricProgress);
-
- MapboxTelemetry.getInstance().addPercentTimeInForeground(sessionState.percentInForeground(), feedbackEvent);
- MapboxTelemetry.getInstance().addPercentTimeInPortrait(sessionState.percentInPortrait(), feedbackEvent);
- MapboxTelemetry.getInstance().addAbsoluteDistanceToDestination(absoluteDistance, feedbackEvent);
- feedbackEvent.put(MapboxNavigationEvent.KEY_CREATED, TelemetryUtils.generateCreateDate(location));
- MapboxTelemetry.getInstance().addLocationEngineName(sessionState.locationEngineName(), feedbackEvent);
- MapboxTelemetry.getInstance().pushEvent(feedbackEvent);
- MapboxTelemetry.getInstance().flushEventsQueueImmediately(false);
+ static Event turnstileEvent() {
+ Event navTurnstileEvent = new AppUserTurnstile(sdkIdentifier,
+ BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME);
+ return navTurnstileEvent;
}
- static void turnstileEvent() {
- MapboxTelemetry.getInstance().setCustomTurnstileEvent(
- MapboxNavigationEvent.buildTurnstileEvent(sdkIdentifier, BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME)
- );
+ private static Date obtainStartTimestamp(SessionState sessionState) {
+ if (sessionState.startTimestamp() == null) {
+ return new Date();
+ }
+ return sessionState.startTimestamp();
}
private static void updateRouteProgressSessionData(MetricsRouteProgress routeProgress) {
@@ -217,11 +370,4 @@ private static void updateRouteProgressSessionData(MetricsRouteProgress routePro
private static Location[] convertToArray(List locationList) {
return locationList.toArray(new Location[locationList.size()]);
}
-
- private static Date checkNullStartTimestamp(SessionState sessionState) {
- if (sessionState.startTimestamp() == null) {
- return new Date();
- }
- return sessionState.startTimestamp();
- }
}
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 8cf767ed962..2e7355bc605 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
@@ -10,6 +10,8 @@
import android.os.IBinder;
import android.support.annotation.Nullable;
+import com.mapbox.android.core.location.LocationEngine;
+import com.mapbox.android.core.location.LocationEngineListener;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.services.android.navigation.v5.location.LocationValidator;
@@ -19,8 +21,6 @@
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.utils.LocaleUtils;
import com.mapbox.services.android.navigation.v5.utils.RouteUtils;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
-import com.mapbox.services.android.telemetry.location.LocationEngineListener;
import java.util.List;
import java.util.Locale;
@@ -56,7 +56,8 @@ public class NavigationService extends Service implements LocationEngineListener
private LocationValidator locationValidator;
private NavigationEngine thread;
private Locale locale;
- private @NavigationUnitType.UnitType int unitType;
+ @NavigationUnitType.UnitType
+ private int unitType;
@Nullable
@Override
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationTelemetry.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationTelemetry.java
index b8564ec0028..8e61096f398 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationTelemetry.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/NavigationTelemetry.java
@@ -2,10 +2,13 @@
import android.app.Application;
import android.content.Context;
-import android.content.SharedPreferences;
import android.location.Location;
import android.support.annotation.NonNull;
+import com.mapbox.android.core.location.LocationEngine;
+import com.mapbox.android.core.location.LocationEngineListener;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.TelemetryUtils;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.core.constants.Constants;
import com.mapbox.core.utils.TextUtils;
@@ -24,12 +27,6 @@
import com.mapbox.services.android.navigation.v5.utils.RingBuffer;
import com.mapbox.services.android.navigation.v5.utils.RouteUtils;
import com.mapbox.services.android.navigation.v5.utils.time.TimeUtils;
-import com.mapbox.services.android.telemetry.MapboxEvent;
-import com.mapbox.services.android.telemetry.MapboxTelemetry;
-import com.mapbox.services.android.telemetry.constants.TelemetryConstants;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
-import com.mapbox.services.android.telemetry.location.LocationEngineListener;
-import com.mapbox.services.android.telemetry.utils.TelemetryUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -63,7 +60,6 @@ class NavigationTelemetry implements LocationEngineListener, NavigationMetricLis
private RingBuffer locationBuffer;
private Date lastRerouteDate;
- private String vendorId;
private boolean isOffRoute;
private boolean isConfigurationChange;
@@ -142,23 +138,19 @@ void initialize(@NonNull Context context, @NonNull String accessToken,
updateLocationEngine(locationEngine);
validateAccessToken(accessToken);
+ NavigationMetricsWrapper.init(context, accessToken, BuildConfig.MAPBOX_NAVIGATION_EVENTS_USER_AGENT);
MapboxNavigationOptions options = navigation.options();
// Set sdkIdentifier based on if from UI or not
String sdkIdentifier = updateSdkIdentifier(options);
// Enable extra logging in debug mode
- MapboxTelemetry.getInstance().setDebugLoggingEnabled(options.isDebugLoggingEnabled());
-
- updateUserAgent(context, accessToken, sdkIdentifier);
-
- // Get the current vendorId
- vendorId = obtainVendorId(context);
+ NavigationMetricsWrapper.enableLogging();
NavigationMetricsWrapper.sdkIdentifier = sdkIdentifier;
- NavigationMetricsWrapper.turnstileEvent();
- // TODO This should be removed when we figure out a solution in NavigationTelemetry
- // Force pushing a TYPE_MAP_LOAD event to ensure that the Nav turnstile event is sent
- MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapLoadEvent());
+ Event navTurnstileEvent = NavigationMetricsWrapper.turnstileEvent();
+ // TODO Check if we are sending two turnstile events (Maps and Nav) and if so, do we want to track them
+ // separately?
+ NavigationMetricsWrapper.push(navTurnstileEvent);
isInitialized = true;
}
@@ -187,7 +179,7 @@ void initializeLifecycleMonitor(Application application) {
void startSession(DirectionsRoute directionsRoute) {
if (!isConfigurationChange) {
navigationSessionState = navigationSessionState.toBuilder()
- .sessionIdentifier(TelemetryUtils.buildUUID())
+ .sessionIdentifier(TelemetryUtils.obtainUniversalUniqueIdentifier())
.originalDirectionRoute(directionsRoute)
.originalRequestIdentifier(directionsRoute.routeOptions().requestUuid())
.requestIdentifier(directionsRoute.routeOptions().requestUuid())
@@ -213,6 +205,7 @@ void endSession(boolean isConfigurationChange) {
NavigationMetricsWrapper.cancelEvent(navigationSessionState, metricProgress, metricLocation.getLocation());
}
lifecycleMonitor = null;
+ NavigationMetricsWrapper.disable();
isInitialized = false;
}
}
@@ -346,13 +339,6 @@ private String updateSdkIdentifier(MapboxNavigationOptions options) {
return sdkIdentifier;
}
- private void updateUserAgent(@NonNull Context context, @NonNull String accessToken, String sdkIdentifier) {
- String userAgent = String.format("%s/%s", sdkIdentifier, BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME);
- MapboxTelemetry.getInstance().initialize(context, accessToken, userAgent, sdkIdentifier,
- BuildConfig.MAPBOX_NAVIGATION_VERSION_NAME);
- MapboxTelemetry.getInstance().newUserAgent(userAgent);
- }
-
private void flushEventQueues() {
for (FeedbackEvent feedbackEvent : queuedFeedbackEvents) {
sendFeedbackEvent(feedbackEvent);
@@ -362,11 +348,6 @@ private void flushEventQueues() {
}
}
- private String obtainVendorId(Context context) {
- SharedPreferences prefs = TelemetryUtils.getSharedPreferences(context.getApplicationContext());
- return prefs.getString(TelemetryConstants.MAPBOX_SHARED_PREFERENCE_KEY_VENDOR_ID, "");
- }
-
private void updateCurrentLocation(Location rawLocation) {
metricLocation = new MetricsLocation(rawLocation);
locationBuffer.addLast(rawLocation);
@@ -521,7 +502,7 @@ private void sendFeedbackEvent(FeedbackEvent feedbackEvent) {
NavigationMetricsWrapper.feedbackEvent(feedbackSessionState, metricProgress,
feedbackEvent.getSessionState().eventLocation(), feedbackEvent.getDescription(),
- feedbackEvent.getFeedbackType(), feedbackEvent.getScreenshot(), feedbackEvent.getEventId(), vendorId);
+ feedbackEvent.getFeedbackType(), feedbackEvent.getScreenshot(), feedbackEvent.getFeedbackSource());
}
private TelemetryEvent findQueuedTelemetryEvent(String eventId) {
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/FeedbackEvent.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/FeedbackEvent.java
index 01835efee82..9191cb21a4c 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/FeedbackEvent.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/FeedbackEvent.java
@@ -2,7 +2,7 @@
import android.support.annotation.StringDef;
-import com.mapbox.services.android.telemetry.utils.TelemetryUtils;
+import com.mapbox.android.telemetry.TelemetryUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -10,7 +10,7 @@
public class FeedbackEvent implements TelemetryEvent {
@Retention(RetentionPolicy.SOURCE)
- @StringDef({
+ @StringDef( {
FEEDBACK_TYPE_GENERAL_ISSUE,
FEEDBACK_TYPE_OTHER_MAP_ISSUE,
FEEDBACK_TYPE_ACCIDENT,
@@ -28,7 +28,7 @@ public class FeedbackEvent implements TelemetryEvent {
}
@Retention(RetentionPolicy.SOURCE)
- @StringDef({
+ @StringDef( {
FEEDBACK_SOURCE_REROUTE,
FEEDBACK_SOURCE_UI
})
@@ -62,7 +62,7 @@ public FeedbackEvent(SessionState sessionState, @FeedbackSource String feedbackS
this.feedbackSessionState = sessionState;
this.feedbackSource = feedbackSource;
this.feedbackType = FEEDBACK_TYPE_GENERAL_ISSUE; // Default until updated
- this.eventId = TelemetryUtils.buildUUID();
+ this.eventId = TelemetryUtils.obtainUniversalUniqueIdentifier();
this.screenshot = "";
}
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/RerouteEvent.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/RerouteEvent.java
index 22273ad8490..27e205ffc21 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/RerouteEvent.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/navigation/metrics/RerouteEvent.java
@@ -2,7 +2,7 @@
import android.support.annotation.NonNull;
-import com.mapbox.services.android.telemetry.utils.TelemetryUtils;
+import com.mapbox.android.telemetry.TelemetryUtils;
public class RerouteEvent implements TelemetryEvent {
@@ -14,7 +14,7 @@ public class RerouteEvent implements TelemetryEvent {
public RerouteEvent(SessionState rerouteSessionState) {
this.rerouteSessionState = rerouteSessionState;
- this.eventId = TelemetryUtils.buildUUID();
+ this.eventId = TelemetryUtils.obtainUniversalUniqueIdentifier();
}
@Override
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 25897a4310d..21469a701f9 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
@@ -14,7 +14,8 @@
import java.util.List;
-import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.MINIMUM_BACKUP_DISTANCE_FOR_OFF_ROUTE;
+import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants
+ .MINIMUM_BACKUP_DISTANCE_FOR_OFF_ROUTE;
import static com.mapbox.services.android.navigation.v5.utils.MeasurementUtils.userTrueDistanceFromStep;
import static com.mapbox.services.android.navigation.v5.utils.ToleranceUtils.dynamicRerouteDistanceTolerance;
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 7899f2d0e64..bacab9682f7 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
@@ -10,7 +10,7 @@
import com.mapbox.services.android.navigation.v5.routeprogress.RouteLegProgress;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteStepProgress;
-import com.mapbox.services.android.telemetry.utils.MathUtils;
+import com.mapbox.services.android.navigation.v5.utils.MathUtils;
import com.mapbox.turf.TurfConstants;
import com.mapbox.turf.TurfMeasurement;
import com.mapbox.turf.TurfMisc;
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/DistanceUtils.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/DistanceUtils.java
index bfac11c6df5..09c5f74282e 100644
--- a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/DistanceUtils.java
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/DistanceUtils.java
@@ -37,8 +37,9 @@ public class DistanceUtils {
/**
* Creates a DistanceUtils object with information about how to format distances
- * @param context from which to get localized strings from
- * @param locale for which language and country
+ *
+ * @param context from which to get localized strings from
+ * @param locale for which language and country
* @param unitType to use, or NONE_SPECIFIED to use default for locale country
*/
public DistanceUtils(Context context, @NonNull Locale locale, @NavigationUnitType.UnitType int unitType) {
@@ -61,6 +62,7 @@ public DistanceUtils(Context context, @NonNull Locale locale, @NavigationUnitTyp
/**
* Returns a formatted SpannableString with bold and size formatting. I.e., "10 mi", "350 m"
+ *
* @param distance in meters
* @return SpannableString representation which has a bolded number and units which have a
* relative size of .65 times the size of the number
@@ -83,6 +85,7 @@ public SpannableString formatDistance(double distance) {
/**
* Returns number rounded to closest fifty, unless the number is less than fifty, then fifty is returned
+ *
* @param distance to round to closest fifty
* @return number rounded to closest fifty, or fifty if distance is less than fifty
*/
@@ -94,7 +97,8 @@ private String roundToClosestFifty(double distance) {
/**
* Rounds given number to the given decimal place
- * @param distance to round
+ *
+ * @param distance to round
* @param decimalPlace number of decimal places to round
* @return distance rounded to given decimal places
*/
@@ -107,15 +111,16 @@ private String roundToDecimalPlace(double distance, int decimalPlace) {
/**
* Takes in a distance and units and returns a formatted SpannableString where the number is bold
* and the unit is shrunked to .65 times the size
+ *
* @param distance formatted with appropriate decimal places
- * @param unit string from TurfConstants. This will be converted to the abbreviated form.
+ * @param unit string from TurfConstants. This will be converted to the abbreviated form.
* @return String with bolded distance and shrunken units
*/
private SpannableString getDistanceString(String distance, String unit) {
SpannableString spannableString = new SpannableString(String.format("%s %s", distance, unitStrings.get(unit)));
spannableString.setSpan(new StyleSpan(Typeface.BOLD), 0, distance.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- spannableString.setSpan(new RelativeSizeSpan(0.65f),distance.length() + 1,
+ spannableString.setSpan(new RelativeSizeSpan(0.65f), distance.length() + 1,
spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
diff --git a/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/MathUtils.java b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/MathUtils.java
new file mode 100644
index 00000000000..4a76cfe5355
--- /dev/null
+++ b/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/utils/MathUtils.java
@@ -0,0 +1,80 @@
+package com.mapbox.services.android.navigation.v5.utils;
+
+
+// TODO Check and remove if not necessary
+public class MathUtils {
+
+ /**
+ * Test a value in specified range, returning minimum if it's below, and maximum if it's above
+ *
+ * @param value Value to test
+ * @param min Minimum value of range
+ * @param max Maximum value of range
+ * @return value if it's between min and max, min if it's below, max if it's above
+ */
+ public static double clamp(double value, double min, double max) {
+ return Math.max(min, Math.min(max, value));
+ }
+
+ /**
+ * Test a value in specified range, returning minimum if it's below, and maximum if it's above
+ *
+ * @param value Value to test
+ * @param min Minimum value of range
+ * @param max Maximum value of range
+ * @return value if it's between min and max, min if it's below, max if it's above
+ */
+ public static float clamp(float value, float min, float max) {
+ return Math.max(min, Math.min(max, value));
+ }
+
+ /**
+ * Constrains value to the given range (including min, excluding max) via modular arithmetic.
+ *
+ * Same formula as used in Core GL (wrap.hpp)
+ * std::fmod((std::fmod((value - min), d) + d), d) + min;
+ *
+ * @param value Value to wrap
+ * @param min Minimum value
+ * @param max Maximum value
+ * @return Wrapped value
+ */
+ public static double wrap(double value, double min, double max) {
+ double delta = max - min;
+
+ double firstMod = (value - min) % delta;
+ double secondMod = (firstMod + delta) % delta;
+
+ return secondMod + min;
+ }
+
+ /**
+ * Convert bearing from core to match Android SDK value.
+ *
+ * @param nativeBearing bearing value coming from core
+ * @return bearing in degrees starting from 0 rotating clockwise
+ */
+ public static double convertNativeBearing(double nativeBearing) {
+ double direction = -nativeBearing;
+
+ while (direction > 360) {
+ direction -= 360;
+ }
+ while (direction < 0) {
+ direction += 360;
+ }
+ return direction;
+ }
+
+ /**
+ * Returns the smallest angle between two angles.
+ *
+ * @param alpha First angle in degrees
+ * @param beta Second angle in degrees
+ * @return Smallest angle between two angles.
+ */
+ public static double differenceBetweenAngles(double alpha, double beta) {
+ double phi = Math.abs(beta - alpha) % 360;
+ return phi > 180 ? 360 - phi : phi;
+ }
+}
diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/FasterRouteDetectorTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/FasterRouteDetectorTest.java
index eaaa21eac32..b10781d2216 100644
--- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/FasterRouteDetectorTest.java
+++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/FasterRouteDetectorTest.java
@@ -5,6 +5,7 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.DirectionsAdapterFactory;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
@@ -12,7 +13,6 @@
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.telemetry.location.LocationEngine;
import org.junit.Test;
diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigationTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigationTest.java
index ec172a64692..65a0bbca3de 100644
--- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigationTest.java
+++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/MapboxNavigationTest.java
@@ -2,6 +2,7 @@
import android.content.Context;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.services.android.navigation.v5.BaseTest;
import com.mapbox.services.android.navigation.v5.milestone.Milestone;
@@ -11,7 +12,6 @@
import com.mapbox.services.android.navigation.v5.offroute.OffRouteDetector;
import com.mapbox.services.android.navigation.v5.snap.Snap;
import com.mapbox.services.android.navigation.v5.snap.SnapToRoute;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
import org.junit.Test;
diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEventDispatcherTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEventDispatcherTest.java
index 44076a72545..f8568f76ebc 100644
--- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEventDispatcherTest.java
+++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationEventDispatcherTest.java
@@ -5,6 +5,7 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.DirectionsAdapterFactory;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
@@ -18,7 +19,6 @@
import com.mapbox.services.android.navigation.v5.route.FasterRouteListener;
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
import org.junit.Before;
import org.junit.Test;
diff --git a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelperTest.java b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelperTest.java
index 61b12cfab97..05367d7caa0 100644
--- a/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelperTest.java
+++ b/libandroid-navigation/src/test/java/com/mapbox/services/android/navigation/v5/navigation/NavigationHelperTest.java
@@ -6,6 +6,7 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.api.directions.v5.DirectionsAdapterFactory;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
@@ -27,7 +28,6 @@
import com.mapbox.services.android.navigation.v5.routeprogress.RouteLegProgress;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteStepProgress;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
import org.junit.Test;
import org.junit.runner.RunWith;
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 ee85676d16e..f576ce5a2ab 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
@@ -3,10 +3,10 @@
import android.content.Context;
import android.location.Location;
+import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.geojson.Point;
import com.mapbox.services.android.navigation.v5.BaseTest;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
-import com.mapbox.services.android.telemetry.location.LocationEngine;
import org.junit.Before;
import org.junit.Test;