diff options
author | Guardiola31337 <pablo.guardiola@mapbox.com> | 2017-12-19 19:01:40 +0100 |
---|---|---|
committer | Guardiola31337 <pablo.guardiola@mapbox.com> | 2017-12-19 19:01:40 +0100 |
commit | 52fb636a3bd0c33816857df7c58305abd35ab921 (patch) | |
tree | dce97f17c47e3e041c86e832e69aaf8641e6224a | |
parent | f242227a677880298429b26b1e6fc3a2d33a046f (diff) | |
download | qtlocation-mapboxgl-52fb636a3bd0c33816857df7c58305abd35ab921.tar.gz |
[android] [DO NOT MERGE] quick and dirty integration of the new events library
23 files changed, 277 insertions, 72 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index ce886b1001..a52319a120 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -19,7 +19,6 @@ dependencies { // Mapbox Android Services (Telemetry support) compile(rootProject.ext.dep.mapboxAndroidTelemetry) { - transitive = true exclude group: 'com.android.support' } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/EmptyLocationSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/EmptyLocationSource.java index 8ea7e61eee..d24ed5a113 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/EmptyLocationSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/EmptyLocationSource.java @@ -5,8 +5,8 @@ import android.location.Location; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.location.LocationSource; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngineListener; class EmptyLocationSource extends LocationSource { diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java index 357bcd5f99..9393fb09a3 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java @@ -12,11 +12,16 @@ import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException; import com.mapbox.mapboxsdk.location.LocationSource; import com.mapbox.mapboxsdk.net.ConnectivityReceiver; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEnginePriority; -import com.mapbox.services.android.telemetry.location.LocationEngineProvider; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEnginePriority; +import com.mapbox.services.android.core.location.LocationEngineProvider; import com.mapbox.services.android.telemetry.MapboxTelemetry; +import java.io.IOException; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; import timber.log.Timber; /** @@ -36,6 +41,7 @@ public final class Mapbox { private String accessToken; private Boolean connected; private LocationEngine locationEngine; + private static MapboxTelemetry mapboxTelemetry; /** * Get an instance of Mapbox. @@ -57,12 +63,22 @@ public final class Mapbox { locationEngine.setPriority(LocationEnginePriority.NO_POWER); try { - MapboxTelemetry.getInstance().initialize( - appContext, accessToken, BuildConfig.MAPBOX_EVENTS_USER_AGENT, locationEngine); + mapboxTelemetry = new MapboxTelemetry(appContext, accessToken, BuildConfig.MAPBOX_EVENTS_USER_AGENT, + new Callback() { + @Override + public void onFailure(Call call, IOException exception) { + Timber.d(exception, "Mapbox telemetry request failed"); + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Timber.d("Mapbox telemetry response: ", response); + } + }); + mapboxTelemetry.enable(); } catch (Exception exception) { Timber.e(exception, "Unable to instantiate Mapbox telemetry"); } - ConnectivityReceiver.instance(appContext); } return INSTANCE; @@ -165,4 +181,8 @@ public final class Mapbox { public static LocationEngine getLocationEngine() { return INSTANCE.locationEngine; } + + public static MapboxTelemetry obtainMapboxTelemetry() { + return INSTANCE.mapboxTelemetry; + } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java index c2f19072db..e732b2525f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java @@ -8,7 +8,7 @@ import android.support.annotation.FloatRange; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.services.android.telemetry.utils.MathUtils; +import com.mapbox.mapboxsdk.utils.MathUtils; /** * Resembles the position, angle, zoom and tilt of the user's viewpoint. diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/GeoConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/GeoConstants.java new file mode 100644 index 0000000000..0065140a8a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/GeoConstants.java @@ -0,0 +1,40 @@ +package com.mapbox.mapboxsdk.geometry; + +// TODO Remove this class if we finally include it within MAS 3.x (GeoJSON) +/** + * GeoConstants exposes constants for doing locational calculations on Earth + */ +public class GeoConstants { + + /** + * The <a href='http://en.wikipedia.org/wiki/Earth_radius#Equatorial_radius'>equatorial radius</a> + * value in meters + */ + public static final int RADIUS_EARTH_METERS = 6378137; + + /** + * The minimum latitude on Earth. This is the minimum latitude representable + * by Mapbox GL's Mercator projection, because the projection distorts latitude + * near the poles towards infinity. + */ + public static final double MIN_LATITUDE = -85.05112878; + + /** + * The maximum latitude on Earth. This is the maximum latitude representable + * by Mapbox GL's Mercator projection, because the projection distorts latitude + * near the poles towards infinity. + */ + public static final double MAX_LATITUDE = 85.05112878; + + /** + * The minimum longitude on Earth + */ + public static final double MIN_LONGITUDE = -180; + + /** + * The maximum longitude on Earth + */ + public static final double MAX_LONGITUDE = 180; + +} + diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLng.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLng.java index eb57241196..ec2ac19e26 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLng.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLng.java @@ -5,8 +5,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.FloatRange; -import com.mapbox.services.android.telemetry.constants.GeoConstants; -import com.mapbox.services.android.telemetry.utils.MathUtils; +import com.mapbox.mapboxsdk.utils.MathUtils; /** * A geographical location which contains a single latitude, longitude pair, with diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java index 4fcb91033c..aa07bcf4d7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java @@ -6,7 +6,6 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.exceptions.InvalidLatLngBoundsException; -import com.mapbox.services.android.telemetry.constants.GeoConstants; import java.util.ArrayList; import java.util.List; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java index 1313587158..a8111303c6 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java @@ -5,9 +5,9 @@ import android.location.Location; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; -import com.mapbox.services.android.telemetry.location.LocationEnginePriority; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEnginePriority; import com.mapzen.android.lost.api.LocationListener; import com.mapzen.android.lost.api.LocationRequest; import com.mapzen.android.lost.api.LocationServices; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java index 2956d864e6..bca0f35dbd 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java @@ -10,12 +10,13 @@ import android.support.annotation.NonNull; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Toast; + +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.attribution.Attribution; import com.mapbox.mapboxsdk.attribution.AttributionParser; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.style.sources.Source; -import com.mapbox.services.android.telemetry.MapboxTelemetry; import java.util.ArrayList; import java.util.List; @@ -89,7 +90,7 @@ class AttributionDialogManager implements View.OnClickListener, DialogInterface. builder.setPositiveButton(R.string.mapbox_attributionTelemetryPositive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - MapboxTelemetry.getInstance().setTelemetryEnabled(true); + Mapbox.obtainMapboxTelemetry().optIn(); dialog.cancel(); } }); @@ -103,7 +104,7 @@ class AttributionDialogManager implements View.OnClickListener, DialogInterface. builder.setNegativeButton(R.string.mapbox_attributionTelemetryNegative, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - MapboxTelemetry.getInstance().setTelemetryEnabled(false); + Mapbox.obtainMapboxTelemetry().optOut(); dialog.cancel(); } }); 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 489199e422..83e5812965 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 @@ -19,12 +19,13 @@ import android.view.ViewConfiguration; import com.almeros.android.multitouch.gesturedetectors.RotateGestureDetector; import com.almeros.android.multitouch.gesturedetectors.ShoveGestureDetector; import com.almeros.android.multitouch.gesturedetectors.TwoFingerGestureDetector; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.services.android.telemetry.MapboxEvent; -import com.mapbox.services.android.telemetry.MapboxTelemetry; -import com.mapbox.services.android.telemetry.utils.MathUtils; -import com.mapbox.services.android.telemetry.utils.TelemetryUtils; +import com.mapbox.mapboxsdk.utils.MathUtils; +import com.mapbox.services.android.telemetry.Event; +import com.mapbox.services.android.telemetry.MapEventFactory; +import com.mapbox.services.android.telemetry.MapState; import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE; @@ -133,7 +134,8 @@ final class MapGestureDetector { */ private Location getLocationFromGesture(float x, float y) { LatLng latLng = projection.fromScreenLocation(new PointF(x, y)); - return TelemetryUtils.buildLocation(latLng.getLongitude(), latLng.getLatitude()); +// return TelemetryUtils.buildLocation(latLng.getLongitude(), latLng.getLatitude()); + return null; } /** @@ -181,9 +183,16 @@ final class MapGestureDetector { && uiSettings.isZoomGesturesEnabled(); if (twoTap) { // Confirmed 2nd Finger Down - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(event.getX(), event.getY()), - MapboxEvent.GESTURE_TWO_FINGER_SINGLETAP, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(event.getX(), event.getY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState twoFingerTap = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) + transform.getZoom()); + twoFingerTap.setGesture("TwoFingerTap"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, twoFingerTap)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(event.getX(), event.getY()), +// MapboxEvent.GESTURE_TWO_FINGER_SINGLETAP, transform)); } break; @@ -212,8 +221,14 @@ final class MapGestureDetector { // Scroll / Pan Has Stopped if (scrollGestureOccurred) { - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapDragEndEvent( - getLocationFromGesture(event.getX(), event.getY()), transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(event.getX(), event.getY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState dragend = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) + transform.getZoom()); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_DRAGEND, dragend)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapDragEndEvent( +// getLocationFromGesture(event.getX(), event.getY()), transform)); scrollGestureOccurred = false; cameraChangeDispatcher.onCameraIdle(); } @@ -329,10 +344,16 @@ final class MapGestureDetector { } break; } - - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(e.getX(), e.getY()), - MapboxEvent.GESTURE_DOUBLETAP, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(e.getX(), e.getY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState doubleTap = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) + transform.getZoom()); + doubleTap.setGesture("DoubleTap"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, doubleTap)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(e.getX(), e.getY()), +// MapboxEvent.GESTURE_DOUBLETAP, transform)); return true; } @@ -360,10 +381,16 @@ final class MapGestureDetector { onMapClickListener.onMapClick(projection.fromScreenLocation(tapPoint)); } } - - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(motionEvent.getX(), motionEvent.getY()), - MapboxEvent.GESTURE_SINGLETAP, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(motionEvent.getX(), motionEvent.getY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState singleTap = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) + transform.getZoom()); + singleTap.setGesture("SingleTap"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, singleTap)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(motionEvent.getX(), motionEvent.getY()), +// MapboxEvent.GESTURE_SINGLETAP, transform)); return true; } @@ -438,9 +465,16 @@ final class MapGestureDetector { cameraChangeDispatcher.onCameraMoveStarted(REASON_API_GESTURE); } - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(e1.getX(), e1.getY()), - MapboxEvent.GESTURE_PAN_START, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(e1.getX(), e1.getY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState pan = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) transform + .getZoom()); + pan.setGesture("Pan"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, pan)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(e1.getX(), e1.getY()), +// MapboxEvent.GESTURE_PAN_START, transform)); } // reset tracking if needed @@ -477,9 +511,16 @@ final class MapGestureDetector { recentScaleGestureOccurred = true; scalePointBegin = new PointF(detector.getFocusX(), detector.getFocusY()); scaleBeginTime = detector.getEventTime(); - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), - MapboxEvent.GESTURE_PINCH_START, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(detector.getFocusX(), detector.getFocusY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState pinch = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) transform + .getZoom()); + pinch.setGesture("Pinch"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, pinch)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), +// MapboxEvent.GESTURE_PINCH_START, transform)); return true; } @@ -652,9 +693,16 @@ final class MapGestureDetector { // Also is zoom already started, don't rotate float angle = detector.getRotationDegreesDelta(); if (Math.abs(angle) >= ROTATE_INVOKE_ANGLE) { - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), - MapboxEvent.GESTURE_ROTATION_START, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(detector.getFocusX(), detector.getFocusY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState rotation = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) + transform.getZoom()); + rotation.setGesture("Rotation"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, rotation)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), +// MapboxEvent.GESTURE_ROTATION_START, transform)); started = true; } @@ -809,9 +857,16 @@ final class MapGestureDetector { if (!tiltGestureOccurred && ((totalDelta > 10.0f) || (totalDelta < -10.0f))) { tiltGestureOccurred = true; beginTime = detector.getEventTime(); - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( - getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), - MapboxEvent.GESTURE_PITCH_START, transform)); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + LatLng latLng = projection.fromScreenLocation(new PointF(detector.getFocusX(), detector.getFocusY())); + // TODO transform.getZoom() may cause a NullPointerException + MapState pitch = new MapState((float) latLng.getLatitude(), (float) latLng.getLongitude(), (float) transform + .getZoom()); + pitch.setGesture("Pitch"); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_CLICK, pitch)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( +// getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), +// MapboxEvent.GESTURE_PITCH_START, transform)); } if (!tiltGestureOccurred) { 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 80a3ce5bb3..7cecf045c0 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 @@ -23,11 +23,13 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ZoomButtonsController; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.annotations.Annotation; import com.mapbox.mapboxsdk.annotations.MarkerViewManager; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.constants.Style; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.renderer.MapRenderer; import com.mapbox.mapboxsdk.maps.renderer.glsurfaceview.GLSurfaceViewMapRenderer; import com.mapbox.mapboxsdk.maps.renderer.textureview.TextureViewMapRenderer; @@ -36,6 +38,9 @@ import com.mapbox.mapboxsdk.maps.widgets.MyLocationView; import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings; import com.mapbox.mapboxsdk.net.ConnectivityReceiver; import com.mapbox.mapboxsdk.storage.FileSource; +import com.mapbox.services.android.telemetry.Event; +import com.mapbox.services.android.telemetry.MapEventFactory; +import com.mapbox.services.android.telemetry.MapState; import com.mapbox.services.android.telemetry.MapboxTelemetry; import java.lang.annotation.Retention; @@ -284,7 +289,11 @@ public class MapView extends FrameLayout { @UiThread public void onCreate(@Nullable Bundle savedInstanceState) { if (savedInstanceState == null) { - MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapLoadEvent()); + MapEventFactory mapEventFactory = new MapEventFactory(Mapbox.getApplicationContext()); + // Empty MapState + MapState load = new MapState(0.0f, 0.0f, 0.0f); + Mapbox.obtainMapboxTelemetry().push(mapEventFactory.createMapEvent(Event.Type.MAP_LOAD, load)); +// MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapLoadEvent()); } else if (savedInstanceState.getBoolean(MapboxConstants.STATE_HAS_SAVED_STATE)) { this.savedInstanceState = 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 index 97734de493..a032528f28 100644 --- 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 @@ -4,8 +4,6 @@ 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; /** @@ -21,7 +19,8 @@ class MapboxEventWrapper { static Hashtable<String, Object> buildMapClickEvent( @NonNull Location location, @NonNull String gestureId, Transform transform) { try { - return MapboxEvent.buildMapClickEvent(location, gestureId, transform.getZoom()); +// return MapboxEvent.buildMapClickEvent(location, gestureId, transform.getZoom()); + return null; } catch (NullPointerException exception) { // Map/Transform is not ready yet #8650 // returning null is valid, event is ignored. @@ -33,7 +32,8 @@ class MapboxEventWrapper { static Hashtable<String, Object> buildMapDragEndEvent( @NonNull Location location, Transform transform) { try { - return MapboxEvent.buildMapDragEndEvent(location, transform.getZoom()); +// return MapboxEvent.buildMapDragEndEvent(location, transform.getZoom()); + return null; } catch (NullPointerException exception) { // Map/Transform is not ready yet #8650 // returning null is valid, event is ignored. @@ -43,6 +43,7 @@ class MapboxEventWrapper { @Nullable static Hashtable<String, Object> buildMapLoadEvent() { - return MapboxEvent.buildMapLoadEvent(); +// return MapboxEvent.buildMapLoadEvent(); + return null; } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index c9bccab07d..ad473ba7a1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -42,7 +42,7 @@ import com.mapbox.mapboxsdk.style.layers.Filter; import com.mapbox.mapboxsdk.style.layers.Layer; import com.mapbox.mapboxsdk.style.light.Light; import com.mapbox.mapboxsdk.style.sources.Source; -import com.mapbox.services.android.telemetry.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngine; import com.mapbox.services.commons.geojson.Feature; import com.mapbox.services.commons.geojson.Geometry; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java index 6eacbbaeaf..fc40b32df2 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java @@ -12,9 +12,9 @@ import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.constants.MyBearingTracking; import com.mapbox.mapboxsdk.constants.MyLocationTracking; import com.mapbox.mapboxsdk.maps.widgets.MyLocationView; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; -import com.mapbox.services.android.telemetry.permissions.PermissionsManager; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngineListener; +import com.mapbox.services.android.core.permissions.PermissionsManager; import timber.log.Timber; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 3fe3c7b40d..cd9e1c3137 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -35,9 +35,9 @@ import com.mapbox.mapboxsdk.constants.MyLocationTracking; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.Projection; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; -import com.mapbox.services.android.telemetry.location.LocationEnginePriority; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEnginePriority; import java.lang.ref.WeakReference; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/MathUtils.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/MathUtils.java new file mode 100644 index 0000000000..190abe6832 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/MathUtils.java @@ -0,0 +1,80 @@ +package com.mapbox.mapboxsdk.utils; + +// TODO Remove this class if we finally include it within MAS 3.x (GeoJSON) +public class MathUtils { + + /** + * Test a value in specified range, returning minimum if it's below, and maximum if it's above + * + * @param value Value to test + * @param min Minimum value of range + * @param max Maximum value of range + * @return value if it's between min and max, min if it's below, max if it's above + */ + public static double clamp(double value, double min, double max) { + return Math.max(min, Math.min(max, value)); + } + + /** + * Test a value in specified range, returning minimum if it's below, and maximum if it's above + * + * @param value Value to test + * @param min Minimum value of range + * @param max Maximum value of range + * @return value if it's between min and max, min if it's below, max if it's above + */ + public static float clamp(float value, float min, float max) { + return Math.max(min, Math.min(max, value)); + } + + /** + * Constrains value to the given range (including min, excluding max) via modular arithmetic. + * <p> + * Same formula as used in Core GL (wrap.hpp) + * std::fmod((std::fmod((value - min), d) + d), d) + min; + * + * @param value Value to wrap + * @param min Minimum value + * @param max Maximum value + * @return Wrapped value + */ + public static double wrap(double value, double min, double max) { + double delta = max - min; + + double firstMod = (value - min) % delta; + double secondMod = (firstMod + delta) % delta; + + return secondMod + min; + } + + /** + * Convert bearing from core to match Android SDK value. + * + * @param nativeBearing bearing value coming from core + * @return bearing in degrees starting from 0 rotating clockwise + */ + public static double convertNativeBearing(double nativeBearing) { + double direction = -nativeBearing; + + while (direction > 360) { + direction -= 360; + } + while (direction < 0) { + direction += 360; + } + return direction; + } + + /** + * Returns the smallest angle between two angles. + * + * @param alpha First angle in degrees + * @param beta Second angle in degrees + * @return Smallest angle between two angles. + */ + public static double differenceBetweenAngles(double alpha, double beta) { + double phi = Math.abs(beta - alpha) % 360; + return phi > 180 ? 360 - phi : phi; + } +} + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java index 3f20f19f5d..d67e39792a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java @@ -23,8 +23,8 @@ import com.mapbox.mapboxsdk.testapp.adapter.FeatureAdapter; import com.mapbox.mapboxsdk.testapp.adapter.FeatureSectionAdapter; import com.mapbox.mapboxsdk.testapp.model.activity.Feature; import com.mapbox.mapboxsdk.testapp.utils.ItemClickSupport; -import com.mapbox.services.android.telemetry.permissions.PermissionsListener; -import com.mapbox.services.android.telemetry.permissions.PermissionsManager; +import com.mapbox.services.android.core.permissions.PermissionsListener; +import com.mapbox.services.android.core.permissions.PermissionsManager; import java.util.ArrayList; import java.util.Collections; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java index 71b8115d2e..9142df1172 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java @@ -9,8 +9,8 @@ import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; -import com.mapbox.services.android.telemetry.permissions.PermissionsListener; -import com.mapbox.services.android.telemetry.permissions.PermissionsManager; +import com.mapbox.services.android.core.permissions.PermissionsListener; +import com.mapbox.services.android.core.permissions.PermissionsManager; import java.util.List; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java index df52ccf727..bfc04dc1e6 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java @@ -5,8 +5,8 @@ import android.animation.TypeEvaluator; import android.animation.ValueAnimator; import android.location.Location; -import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEngine; +import com.mapbox.services.android.core.location.LocationEngineListener; import timber.log.Timber; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java index 62b4f4b987..2b681f6983 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java @@ -16,7 +16,7 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.MapboxMapOptions; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEngineListener; /** * Test activity showcasing how to change the MyLocationView drawable. diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java index 44ee030885..b8271df058 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java @@ -19,7 +19,7 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.TrackingSettings; import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings; import com.mapbox.mapboxsdk.testapp.R; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEngineListener; /** * Test activity showcasing how to tint the MyLocationView. diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java index d910a19d5d..726d13a516 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTrackingModeActivity.java @@ -25,7 +25,7 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.maps.TrackingSettings; import com.mapbox.mapboxsdk.maps.UiSettings; import com.mapbox.mapboxsdk.testapp.R; -import com.mapbox.services.android.telemetry.location.LocationEngineListener; +import com.mapbox.services.android.core.location.LocationEngineListener; import timber.log.Timber; diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle index 541b3c5236..346b5005e9 100644 --- a/platform/android/dependencies.gradle +++ b/platform/android/dependencies.gradle @@ -8,6 +8,7 @@ ext { versionName = "5.0.0" mapboxServicesVersion = "2.2.9" + mapboxTelemetryVersion = "3.0.0-20171219.161553-24" supportLibVersion = "25.4.0" espressoVersion = '3.0.1' testRunnerVersion = '1.0.1' @@ -17,10 +18,11 @@ ext { // mapbox mapboxJavaServices : "com.mapbox.mapboxsdk:mapbox-java-services:${mapboxServicesVersion}@jar", mapboxJavaGeoJSON : "com.mapbox.mapboxsdk:mapbox-java-geojson:${mapboxServicesVersion}@jar", - mapboxAndroidTelemetry : "com.mapbox.mapboxsdk:mapbox-android-telemetry:${mapboxServicesVersion}@aar", + mapboxAndroidTelemetry : "com.mapbox.mapboxsdk:mapbox-android-telemetry:${mapboxTelemetryVersion}", // mapzen lost lost : 'com.mapzen.android:lost:3.0.4', + gmsLocation : 'com.google.android.gms:play-services-location:11.0.4', // unit test junit : 'junit:junit:4.12', |