Harden telemetry event dispatch (#8767)

* [android] - harden telemetry event dispatch

* fixup
This commit is contained in:
Tobrun
2017-04-20 16:18:35 +02:00
committed by GitHub
parent 9a9408e811
commit 86433dfd84
4 changed files with 66 additions and 18 deletions

View File

@@ -19,6 +19,7 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to
* Custom location source [#8710](https://github.com/mapbox/mapbox-gl-native/pull/8710)
* Expose source layer identifier [#8709](https://github.com/mapbox/mapbox-gl-native/pull/8709).
* Ensure surface is created after display and context [#8759](https://github.com/mapbox/mapbox-gl-native/pull/8759)
* Harden telemetry event dispatch [#8767](https://github.com/mapbox/mapbox-gl-native/pull/8767)
## 5.0.2 - April 3, 2017

View File

@@ -153,9 +153,9 @@ final class MapGestureDetector {
&& uiSettings.isZoomGesturesEnabled();
if (twoTap) {
// Confirmed 2nd Finger Down
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(event.getX(), event.getY()),
MapboxEvent.GESTURE_TWO_FINGER_SINGLETAP, transform.getZoom()));
MapboxEvent.GESTURE_TWO_FINGER_SINGLETAP, transform));
}
break;
@@ -184,8 +184,8 @@ final class MapGestureDetector {
// Scroll / Pan Has Stopped
if (scrollInProgress) {
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapDragEndEvent(
getLocationFromGesture(event.getX(), event.getY()), transform.getZoom()));
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapDragEndEvent(
getLocationFromGesture(event.getX(), event.getY()), transform));
scrollInProgress = false;
}
@@ -284,9 +284,9 @@ final class MapGestureDetector {
break;
}
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(e.getX(), e.getY()),
MapboxEvent.GESTURE_DOUBLETAP, transform.getZoom()));
MapboxEvent.GESTURE_DOUBLETAP, transform));
return true;
}
@@ -315,9 +315,9 @@ final class MapGestureDetector {
}
}
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(motionEvent.getX(), motionEvent.getY()),
MapboxEvent.GESTURE_SINGLETAP, transform.getZoom()));
MapboxEvent.GESTURE_SINGLETAP, transform));
return true;
}
@@ -377,9 +377,9 @@ final class MapGestureDetector {
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (!scrollInProgress) {
scrollInProgress = true;
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(e1.getX(), e1.getY()),
MapboxEvent.GESTURE_PAN_START, transform.getZoom()));
MapboxEvent.GESTURE_PAN_START, transform));
}
if (!trackingSettings.isScrollGestureCurrentlyEnabled()) {
return false;
@@ -421,9 +421,9 @@ final class MapGestureDetector {
scaleGestureOccurred = true;
beginTime = detector.getEventTime();
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(detector.getFocusX(), detector.getFocusY()),
MapboxEvent.GESTURE_PINCH_START, transform.getZoom()));
MapboxEvent.GESTURE_PINCH_START, transform));
return true;
}
@@ -513,9 +513,9 @@ final class MapGestureDetector {
}
beginTime = detector.getEventTime();
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(detector.getFocusX(), detector.getFocusY()),
MapboxEvent.GESTURE_ROTATION_START, transform.getZoom()));
MapboxEvent.GESTURE_ROTATION_START, transform));
return true;
}
@@ -594,9 +594,9 @@ final class MapGestureDetector {
}
beginTime = detector.getEventTime();
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapClickEvent(
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
getLocationFromGesture(detector.getFocusX(), detector.getFocusY()),
MapboxEvent.GESTURE_PITCH_START, transform.getZoom()));
MapboxEvent.GESTURE_PITCH_START, transform));
return true;
}

View File

@@ -36,7 +36,6 @@ import com.mapbox.mapboxsdk.maps.widgets.CompassView;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationView;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
import com.mapbox.services.android.telemetry.MapboxEvent;
import com.mapbox.services.android.telemetry.MapboxTelemetry;
import java.lang.annotation.Retention;
@@ -188,7 +187,7 @@ public class MapView extends FrameLayout {
@UiThread
public void onCreate(@Nullable Bundle savedInstanceState) {
if (savedInstanceState == null) {
MapboxTelemetry.getInstance().pushEvent(MapboxEvent.buildMapLoadEvent());
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapLoadEvent());
} else if (savedInstanceState.getBoolean(MapboxConstants.STATE_HAS_SAVED_STATE)) {
mapboxMap.onRestoreInstanceState(savedInstanceState);
}

View File

@@ -0,0 +1,48 @@
package com.mapbox.mapboxsdk.maps;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapbox.services.android.telemetry.MapboxEvent;
import java.util.Hashtable;
/**
* Wrapper class for MapboxEvent
* <p>
* Provides facility methods to use Transform and handle the case that the zoom, required for a telemetry event,
* isn't available yet.
* </p>
*/
class MapboxEventWrapper {
@Nullable
static Hashtable<String, Object> buildMapClickEvent(
@NonNull Location location, @NonNull String gestureId, Transform transform) {
try {
return MapboxEvent.buildMapClickEvent(location, gestureId, transform.getZoom());
} catch (NullPointerException exception) {
// Map/Transform is not ready yet #8650
// returning null is valid, event is ignored.
return null;
}
}
@Nullable
static Hashtable<String, Object> buildMapDragEndEvent(
@NonNull Location location, Transform transform) {
try {
return MapboxEvent.buildMapDragEndEvent(location, transform.getZoom());
} catch (NullPointerException exception) {
// Map/Transform is not ready yet #8650
// returning null is valid, event is ignored.
return null;
}
}
@Nullable
static Hashtable<String, Object> buildMapLoadEvent() {
return MapboxEvent.buildMapLoadEvent();
}
}