summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkevin <kevin.li@mapbox.com>2019-04-03 15:51:09 +0800
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-04-18 16:00:12 +0200
commit023b314a99fb7ddca06b9b20cdac8e19249f7b58 (patch)
tree0c5f40fba72aef946475f8d21a965a311377b7dc
parentd5569f4b01ea82ebb9221ef9ed9df71ba8ba5dd9 (diff)
downloadqtlocation-mapboxgl-023b314a99fb7ddca06b9b20cdac8e19249f7b58.tar.gz
Add MapEventFactory
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java206
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java1
2 files changed, 206 insertions, 1 deletions
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
new file mode 100644
index 0000000000..7f96501d6b
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/MapEventFactory.java
@@ -0,0 +1,206 @@
+package com.mapbox.mapboxsdk.module.telemetry;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+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>() {
+ {
+ put(Configuration.ORIENTATION_LANDSCAPE, LANDSCAPE);
+ 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);
+ }
+ }
+
+ public Event createMapLoadEvent(Event.Type type) {
+ checkLoad(type);
+ return buildMapLoadEvent();
+ }
+
+ public Event createMapGestureEvent(Event.Type type, MapState mapState) {
+ checkGesture(type, mapState);
+ return BUILD_EVENT_MAP_GESTURE.get(type).build(mapState);
+ }
+
+ public Event createOfflineDownloadStartEvent(String shapeForOfflineRegion,
+ Double minZoom, Double maxZoom,
+ String styleURL) {
+
+ OfflineDownloadStartEvent offlineEvent =
+ new OfflineDownloadStartEvent(shapeForOfflineRegion, minZoom, maxZoom);
+ offlineEvent.setStyleURL(styleURL);
+ return offlineEvent;
+ }
+
+ public Event createOfflineDownloadCompleteEvent(String shapeForOfflineRegion,
+ Double minZoom, Double maxZoom,
+ String styleURL,
+ Long sizeOfResourcesCompleted,
+ Long numberOfTilesCompleted,
+ String state) {
+
+ OfflineDownloadEndEvent offlineEvent =
+ new OfflineDownloadEndEvent(shapeForOfflineRegion, minZoom, maxZoom);
+ offlineEvent.setStyleURL(styleURL);
+ offlineEvent.setSizeOfResourcesCompleted(sizeOfResourcesCompleted);
+ offlineEvent.setNumberOfTilesCompleted(numberOfTilesCompleted);
+ 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));
+
+ 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));
+
+ return mapDragendEvent;
+ }
+
+ private String obtainOrientation(Context context) {
+ return ORIENTATIONS.get(context.getResources().getConfiguration().orientation);
+ }
+
+ private float obtainAccessibilityFontScaleSize(Context context) {
+ return context.getResources().getConfiguration().fontScale;
+ }
+
+ private String obtainCellularCarrier(Context context) {
+ TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ String carrierName = manager.getNetworkOperatorName();
+
+ if (TextUtils.isEmpty(carrierName)) {
+ return NO_CARRIER;
+ }
+
+ return carrierName;
+ }
+
+ private float obtainDisplayDensity(Context context) {
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displayMetrics);
+
+ 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);
+ //noinspection MissingPermission
+ WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
+
+ return isWifiConnected(wifiMgr, wifiInfo);
+ } catch (Exception exception) {
+ return false;
+ }
+ }
+
+ private boolean isWifiConnected(WifiManager wifiMgr, WifiInfo wifiInfo) {
+ return wifiMgr.isWifiEnabled() && networkConnected(wifiInfo);
+ }
+
+ 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);
+ }
+ }
+
+ 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/TelemetryImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
index 697a51286f..b84c3db087 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
@@ -6,7 +6,6 @@ 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.MapEventFactory;
import com.mapbox.android.telemetry.MapState;
import com.mapbox.android.telemetry.MapboxTelemetry;
import com.mapbox.android.telemetry.TelemetryEnabler;