summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun@mapbox.com>2017-04-20 16:18:35 +0200
committerGitHub <noreply@github.com>2017-04-20 16:18:35 +0200
commit86433dfd849b964d3f503a73d24a7bbf5d73f2e8 (patch)
tree15d0edb6fd438de0fd6f1f01557b863ac2d52aa8
parent9a9408e8111bcdcd0fcb9a93112d61ab8fce0601 (diff)
downloadqtlocation-mapboxgl-86433dfd849b964d3f503a73d24a7bbf5d73f2e8.tar.gz
Harden telemetry event dispatch (#8767)
* [android] - harden telemetry event dispatch * fixup
-rw-r--r--platform/android/CHANGELOG.md1
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java32
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java3
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxEventWrapper.java48
4 files changed, 66 insertions, 18 deletions
diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md
index e94303fb15..bcf16bb629 100644
--- a/platform/android/CHANGELOG.md
+++ b/platform/android/CHANGELOG.md
@@ -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
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
index 85f6dc7e0e..dca833bbf4 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
@@ -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;
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
index fc7042f386..872802292c 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
@@ -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);
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxEventWrapper.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxEventWrapper.java
new file mode 100644
index 0000000000..97734de493
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxEventWrapper.java
@@ -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();
+ }
+}