summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkevin <kevin.li@mapbox.com>2019-04-04 13:46:01 +0800
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-04-18 16:00:12 +0200
commit55c8abfc61bb64e51e1524ca62d5f2667c8b7f7e (patch)
tree88b748e27494c281ba7a0239332719a793c857f6
parent023b314a99fb7ddca06b9b20cdac8e19249f7b58 (diff)
downloadqtlocation-mapboxgl-55c8abfc61bb64e51e1524ca62d5f2667c8b7f7e.tar.gz
Add map events
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapClickEvent.java122
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapDragendEvent.java117
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java135
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapLoadEvent.java162
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapState.java35
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadEndEvent.java108
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadStartEvent.java80
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java15
8 files changed, 664 insertions, 110 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapClickEvent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapClickEvent.java
new file mode 100644
index 0000000000..324aea16ca
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapClickEvent.java
@@ -0,0 +1,122 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+import android.content.Context;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.gson.annotations.SerializedName;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.TelemetryUtils;
+
+class MapClickEvent extends Event implements Parcelable {
+ private static final String MAP_CLICK = "map.click";
+
+ @SerializedName("event")
+ private final String event;
+ @SerializedName("created")
+ private String created;
+ @SerializedName("gesture")
+ private final String gesture;
+ @SerializedName("lat")
+ private double latitude;
+ @SerializedName("lng")
+ private double longitude;
+ @SerializedName("zoom")
+ private double zoom;
+ @SerializedName("orientation")
+ private String orientation = null;
+ @SerializedName("batteryLevel")
+ private Integer batteryLevel;
+ @SerializedName("pluggedIn")
+ private Boolean pluggedIn;
+ @SerializedName("carrier")
+ private String carrier = null;
+ @SerializedName("cellularNetworkType")
+ private String cellularNetworkType;
+ @SerializedName("wifi")
+ private Boolean wifi = null;
+
+ MapClickEvent(MapState mapState) {
+ this.event = MAP_CLICK;
+ this.gesture = mapState.getGesture();
+ this.latitude = mapState.getLatitude();
+ this.longitude = mapState.getLongitude();
+ this.zoom = mapState.getZoom();
+ this.created = TelemetryUtils.obtainCurrentDate();
+ this.batteryLevel = 0;
+ this.pluggedIn = false;
+ this.cellularNetworkType = "";
+ }
+
+ MapClickEvent setDeviceInfo(Context context) {
+ this.batteryLevel = TelemetryUtils.obtainBatteryLevel(context);
+ this.pluggedIn = TelemetryUtils.isPluggedIn(context);
+ this.cellularNetworkType = TelemetryUtils.obtainCellularNetworkType(context);
+ return this;
+ }
+
+ void setOrientation(String orientation) {
+ this.orientation = orientation;
+ }
+
+ void setCarrier(String carrier) {
+ this.carrier = carrier;
+ }
+
+ void setWifi(boolean wifi) {
+ this.wifi = wifi;
+ }
+
+ private MapClickEvent(Parcel in) {
+ event = in.readString();
+ created = in.readString();
+ gesture = in.readString();
+ latitude = in.readDouble();
+ longitude = in.readDouble();
+ zoom = in.readDouble();
+ orientation = in.readString();
+ batteryLevel = in.readInt();
+ pluggedIn = in.readByte() != 0x00;
+ carrier = in.readString();
+ cellularNetworkType = in.readString();
+ byte wifiVal = in.readByte();
+ wifi = wifiVal == 0x02 ? null : wifiVal != 0x00;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(event);
+ dest.writeString(created);
+ dest.writeString(gesture);
+ dest.writeDouble(latitude);
+ dest.writeDouble(longitude);
+ dest.writeDouble(zoom);
+ dest.writeString(orientation);
+ dest.writeInt(batteryLevel);
+ dest.writeByte((byte) (pluggedIn ? 0x01 : 0x00));
+ dest.writeString(carrier);
+ dest.writeString(cellularNetworkType);
+ if (wifi == null) {
+ dest.writeByte((byte) (0x02));
+ } else {
+ dest.writeByte((byte) (wifi ? 0x01 : 0x00));
+ }
+ }
+
+ public static final Creator<MapClickEvent> CREATOR = new Creator<MapClickEvent>() {
+ @Override
+ public MapClickEvent createFromParcel(Parcel in) {
+ return new MapClickEvent(in);
+ }
+
+ @Override
+ public MapClickEvent[] newArray(int size) {
+ return new MapClickEvent[size];
+ }
+ };
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapDragendEvent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapDragendEvent.java
new file mode 100644
index 0000000000..830617fb72
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapDragendEvent.java
@@ -0,0 +1,117 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+import android.content.Context;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.gson.annotations.SerializedName;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.TelemetryUtils;
+
+class MapDragendEvent extends Event implements Parcelable {
+ private static final String MAP_DRAGEND = "map.dragend";
+
+ @SerializedName("event")
+ private final String event;
+ @SerializedName("created")
+ private String created;
+ @SerializedName("lat")
+ private double latitude;
+ @SerializedName("lng")
+ private double longitude;
+ @SerializedName("zoom")
+ private double zoom;
+ @SerializedName("orientation")
+ private String orientation = null;
+ @SerializedName("batteryLevel")
+ private int batteryLevel;
+ @SerializedName("pluggedIn")
+ private Boolean pluggedIn;
+ @SerializedName("carrier")
+ private String carrier = null;
+ @SerializedName("cellularNetworkType")
+ private String cellularNetworkType;
+ @SerializedName("wifi")
+ private Boolean wifi = null;
+
+ MapDragendEvent(MapState mapState) {
+ this.event = MAP_DRAGEND;
+ this.latitude = mapState.getLatitude();
+ this.longitude = mapState.getLongitude();
+ this.zoom = mapState.getZoom();
+ this.created = TelemetryUtils.obtainCurrentDate();
+ this.batteryLevel = 0;
+ this.pluggedIn = false;
+ this.cellularNetworkType = "";
+ }
+
+ MapDragendEvent setDeviceInfo(Context context) {
+ this.batteryLevel = TelemetryUtils.obtainBatteryLevel(context);
+ this.pluggedIn = TelemetryUtils.isPluggedIn(context);
+ this.cellularNetworkType = TelemetryUtils.obtainCellularNetworkType(context);
+ return this;
+ }
+
+ void setOrientation(String orientation) {
+ this.orientation = orientation;
+ }
+
+ void setCarrier(String carrier) {
+ this.carrier = carrier;
+ }
+
+ void setWifi(boolean wifi) {
+ this.wifi = wifi;
+ }
+
+ private MapDragendEvent(Parcel in) {
+ event = in.readString();
+ created = in.readString();
+ latitude = in.readDouble();
+ longitude = in.readDouble();
+ zoom = in.readDouble();
+ orientation = in.readString();
+ batteryLevel = in.readInt();
+ pluggedIn = in.readByte() != 0x00;
+ carrier = in.readString();
+ cellularNetworkType = in.readString();
+ byte wifiVal = in.readByte();
+ wifi = wifiVal == 0x02 ? null : wifiVal != 0x00;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(event);
+ dest.writeString(created);
+ dest.writeDouble(latitude);
+ dest.writeDouble(longitude);
+ dest.writeDouble(zoom);
+ dest.writeString(orientation);
+ dest.writeInt(batteryLevel);
+ dest.writeByte((byte) (pluggedIn ? 0x01 : 0x00));
+ dest.writeString(carrier);
+ dest.writeString(cellularNetworkType);
+ if (wifi == null) {
+ dest.writeByte((byte) (0x02));
+ } else {
+ dest.writeByte((byte) (wifi ? 0x01 : 0x00));
+ }
+ }
+
+ public static final Creator<MapDragendEvent> CREATOR = new Creator<MapDragendEvent>() {
+ @Override
+ public MapDragendEvent createFromParcel(Parcel in) {
+ return new MapDragendEvent(in);
+ }
+
+ @Override
+ public MapDragendEvent[] newArray(int size) {
+ return new MapDragendEvent[size];
+ }
+ };
+} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java
index 7f96501d6b..ecca20dada 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java
@@ -4,36 +4,23 @@ import android.content.Context;
import android.content.res.Configuration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
+import android.support.annotation.NonNull;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import com.mapbox.android.telemetry.Event;
-import com.mapbox.android.telemetry.MapBuildEvent;
-import com.mapbox.android.telemetry.MapClickEvent;
-import com.mapbox.android.telemetry.MapDragendEvent;
-import com.mapbox.android.telemetry.MapLoadEvent;
-import com.mapbox.android.telemetry.MapState;
-import com.mapbox.android.telemetry.MapboxTelemetry;
-import com.mapbox.android.telemetry.OfflineDownloadEndEvent;
-import com.mapbox.android.telemetry.OfflineDownloadStartEvent;
import com.mapbox.android.telemetry.TelemetryUtils;
import java.util.HashMap;
import java.util.Map;
public class MapEventFactory {
- private static final String APPLICATION_CONTEXT_CANT_BE_NULL = "Create a MapboxTelemetry instance before calling "
- + "this method.";
private static final String LANDSCAPE = "Landscape";
private static final String PORTRAIT = "Portrait";
private static final String NO_CARRIER = "EMPTY_CARRIER";
private static final int NO_NETWORK = -1;
- private static final String NOT_A_LOAD_MAP_EVENT_TYPE = "Type must be a load map event.";
- private static final String NOT_A_GESTURE_MAP_EVENT_TYPE = "Type must be a gesture map event.";
- private static final String NOT_OFFLINEDOWNLOAD_EVENT_TYPE = "Type must be an offline download map event.";
- private static final String MAP_STATE_ILLEGAL_NULL = "MapState cannot be null.";
private static final Map<Integer, String> ORIENTATIONS = new HashMap<Integer, String>() {
{
@@ -41,42 +28,27 @@ public class MapEventFactory {
put(Configuration.ORIENTATION_PORTRAIT, PORTRAIT);
}
};
- private final Map<Event.Type, MapBuildEvent> BUILD_EVENT_MAP_GESTURE = new HashMap<Event.Type, MapBuildEvent>() {
- {
- put(Event.Type.MAP_CLICK, new MapBuildEvent() {
- @Override
- public Event build(MapState mapState) {
- return buildMapClickEvent(mapState);
- }
- });
- put(Event.Type.MAP_DRAGEND, new MapBuildEvent() {
- @Override
- public Event build(MapState mapState) {
- return buildMapDragendEvent(mapState);
- }
- });
- }
- };
- public MapEventFactory() {
- if (MapboxTelemetry.applicationContext == null) {
- throw new IllegalStateException(APPLICATION_CONTEXT_CANT_BE_NULL);
- }
- }
+ private final Context appContext;
- public Event createMapLoadEvent(Event.Type type) {
- checkLoad(type);
- return buildMapLoadEvent();
+ MapEventFactory(Context appContext) {
+ this.appContext = appContext;
}
- public Event createMapGestureEvent(Event.Type type, MapState mapState) {
- checkGesture(type, mapState);
- return BUILD_EVENT_MAP_GESTURE.get(type).build(mapState);
+ Event buildMapLoadEvent() {
+ String userId = TelemetryUtils.retrieveVendorId();
+ MapLoadEvent mapLoadEvent = new MapLoadEvent(userId).setDeviceInfo(appContext);
+ mapLoadEvent.setOrientation(obtainOrientation(appContext));
+ mapLoadEvent.setAccessibilityFontScale(obtainAccessibilityFontScaleSize(appContext));
+ mapLoadEvent.setCarrier(obtainCellularCarrier(appContext));
+ mapLoadEvent.setResolution(obtainDisplayDensity(appContext));
+ mapLoadEvent.setWifi(isConnectedToWifi(appContext));
+ return mapLoadEvent;
}
- public Event createOfflineDownloadStartEvent(String shapeForOfflineRegion,
- Double minZoom, Double maxZoom,
- String styleURL) {
+ Event buildOfflineDownloadStartEvent(String shapeForOfflineRegion,
+ Double minZoom, Double maxZoom,
+ String styleURL) {
OfflineDownloadStartEvent offlineEvent =
new OfflineDownloadStartEvent(shapeForOfflineRegion, minZoom, maxZoom);
@@ -84,12 +56,12 @@ public class MapEventFactory {
return offlineEvent;
}
- public Event createOfflineDownloadCompleteEvent(String shapeForOfflineRegion,
- Double minZoom, Double maxZoom,
- String styleURL,
- Long sizeOfResourcesCompleted,
- Long numberOfTilesCompleted,
- String state) {
+ public Event buildOfflineDownloadCompleteEvent(String shapeForOfflineRegion,
+ Double minZoom, Double maxZoom,
+ String styleURL,
+ Long sizeOfResourcesCompleted,
+ Long numberOfTilesCompleted,
+ String state) {
OfflineDownloadEndEvent offlineEvent =
new OfflineDownloadEndEvent(shapeForOfflineRegion, minZoom, maxZoom);
@@ -99,20 +71,20 @@ public class MapEventFactory {
return offlineEvent;
}
- private MapClickEvent buildMapClickEvent(MapState mapState) {
- MapClickEvent mapClickEvent = new MapClickEvent(mapState).setDeviceInfo(MapboxTelemetry.applicationContext);
- mapClickEvent.setOrientation(obtainOrientation(MapboxTelemetry.applicationContext));
- mapClickEvent.setCarrier(obtainCellularCarrier(MapboxTelemetry.applicationContext));
- mapClickEvent.setWifi(obtainConnectedToWifi(MapboxTelemetry.applicationContext));
+ MapClickEvent buildMapClickEvent(@NonNull MapState mapState) {
+ MapClickEvent mapClickEvent = new MapClickEvent(mapState).setDeviceInfo(appContext);
+ mapClickEvent.setOrientation(obtainOrientation(appContext));
+ mapClickEvent.setCarrier(obtainCellularCarrier(appContext));
+ mapClickEvent.setWifi(isConnectedToWifi(appContext));
return mapClickEvent;
}
- private MapDragendEvent buildMapDragendEvent(MapState mapState) {
- MapDragendEvent mapDragendEvent = new MapDragendEvent(mapState).setDeviceInfo(MapboxTelemetry.applicationContext);
- mapDragendEvent.setOrientation(obtainOrientation(MapboxTelemetry.applicationContext));
- mapDragendEvent.setCarrier(obtainCellularCarrier(MapboxTelemetry.applicationContext));
- mapDragendEvent.setWifi(obtainConnectedToWifi(MapboxTelemetry.applicationContext));
+ MapDragendEvent buildMapDragendEvent(@NonNull MapState mapState) {
+ MapDragendEvent mapDragendEvent = new MapDragendEvent(mapState).setDeviceInfo(appContext);
+ mapDragendEvent.setOrientation(obtainOrientation(appContext));
+ mapDragendEvent.setCarrier(obtainCellularCarrier(appContext));
+ mapDragendEvent.setWifi(isConnectedToWifi(appContext));
return mapDragendEvent;
}
@@ -127,6 +99,7 @@ public class MapEventFactory {
private String obtainCellularCarrier(Context context) {
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ if(manager == null) return NO_CARRIER;
String carrierName = manager.getNetworkOperatorName();
if (TextUtils.isEmpty(carrierName)) {
@@ -143,10 +116,6 @@ public class MapEventFactory {
return displayMetrics.density;
}
- private Boolean obtainConnectedToWifi(Context context) {
- return isConnectedToWifi(context);
- }
-
private boolean isConnectedToWifi(Context context) {
try {
WifiManager wifiMgr = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
@@ -164,43 +133,7 @@ public class MapEventFactory {
}
private boolean networkConnected(WifiInfo wifiInfo) {
- if (wifiInfo.getNetworkId() != NO_NETWORK) {
- return true;
- }
- return false;
- }
-
- private MapLoadEvent buildMapLoadEvent() {
- String userId = TelemetryUtils.retrieveVendorId();
- MapLoadEvent mapLoadEvent = new MapLoadEvent(userId).setDeviceInfo(MapboxTelemetry.applicationContext);
- mapLoadEvent.setOrientation(obtainOrientation(MapboxTelemetry.applicationContext));
- mapLoadEvent.setAccessibilityFontScale(obtainAccessibilityFontScaleSize(MapboxTelemetry.applicationContext));
- mapLoadEvent.setCarrier(obtainCellularCarrier(MapboxTelemetry.applicationContext));
- mapLoadEvent.setResolution(obtainDisplayDensity(MapboxTelemetry.applicationContext));
- mapLoadEvent.setWifi(obtainConnectedToWifi(MapboxTelemetry.applicationContext));
- return mapLoadEvent;
- }
-
- private void checkLoad(Event.Type type) {
- if (type != Event.Type.MAP_LOAD) {
- throw new IllegalArgumentException(NOT_A_LOAD_MAP_EVENT_TYPE);
- }
- }
-
- private void checkGesture(Event.Type type, MapState mapState) {
- checkGestureMapEvent(type);
- isNotNull(mapState);
- }
-
- private void checkGestureMapEvent(Event.Type type) {
- if (!Event.mapGestureEventTypes.contains(type)) {
- throw new IllegalArgumentException(NOT_A_GESTURE_MAP_EVENT_TYPE);
- }
+ return wifiInfo.getNetworkId() != NO_NETWORK;
}
- private void isNotNull(MapState mapState) {
- if (mapState == null) {
- throw new IllegalArgumentException(MAP_STATE_ILLEGAL_NULL);
- }
- }
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapLoadEvent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapLoadEvent.java
new file mode 100644
index 0000000000..132b620086
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapLoadEvent.java
@@ -0,0 +1,162 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+import android.content.Context;
+import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.gson.annotations.SerializedName;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.TelemetryUtils;
+
+class MapLoadEvent extends Event implements Parcelable {
+ private static final String MAP_LOAD = "map.load";
+ private static final String OPERATING_SYSTEM = "Android - " + Build.VERSION.RELEASE;
+
+ @SerializedName("event")
+ private final String event;
+ @SerializedName("created")
+ private String created;
+ @SerializedName("userId")
+ private String userId;
+ @SerializedName("model")
+ private String model = null;
+ @SerializedName("operatingSystem")
+ private String operatingSystem = null;
+ @SerializedName("resolution")
+ private Float resolution = null;
+ @SerializedName("accessibilityFontScale")
+ private Float accessibilityFontScale = null;
+ @SerializedName("orientation")
+ private String orientation = null;
+ @SerializedName("batteryLevel")
+ private Integer batteryLevel;
+ @SerializedName("pluggedIn")
+ private Boolean pluggedIn;
+ @SerializedName("carrier")
+ private String carrier = null;
+ @SerializedName("cellularNetworkType")
+ private String cellularNetworkType;
+ @SerializedName("wifi")
+ private Boolean wifi = null;
+ @SerializedName("sdkIdentifier")
+ private String sdkIdentifier = null;
+ @SerializedName("sdkVersion")
+ private String sdkVersion = null;
+
+ MapLoadEvent(String userId) {
+ this.event = MAP_LOAD;
+ this.model = Build.MODEL;
+ this.operatingSystem = OPERATING_SYSTEM;
+ this.created = TelemetryUtils.obtainCurrentDate();
+ this.userId = userId;
+ this.batteryLevel = 0;
+ this.pluggedIn = false;
+ this.cellularNetworkType = "";
+ }
+
+ MapLoadEvent setDeviceInfo(Context context) {
+ this.batteryLevel = TelemetryUtils.obtainBatteryLevel(context);
+ this.pluggedIn = TelemetryUtils.isPluggedIn(context);
+ this.cellularNetworkType = TelemetryUtils.obtainCellularNetworkType(context);
+ return this;
+ }
+
+ void setResolution(float resolution) {
+ this.resolution = resolution;
+ }
+
+ void setAccessibilityFontScale(float accessibilityFontScale) {
+ this.accessibilityFontScale = accessibilityFontScale;
+ }
+
+ void setOrientation(String orientation) {
+ this.orientation = orientation;
+ }
+
+ void setCarrier(String carrier) {
+ this.carrier = carrier;
+ }
+
+ void setWifi(boolean wifi) {
+ this.wifi = wifi;
+ }
+
+ void setSdkIdentifier(String sdkIdentifier) {
+ this.sdkIdentifier = sdkIdentifier;
+ }
+
+ void setSdkVersion(String sdkVersion) {
+ this.sdkVersion = sdkVersion;
+ }
+
+ private MapLoadEvent(Parcel in) {
+ event = in.readString();
+ created = in.readString();
+ userId = in.readString();
+ model = in.readString();
+ operatingSystem = in.readString();
+ resolution = in.readByte() == 0x00 ? null : in.readFloat();
+ accessibilityFontScale = in.readByte() == 0x00 ? null : in.readFloat();
+ orientation = in.readString();
+ batteryLevel = in.readInt();
+ pluggedIn = in.readByte() != 0x00;
+ carrier = in.readString();
+ cellularNetworkType = in.readString();
+ byte wifiVal = in.readByte();
+ wifi = wifiVal == 0x02 ? null : wifiVal != 0x00;
+ sdkIdentifier = in.readString();
+ sdkVersion = in.readString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(event);
+ dest.writeString(created);
+ dest.writeString(userId);
+ dest.writeString(model);
+ dest.writeString(operatingSystem);
+ if (resolution == null) {
+ dest.writeByte((byte) (0x00));
+ } else {
+ dest.writeByte((byte) (0x01));
+ dest.writeFloat(resolution);
+ }
+ if (accessibilityFontScale == null) {
+ dest.writeByte((byte) (0x00));
+ } else {
+ dest.writeByte((byte) (0x01));
+ dest.writeFloat(accessibilityFontScale);
+ }
+ dest.writeString(orientation);
+ dest.writeInt(batteryLevel);
+ dest.writeByte((byte) (pluggedIn ? 0x01 : 0x00));
+ dest.writeString(carrier);
+ dest.writeString(cellularNetworkType);
+ if (wifi == null) {
+ dest.writeByte((byte) (0x02));
+ } else {
+ dest.writeByte((byte) (wifi ? 0x01 : 0x00));
+ }
+ dest.writeString(sdkIdentifier);
+ dest.writeString(sdkVersion);
+ }
+
+ @SuppressWarnings("unused")
+ public static final Creator<MapLoadEvent> CREATOR = new Creator<MapLoadEvent>() {
+ @Override
+ public MapLoadEvent createFromParcel(Parcel in) {
+ return new MapLoadEvent(in);
+ }
+
+ @Override
+ public MapLoadEvent[] newArray(int size) {
+ return new MapLoadEvent[size];
+ }
+ };
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapState.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapState.java
new file mode 100644
index 0000000000..507ed2906f
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapState.java
@@ -0,0 +1,35 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+public class MapState {
+ private double latitude;
+ private double longitude;
+ private double zoom;
+ private String gesture;
+
+ public MapState(double latitude, double longitude, double zoom) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ this.zoom = zoom;
+ }
+
+ public void setGesture(String gesture) {
+ this.gesture = gesture;
+ }
+
+ String getGesture() {
+ return gesture;
+ }
+
+ double getLatitude() {
+ return latitude;
+ }
+
+ double getLongitude() {
+ return longitude;
+ }
+
+ double getZoom() {
+ return zoom;
+ }
+}
+
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadEndEvent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadEndEvent.java
new file mode 100644
index 0000000000..71d59eb3bb
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadEndEvent.java
@@ -0,0 +1,108 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.gson.annotations.SerializedName;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.TelemetryUtils;
+
+
+public class OfflineDownloadEndEvent extends Event implements Parcelable {
+
+ private static final String OFFLINE_DOWNLOAD_COMPLETE = "map.offlineDownload.end";
+
+ @SerializedName("event")
+ private final String event;
+
+ @SerializedName("created")
+ private final String created;
+
+ @SerializedName("minZoom")
+ private final Double minZoom;
+
+ @SerializedName("maxZoom")
+ private final Double maxZoom;
+
+ @SerializedName("shapeForOfflineRegion")
+ private final String shapeForOfflineRegion;
+
+ @SerializedName("styleURL")
+ private String styleURL;
+
+ @SerializedName("sizeOfResourcesCompleted")
+ private Long sizeOfResourcesCompleted;
+
+ @SerializedName("numberOfTilesCompleted")
+ private Long numberOfTilesCompleted;
+
+ @SerializedName("state")
+ private String state;
+
+ public void setStyleURL(String styleURL) {
+ this.styleURL = styleURL;
+ }
+
+ public void setSizeOfResourcesCompleted(Long sizeOfResourcesCompleted) {
+ this.sizeOfResourcesCompleted = sizeOfResourcesCompleted;
+ }
+
+ public void setNumberOfTilesCompleted(Long numberOfTilesCompleted) {
+ this.numberOfTilesCompleted = numberOfTilesCompleted;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ OfflineDownloadEndEvent(String shapeForOfflineRegion, Double minZoom, Double maxZoom) {
+ this.event = OFFLINE_DOWNLOAD_COMPLETE;
+ this.created = TelemetryUtils.obtainCurrentDate();
+ this.shapeForOfflineRegion = shapeForOfflineRegion;
+ this.minZoom = minZoom;
+ this.maxZoom = maxZoom;
+ }
+
+ private OfflineDownloadEndEvent(Parcel in) {
+ event = in.readString();
+ created = in.readString();
+ shapeForOfflineRegion = in.readString();
+ minZoom = in.readDouble();
+ maxZoom = in.readDouble();
+ styleURL = in.readString();
+ sizeOfResourcesCompleted = in.readLong();
+ numberOfTilesCompleted = in.readLong();
+ state = in.readString();
+
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(event);
+ dest.writeString(created);
+ dest.writeString(shapeForOfflineRegion);
+ dest.writeDouble(minZoom);
+ dest.writeDouble(maxZoom);
+ dest.writeString(styleURL);
+ dest.writeLong(sizeOfResourcesCompleted);
+ dest.writeLong(numberOfTilesCompleted);
+ dest.writeString(state);
+ }
+
+ public static final Creator<OfflineDownloadEndEvent> CREATOR = new Creator<OfflineDownloadEndEvent>() {
+ @Override
+ public OfflineDownloadEndEvent createFromParcel(Parcel in) {
+ return new OfflineDownloadEndEvent(in);
+ }
+
+ @Override
+ public OfflineDownloadEndEvent[] newArray(int size) {
+ return new OfflineDownloadEndEvent[size];
+ }
+ };
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadStartEvent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadStartEvent.java
new file mode 100644
index 0000000000..a7f28ac371
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/OfflineDownloadStartEvent.java
@@ -0,0 +1,80 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.gson.annotations.SerializedName;
+import com.mapbox.android.telemetry.Event;
+import com.mapbox.android.telemetry.TelemetryUtils;
+
+
+public class OfflineDownloadStartEvent extends Event implements Parcelable {
+
+ private static final String OFFLINE_DOWNLOAD_START = "map.offlineDownload.start";
+
+ @SerializedName("event")
+ private final String event;
+
+ @SerializedName("created")
+ private final String created;
+
+ @SerializedName("minZoom")
+ private final Double minZoom;
+
+ @SerializedName("maxZoom")
+ private final Double maxZoom;
+
+ @SerializedName("shapeForOfflineRegion")
+ private final String shapeForOfflineRegion;
+
+ @SerializedName("styleURL")
+ private String styleURL;
+
+ public void setStyleURL(String styleURL) {
+ this.styleURL = styleURL;
+ }
+
+ OfflineDownloadStartEvent(String shapeForOfflineRegion, Double minZoom, Double maxZoom) {
+ this.event = OFFLINE_DOWNLOAD_START;
+ this.created = TelemetryUtils.obtainCurrentDate();
+ this.shapeForOfflineRegion = shapeForOfflineRegion;
+ this.minZoom = minZoom;
+ this.maxZoom = maxZoom;
+ }
+
+ private OfflineDownloadStartEvent(Parcel in) {
+ event = in.readString();
+ created = in.readString();
+ shapeForOfflineRegion = in.readString();
+ minZoom = in.readDouble();
+ maxZoom = in.readDouble();
+ styleURL = in.readString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(event);
+ dest.writeString(created);
+ dest.writeString(shapeForOfflineRegion);
+ dest.writeDouble(minZoom);
+ dest.writeDouble(maxZoom);
+ dest.writeString(styleURL);
+ }
+
+ public static final Creator<OfflineDownloadStartEvent> CREATOR = new Creator<OfflineDownloadStartEvent>() {
+ @Override
+ public OfflineDownloadStartEvent createFromParcel(Parcel in) {
+ return new OfflineDownloadStartEvent(in);
+ }
+
+ @Override
+ public OfflineDownloadStartEvent[] newArray(int size) {
+ return new OfflineDownloadStartEvent[size];
+ }
+ };
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
index b84c3db087..d860180646 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
@@ -5,8 +5,6 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapbox.android.telemetry.AppUserTurnstile;
-import com.mapbox.android.telemetry.Event;
-import com.mapbox.android.telemetry.MapState;
import com.mapbox.android.telemetry.MapboxTelemetry;
import com.mapbox.android.telemetry.TelemetryEnabler;
import com.mapbox.android.telemetry.SessionInterval;
@@ -23,7 +21,7 @@ public class TelemetryImpl implements TelemetryDefinition {
@Nullable
private MapboxTelemetry telemetry;
-
+ private MapEventFactory mapEventFactory;
public TelemetryImpl() {
Context appContext = Mapbox.getApplicationContext();
String accessToken = Mapbox.getAccessToken();
@@ -32,6 +30,8 @@ public class TelemetryImpl implements TelemetryDefinition {
if (TelemetryEnabler.State.ENABLED.equals(telemetryState)) {
telemetry.enable();
}
+ mapEventFactory = new MapEventFactory(appContext);
+
}
/**
@@ -42,8 +42,7 @@ public class TelemetryImpl implements TelemetryDefinition {
AppUserTurnstile turnstileEvent = new AppUserTurnstile(BuildConfig.MAPBOX_SDK_IDENTIFIER,
BuildConfig.MAPBOX_SDK_VERSION);
telemetry.push(turnstileEvent);
- MapEventFactory mapEventFactory = new MapEventFactory();
- telemetry.push(mapEventFactory.createMapLoadEvent(Event.Type.MAP_LOAD));
+ telemetry.push(mapEventFactory.buildMapLoadEvent());
}
/**
@@ -56,10 +55,9 @@ public class TelemetryImpl implements TelemetryDefinition {
*/
@Override
public void onGestureInteraction(String eventType, double latitude, double longitude, double zoom) {
- MapEventFactory mapEventFactory = new MapEventFactory();
MapState state = new MapState(latitude, longitude, zoom);
state.setGesture(eventType);
- telemetry.push(mapEventFactory.createMapGestureEvent(Event.Type.MAP_CLICK, state));
+ telemetry.push(mapEventFactory.buildMapClickEvent(state));
}
/**
@@ -99,8 +97,7 @@ public class TelemetryImpl implements TelemetryDefinition {
@Override
public void onCreateOfflineRegion(@NonNull OfflineRegionDefinition offlineDefinition) {
- MapEventFactory mapEventFactory = new MapEventFactory();
- telemetry.push(mapEventFactory.createOfflineDownloadStartEvent(
+ telemetry.push(mapEventFactory.buildOfflineDownloadStartEvent(
offlineDefinition instanceof OfflineTilePyramidRegionDefinition ? "tileregion" : "shaperegion",
offlineDefinition.getMinZoom(),
offlineDefinition.getMaxZoom(),