3838import java .util .TimerTask ;
3939import java .util .UUID ;
4040import java .util .Vector ;
41+ import java .util .concurrent .CopyOnWriteArrayList ;
4142
4243import okhttp3 .Call ;
4344import 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 ();
0 commit comments