Skip to content

Commit 7e05757

Browse files
authored
add a TelemetryListener and its API (#372)
1 parent aa07f03 commit 7e05757

2 files changed

Lines changed: 51 additions & 3 deletions

File tree

mapbox/libandroid-telemetry/src/main/java/com/mapbox/services/android/telemetry/MapboxTelemetry.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.TimerTask;
3939
import java.util.UUID;
4040
import java.util.Vector;
41+
import java.util.concurrent.CopyOnWriteArrayList;
4142

4243
import okhttp3.Call;
4344
import okhttp3.Callback;
@@ -68,6 +69,7 @@ public class MapboxTelemetry implements Callback, LocationEngineListener {
6869
private LocationEngine locationEngine = null;
6970
private boolean withShutDown = false;
7071
private Boolean telemetryEnabled = null;
72+
protected CopyOnWriteArrayList<TelemetryListener> telemetryListeners;
7173

7274
/**
7375
* Private constructor for configuring the single instance per app.
@@ -122,6 +124,7 @@ public void initialize(@NonNull Context context, @NonNull String accessToken, @N
122124
+ "For more information, please visit https://www.mapbox.com/android-sdk.");
123125
}
124126

127+
this.telemetryListeners = new CopyOnWriteArrayList<>();
125128
validateTelemetryServiceConfigured();
126129
setupHttpClient();
127130
checkStagingServerInformation();
@@ -133,6 +136,16 @@ public void initialize(@NonNull Context context, @NonNull String accessToken, @N
133136
initialized = true;
134137
}
135138

139+
public void addTelemetryListener(TelemetryListener listener) {
140+
if (!this.telemetryListeners.contains(listener)) {
141+
this.telemetryListeners.add(listener);
142+
}
143+
}
144+
145+
public boolean removeTelemetryListener(TelemetryListener listener) {
146+
return this.telemetryListeners.remove(listener);
147+
}
148+
136149
/**
137150
* Checks that TelemetryService has been configured by developer
138151
*/
@@ -500,6 +513,9 @@ private void flushEventsQueueImmediately(boolean hasTurnstileEvent) {
500513
boolean doRequest = hasTurnstileEvent || isReadyForEvent();
501514
if (events.size() > 0 && ConnectivityReceiver.isConnected(context) && doRequest) {
502515
client.sendEvents(events, this);
516+
for (TelemetryListener listener : telemetryListeners) {
517+
listener.onSendEvents(events.size());
518+
}
503519
} else if (withShutDown) {
504520
shutdownTelemetry();
505521
}
@@ -525,7 +541,9 @@ private void pushTurnstileEvent() {
525541
*/
526542
@Override
527543
public void onFailure(Call call, IOException e) {
528-
Log.v(LOG_TAG, "HTTP request failed: %s", e);
544+
for (TelemetryListener listener : telemetryListeners) {
545+
listener.onHttpFailure(e.getMessage());
546+
}
529547

530548
// Make sure that events don't pile up (e.g. offline) and thus impact available memory over time.
531549
events.removeAllElements();
@@ -547,8 +565,9 @@ public void onFailure(Call call, IOException e) {
547565
*/
548566
@Override
549567
public void onResponse(Call call, Response response) throws IOException {
550-
String result = response.isSuccessful() ? "succeeded" : "failed";
551-
Log.v(LOG_TAG, String.format("HTTP request %s (%d).", result, response.code()));
568+
for (TelemetryListener listener : telemetryListeners) {
569+
listener.onHttpResponse(response.isSuccessful(), response.code());
570+
}
552571

553572
// Make sure that events don't pile up (e.g. offline) and thus impact available memory over time.
554573
events.removeAllElements();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.mapbox.services.android.telemetry;
2+
3+
/**
4+
* A callback for Telemetry events
5+
*/
6+
public interface TelemetryListener {
7+
8+
/**
9+
* Invoked when sending a new batch of events.
10+
*
11+
* @param size the number of events being sent
12+
*/
13+
void onSendEvents(int size);
14+
15+
/**
16+
* Invoked when we obtain a HTTP response.
17+
*
18+
* @param successful whether the request was successful
19+
* @param code the HTTP code of the response
20+
*/
21+
void onHttpResponse(boolean successful, int code);
22+
23+
/**
24+
* Invoked when the HTTP request fails.
25+
*
26+
* @param message the error message
27+
*/
28+
void onHttpFailure(String message);
29+
}

0 commit comments

Comments
 (0)