Skip to content

Commit 7ee7767

Browse files
committed
Update RouteRetrievalEvent
1 parent e6df1b2 commit 7ee7767

File tree

14 files changed

+240
-86
lines changed

14 files changed

+240
-86
lines changed

app/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ dependencies {
8989
implementation dependenciesList.mapboxMapSdk
9090
implementation dependenciesList.mapboxSearchSdk
9191

92+
// TODO remove when dependency is released upstream
93+
implementation("com.mapbox.mapboxsdk:mapbox-sdk-services:4.4.0-SNAPSHOT") {
94+
force = true
95+
}
96+
9297
// Support libraries
9398
implementation dependenciesList.supportAppcompatV7
9499
implementation dependenciesList.supportDesign

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ allprojects {
3333
jcenter()
3434
maven { url 'https://plugins.gradle.org/m2' }
3535
maven { url 'https://mapbox.bintray.com/mapbox' }
36+
// TODO remove after java services are released
37+
maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
3638
}
3739

3840
group = GROUP

gradle/dependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ext {
99

1010
version = [
1111
mapboxMapSdk : '7.1.2',
12-
mapboxSdkServices : '4.3.0',
12+
mapboxSdkServices : '4.4.0-SNAPSHOT',
1313
mapboxEvents : '4.2.0',
1414
mapboxNavigator : '4.0.0',
1515
mapboxAnnotationPlugin : '0.5.0',

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import com.mapbox.services.android.navigation.v5.exception.NavigationException;
66

77
class ElapsedTime {
8+
9+
private static final double ELAPSED_TIME_DENOMINATOR = 1e+9;
10+
private static final double PRECISION = 100d;
811
private Long start = null;
912
private Long end = null;
1013

@@ -29,10 +32,12 @@ Long getEnd() {
2932
return end;
3033
}
3134

32-
long getElapsedTime() {
35+
double getElapsedTime() {
3336
if (start == null || end == null) {
3437
throw new NavigationException("Must call start() and end() before calling getElapsedTime()");
3538
}
36-
return end - start;
39+
long elapsedTimeInNanoseconds = end - start;
40+
double elapsedTimeInSeconds = elapsedTimeInNanoseconds / ELAPSED_TIME_DENOMINATOR;
41+
return Math.round(elapsedTimeInSeconds * PRECISION) / PRECISION;
3742
}
3843
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ private NavigationMetricsWrapper() {
4747
static void init(Context context, String accessToken, String userAgent) {
4848
mapboxTelemetry = new MapboxTelemetry(context, accessToken, userAgent);
4949
mapboxTelemetry.enable();
50+
51+
// TODO disable after testing
52+
mapboxTelemetry.updateDebugLoggingEnabled(true);
5053
}
5154

5255
static void toggleLogging(boolean isDebugLoggingEnabled) {
@@ -371,7 +374,7 @@ static void feedbackEvent(SessionState sessionState, MetricsRouteProgress metric
371374
mapboxTelemetry.push(feedbackEvent);
372375
}
373376

374-
static void routeRetrievalEvent(long elapsedTime, String routeUuid, String sessionId) {
377+
static void routeRetrievalEvent(double elapsedTime, String routeUuid, String sessionId) {
375378
push(new RouteRetrievalEvent(elapsedTime, routeUuid, sessionId));
376379
}
377380

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

Lines changed: 15 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import retrofit2.Call;
2525
import retrofit2.Callback;
26-
import retrofit2.Response;
2726

2827

2928
/**
@@ -41,8 +40,7 @@
4140
public final class NavigationRoute {
4241

4342
private final MapboxDirections mapboxDirections;
44-
private final NavigationTelemetry navigationTelemetry;
45-
private final ElapsedTime elapsedTime;
43+
private static final NavigationRouteEventListener EVENT_LISTENER = new NavigationRouteEventListener();
4644

4745
/**
4846
* Package private constructor used for the {@link Builder#build()} method.
@@ -51,14 +49,7 @@ public final class NavigationRoute {
5149
* @since 0.5.0
5250
*/
5351
NavigationRoute(MapboxDirections mapboxDirections) {
54-
this(mapboxDirections, NavigationTelemetry.getInstance(), new ElapsedTime());
55-
}
56-
57-
NavigationRoute(MapboxDirections mapboxDirections, NavigationTelemetry navigationTelemetry,
58-
ElapsedTime elapsedTime) {
5952
this.mapboxDirections = mapboxDirections;
60-
this.navigationTelemetry = navigationTelemetry;
61-
this.elapsedTime = elapsedTime;
6253
}
6354

6455
/**
@@ -72,7 +63,7 @@ public static Builder builder(Context context) {
7263
}
7364

7465
static Builder builder(Context context, LocaleUtils localeUtils) {
75-
return new Builder()
66+
return new Builder(EVENT_LISTENER)
7667
.annotations(DirectionsCriteria.ANNOTATION_CONGESTION, DirectionsCriteria.ANNOTATION_DISTANCE)
7768
.language(context, localeUtils)
7869
.voiceUnits(context, localeUtils)
@@ -87,24 +78,7 @@ static Builder builder(Context context, LocaleUtils localeUtils) {
8778
* @since 0.5.0
8879
*/
8980
public void getRoute(final Callback<DirectionsResponse> callback) {
90-
elapsedTime.start();
91-
92-
mapboxDirections.enqueueCall(new Callback<DirectionsResponse>() {
93-
@Override
94-
public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
95-
elapsedTime.end();
96-
callback.onResponse(call, response);
97-
if (response.body().routes() != null && !response.body().routes().isEmpty()) {
98-
navigationTelemetry.routeRetrievalEvent(elapsedTime,
99-
response.body().routes().get(0).routeOptions().requestUuid());
100-
}
101-
}
102-
103-
@Override
104-
public void onFailure(Call<DirectionsResponse> call, Throwable throwable) {
105-
callback.onFailure(call, throwable);
106-
}
107-
});
81+
mapboxDirections.enqueueCall(new NavigationRouteCallback(EVENT_LISTENER, callback));
10882
}
10983

11084
/**
@@ -145,12 +119,14 @@ public static final class Builder {
145119
private static final String SEMICOLON = ";";
146120
private static final String COMMA = ",";
147121
private final MapboxDirections.Builder directionsBuilder;
122+
private final NavigationRouteEventListener eventListener;
148123

149124
/**
150125
* Private constructor for initializing the raw MapboxDirections.Builder
151126
*/
152-
private Builder() {
153-
directionsBuilder = MapboxDirections.builder();
127+
private Builder(NavigationRouteEventListener eventListener) {
128+
this.eventListener = eventListener;
129+
this.directionsBuilder = MapboxDirections.builder();
154130
}
155131

156132
/**
@@ -586,14 +562,14 @@ public Builder routeOptions(RouteOptions options) {
586562
}
587563

588564
if (!TextUtils.isEmpty(options.waypointNames())) {
589-
String[] waypointNames = options.waypointNames().split(SEMICOLON);
590-
directionsBuilder.addWaypointNames(waypointNames);
565+
String[] wayPointNames = options.waypointNames().split(SEMICOLON);
566+
directionsBuilder.addWaypointNames(wayPointNames);
591567
}
592568

593-
String waypointTargets = options.waypointTargets();
594-
if (!TextUtils.isEmpty(waypointTargets)) {
595-
Point[] splittedWaypointTargets = parseWaypointTargets(waypointTargets);
596-
directionsBuilder.addWaypointTargets(splittedWaypointTargets);
569+
String wayPointTargets = options.waypointTargets();
570+
if (!TextUtils.isEmpty(wayPointTargets)) {
571+
Point[] splitWayPointTargets = parseWaypointTargets(wayPointTargets);
572+
directionsBuilder.addWaypointTargets(splitWayPointTargets);
597573
}
598574

599575
return this;
@@ -615,7 +591,8 @@ public NavigationRoute build() {
615591
.overview(DirectionsCriteria.OVERVIEW_FULL)
616592
.voiceInstructions(true)
617593
.bannerInstructions(true)
618-
.roundaboutExits(true);
594+
.roundaboutExits(true)
595+
.eventListener(eventListener);
619596
return new NavigationRoute(directionsBuilder.build());
620597
}
621598

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.mapbox.services.android.navigation.v5.navigation;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import com.mapbox.api.directions.v5.models.DirectionsResponse;
6+
7+
import retrofit2.Call;
8+
import retrofit2.Callback;
9+
import retrofit2.Response;
10+
11+
class NavigationRouteCallback implements Callback<DirectionsResponse> {
12+
13+
private final NavigationTelemetry telemetry;
14+
private final NavigationRouteEventListener listener;
15+
private final Callback<DirectionsResponse> callback;
16+
17+
NavigationRouteCallback(NavigationRouteEventListener listener, Callback<DirectionsResponse> callback) {
18+
this(NavigationTelemetry.getInstance(), listener, callback);
19+
}
20+
21+
NavigationRouteCallback(NavigationTelemetry telemetry, NavigationRouteEventListener listener,
22+
Callback<DirectionsResponse> callback) {
23+
this.telemetry = telemetry;
24+
this.listener = listener;
25+
this.callback = callback;
26+
}
27+
28+
@Override
29+
public void onResponse(@NonNull Call<DirectionsResponse> call, @NonNull Response<DirectionsResponse> response) {
30+
callback.onResponse(call, response);
31+
if (isValid(response)) {
32+
String uuid = response.body().uuid();
33+
sendEventWith(listener.getTime(), uuid);
34+
}
35+
}
36+
37+
@Override
38+
public void onFailure(@NonNull Call<DirectionsResponse> call, @NonNull Throwable throwable) {
39+
callback.onFailure(call, throwable);
40+
}
41+
42+
private boolean isValid(Response<DirectionsResponse> response) {
43+
return response.body().routes() != null && !response.body().routes().isEmpty();
44+
}
45+
46+
private void sendEventWith(ElapsedTime time, String uuid) {
47+
telemetry.routeRetrievalEvent(time, uuid);
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.mapbox.services.android.navigation.v5.navigation;
2+
3+
import okhttp3.Call;
4+
import okhttp3.EventListener;
5+
6+
class NavigationRouteEventListener extends EventListener {
7+
8+
private final ElapsedTime time;
9+
10+
NavigationRouteEventListener() {
11+
this(new ElapsedTime());
12+
}
13+
14+
NavigationRouteEventListener(ElapsedTime time) {
15+
this.time = time;
16+
}
17+
18+
@Override
19+
public void callStart(Call call) {
20+
super.callStart(call);
21+
time.start();
22+
}
23+
24+
@Override
25+
public void callEnd(Call call) {
26+
super.callEnd(call);
27+
time.end();
28+
}
29+
30+
ElapsedTime getTime() {
31+
return time;
32+
}
33+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ void cancelFeedback(String feedbackId) {
303303

304304
void routeRetrievalEvent(ElapsedTime elapsedTime, String routeUuid) {
305305
if (navigationSessionState != null && !navigationSessionState.sessionIdentifier().isEmpty()) {
306-
NavigationMetricsWrapper.routeRetrievalEvent(elapsedTime.getElapsedTime(), routeUuid,
306+
double time = elapsedTime.getElapsedTime();
307+
NavigationMetricsWrapper.routeRetrievalEvent(time, routeUuid,
307308
navigationSessionState.sessionIdentifier());
308309
} else {
309310
routeRetrievalElapsedTime = elapsedTime;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ class RouteRetrievalEvent extends NavigationPerformanceEvent implements Parcelab
99
private static final String ELAPSED_TIME_NAME = "elapsed_time";
1010
private static final String ROUTE_UUID_NAME = "route_uuid";
1111

12-
RouteRetrievalEvent(long elapsedTime, String routeUuid, String sessionId) {
12+
RouteRetrievalEvent(double elapsedTime, String routeUuid, String sessionId) {
1313
super(sessionId);
1414

15-
addCounter(new LongCounter(ELAPSED_TIME_NAME, elapsedTime));
15+
addCounter(new DoubleCounter(ELAPSED_TIME_NAME, elapsedTime));
1616
addAttribute(new Attribute(ROUTE_UUID_NAME, routeUuid));
1717
}
1818
}

0 commit comments

Comments
 (0)