From 46ace8d2c7d71913c5703a30c777cefd9f714eed Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 18 Jan 2018 13:37:20 +0100 Subject: [android] - validate zoom level before creating mapbox telem event --- .../com/mapbox/mapboxsdk/maps/MapboxEventWrapper.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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..6730278d79 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,6 +4,7 @@ import android.location.Location; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.services.android.telemetry.MapboxEvent; import java.util.Hashtable; @@ -21,24 +22,32 @@ class MapboxEventWrapper { static Hashtable buildMapClickEvent( @NonNull Location location, @NonNull String gestureId, Transform transform) { try { - return MapboxEvent.buildMapClickEvent(location, gestureId, transform.getZoom()); + double mapZoom = transform.getZoom(); + if (mapZoom >= MapboxConstants.MINIMUM_ZOOM && mapZoom <= MapboxConstants.MAXIMUM_ZOOM) { + // validate zoom #8057 + 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; } + return null; } @Nullable static Hashtable buildMapDragEndEvent( @NonNull Location location, Transform transform) { try { - return MapboxEvent.buildMapDragEndEvent(location, transform.getZoom()); + double mapZoom = transform.getZoom(); + if (mapZoom >= MapboxConstants.MINIMUM_ZOOM && mapZoom <= MapboxConstants.MAXIMUM_ZOOM) { + // validate zoom #8057 + 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; } + return null; } @Nullable -- cgit v1.2.1 From b03c2263737a1a9277fd7f794e33571ef3f671fa Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 10 Jan 2018 14:53:28 +0100 Subject: [android] - check if the render surface has been correctly created before destroying the map --- .../src/main/java/com/mapbox/mapboxsdk/maps/MapView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 d03882b5c7..c5b7159e8c 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 @@ -75,6 +75,7 @@ public class MapView extends FrameLayout { private NativeMapView nativeMapView; private MapboxMapOptions mapboxMapOptions; private boolean destroyed; + private boolean hasSurface; private MyLocationView myLocationView; private CompassView compassView; @@ -321,6 +322,7 @@ public class MapView extends FrameLayout { } private void initRenderSurface() { + hasSurface = true; post(new Runnable() { @Override public void run() { @@ -409,7 +411,7 @@ public class MapView extends FrameLayout { destroyed = true; mapCallback.clearOnMapReadyCallbacks(); - if (nativeMapView != null) { + if (nativeMapView != null && hasSurface) { // null when destroying an activity programmatically mapbox-navigation-android/issues/503 nativeMapView.destroy(); nativeMapView = null; -- cgit v1.2.1 From 4a2ced565170ed5e8779d83bb843671ce8df93aa Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 11 Jan 2018 08:40:11 +0100 Subject: [android] - add filesource activation/deactivation to OfflineRegion status and deletion --- platform/android/MapboxGLAndroidSDK/build.gradle | 2 +- .../mapbox/mapboxsdk/offline/OfflineRegion.java | 36 ++++++++++------------ 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index ce886b1001..f70f987271 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -127,7 +127,7 @@ android { } testOptions { - unitTests{ + unitTests { returnDefaultValues = true } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java index bc9438ee93..c033b1cbcb 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java @@ -1,12 +1,12 @@ package com.mapbox.mapboxsdk.offline; import android.os.Handler; -import android.os.Looper; import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mapbox.mapboxsdk.LibraryLoader; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.storage.FileSource; import java.lang.annotation.Retention; @@ -51,7 +51,7 @@ public class OfflineRegion { private byte[] metadata; // Makes sure callbacks come back to the main thread - private Handler handler; + private final Handler handler = new Handler(); /** * A region can have a single observer, which gets notified whenever a change @@ -239,14 +239,6 @@ public class OfflineRegion { return metadata; } - private Handler getHandler() { - if (handler == null) { - handler = new Handler(Looper.getMainLooper()); - } - - return handler; - } - /** * Register an observer to be notified when the state of the region changes. * @@ -257,7 +249,7 @@ public class OfflineRegion { @Override public void onStatusChanged(final OfflineRegionStatus status) { if (deliverMessages()) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { if (observer != null) { @@ -271,7 +263,7 @@ public class OfflineRegion { @Override public void onError(final OfflineRegionError error) { if (deliverMessages()) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { if (observer != null) { @@ -285,7 +277,7 @@ public class OfflineRegion { @Override public void mapboxTileCountLimitExceeded(final long limit) { if (deliverMessages()) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { if (observer != null) { @@ -325,23 +317,26 @@ public class OfflineRegion { * @param callback the callback to invoked. */ public void getStatus(@NonNull final OfflineRegionStatusCallback callback) { + FileSource.getInstance(Mapbox.getApplicationContext()).activate(); getOfflineRegionStatus(new OfflineRegionStatusCallback() { @Override public void onStatus(final OfflineRegionStatus status) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { callback.onStatus(status); + FileSource.getInstance(Mapbox.getApplicationContext()).deactivate(); } }); } @Override public void onError(final String error) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { callback.onError(error); + FileSource.getInstance(Mapbox.getApplicationContext()).deactivate(); } }); } @@ -368,13 +363,15 @@ public class OfflineRegion { public void delete(@NonNull final OfflineRegionDeleteCallback callback) { if (!isDeleted) { isDeleted = true; + FileSource.getInstance(Mapbox.getApplicationContext()).activate(); deleteOfflineRegion(new OfflineRegionDeleteCallback() { @Override public void onDelete() { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { callback.onDelete(); + FileSource.getInstance(Mapbox.getApplicationContext()).deactivate(); OfflineRegion.this.finalize(); } }); @@ -382,10 +379,11 @@ public class OfflineRegion { @Override public void onError(final String error) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { isDeleted = false; + FileSource.getInstance(Mapbox.getApplicationContext()).deactivate(); callback.onError(error); } }); @@ -408,7 +406,7 @@ public class OfflineRegion { updateOfflineRegionMetadata(bytes, new OfflineRegionUpdateMetadataCallback() { @Override public void onUpdate(final byte[] metadata) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { OfflineRegion.this.metadata = metadata; @@ -419,7 +417,7 @@ public class OfflineRegion { @Override public void onError(final String error) { - getHandler().post(new Runnable() { + handler.post(new Runnable() { @Override public void run() { callback.onError(error); -- cgit v1.2.1 From 82eabf18b1a30852da56509db5689117fe5ac373 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 11 Jan 2018 12:17:22 +0100 Subject: [android] - retain configuration for user provided focal point and deselect markers on tap --- .../mapboxsdk/constants/MapboxConstants.java | 3 +++ .../java/com/mapbox/mapboxsdk/maps/UiSettings.java | 23 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java index 3b35df4f4b..60362dd2e9 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java @@ -146,4 +146,7 @@ public class MapboxConstants { public static final String STATE_LOCATION_VIEW_ACCURACY_TINT_COLOR = "mapbox_locViewAccuracyTintColor"; public static final String STATE_LOCATION_VIEW_ACCURACY_THRESHOLD = "mapbox_locViewAccuracyThreshold"; public static final String STATE_LOCATION_VIEW_PADDING = "mapbox_locViewPadding"; + public static final String STATE_DESELECT_MARKER_ON_TAP = "mapbox_deselectMarkerOnTap"; + public static final String STATE_USER_FOCAL_POINT = "mapbox_userFocalPoint"; + } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java index 4f37dd6f36..3fd3e1220a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java @@ -91,6 +91,8 @@ public final class UiSettings { saveLogo(outState); saveAttribution(outState); saveZoomControl(outState); + saveDeselectMarkersOnTap(outState); + saveFocalPoint(outState); } void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { @@ -99,6 +101,8 @@ public final class UiSettings { restoreLogo(savedInstanceState); restoreAttribution(savedInstanceState); restoreZoomControl(savedInstanceState); + restoreDeselectMarkersOnTap(savedInstanceState); + restoreFocalPoint(savedInstanceState); } private void initialiseGestures(MapboxMapOptions options) { @@ -783,6 +787,14 @@ public final class UiSettings { return doubleTapGestureChangeAllowed; } + private void restoreDeselectMarkersOnTap(Bundle savedInstanceState) { + setDeselectMarkersOnTap(savedInstanceState.getBoolean(MapboxConstants.STATE_DESELECT_MARKER_ON_TAP)); + } + + private void saveDeselectMarkersOnTap(Bundle outState) { + outState.putBoolean(MapboxConstants.STATE_DESELECT_MARKER_ON_TAP, isDeselectMarkersOnTap()); + } + /** * Gets whether the markers are automatically deselected (and therefore, their infowindows * closed) when a map tap is detected. @@ -862,6 +874,17 @@ public final class UiSettings { setDoubleTapGesturesEnabled(enabled); } + private void saveFocalPoint(Bundle outState) { + outState.putParcelable(MapboxConstants.STATE_USER_FOCAL_POINT, getFocalPoint()); + } + + private void restoreFocalPoint(Bundle savedInstanceState) { + PointF pointF = savedInstanceState.getParcelable(MapboxConstants.STATE_USER_FOCAL_POINT); + if (pointF != null) { + setFocalPoint(pointF); + } + } + /** * Sets the focal point used as center for a gesture * -- cgit v1.2.1 From 06f3f8fddb574dec0b498dfa696a7b639596e9c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Fri, 12 Jan 2018 09:59:36 +0100 Subject: [android] do not overwrite user-set focal point when tracking location (#10910) --- .../main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java | 3 --- 1 file changed, 3 deletions(-) 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..4f27e0ada8 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 @@ -372,9 +372,6 @@ public class MyLocationView extends View { */ public void setTilt(@FloatRange(from = 0, to = 60.0f) double tilt) { this.tilt = tilt; - if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) { - mapboxMap.getUiSettings().setFocalPoint(getCenter()); - } invalidate(); } -- cgit v1.2.1 From c3068ec3975c0c13486c5a456cc9ae26baf4f755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Mon, 15 Jan 2018 13:47:06 +0100 Subject: Camera callbacks for velocity animated movements (#10925) * [android] camera listeners double invocation fix * [android] invoking camera change callbacks for velocity animated movements --- .../mapboxsdk/maps/CameraChangeDispatcher.java | 19 ++++---- .../mapbox/mapboxsdk/maps/MapGestureDetector.java | 50 +++++++++++++++++----- .../java/com/mapbox/mapboxsdk/maps/Transform.java | 12 +++--- 3 files changed, 57 insertions(+), 24 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java index 605c8912e2..e558a5d707 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java @@ -34,6 +34,11 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M private final Runnable onCameraMoveStartedRunnable = new Runnable() { @Override public void run() { + if (!idle) { + return; + } + idle = false; + // deprecated API if (onCameraMoveStartedListener != null) { onCameraMoveStartedListener.onCameraMoveStarted(moveStartedReason); @@ -85,6 +90,11 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M private final Runnable onCameraIdleRunnable = new Runnable() { @Override public void run() { + if (idle) { + return; + } + idle = true; + // deprecated API if (onCameraIdleListener != null) { onCameraIdleListener.onCameraIdle(); @@ -121,10 +131,6 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M @Override public void onCameraMoveStarted(final int reason) { - if (!idle) { - return; - } - idle = false; moveStartedReason = reason; handler.post(onCameraMoveStartedRunnable); } @@ -141,10 +147,7 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M @Override public void onCameraIdle() { - if (!idle) { - idle = true; - handler.post(onCameraIdleRunnable); - } + handler.post(onCameraIdleRunnable); } void addOnCameraIdleListener(@NonNull OnCameraIdleListener listener) { 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 214fa22795..1788cb4428 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 @@ -28,6 +28,7 @@ import com.mapbox.services.android.telemetry.utils.TelemetryUtils; import java.util.concurrent.CopyOnWriteArrayList; +import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener.REASON_API_ANIMATION; import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE; /** @@ -78,9 +79,11 @@ final class MapGestureDetector { private boolean scaleGestureOccurred; private boolean recentScaleGestureOccurred; - private boolean scaleAnimating; private long scaleBeginTime; + private boolean scaleAnimating; + private boolean rotateAnimating; + private VelocityTracker velocityTracker; private boolean wasZoomingIn; private boolean wasClockwiseRotating; @@ -233,7 +236,10 @@ final class MapGestureDetector { MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapDragEndEvent( getLocationFromGesture(event.getX(), event.getY()), transform)); scrollGestureOccurred = false; - cameraChangeDispatcher.onCameraIdle(); + + if (!scaleAnimating && !rotateAnimating) { + cameraChangeDispatcher.onCameraIdle(); + } } twoTap = false; @@ -615,7 +621,6 @@ final class MapGestureDetector { return; } - if (rotateGestureOccurred || quickZoom) { reset(); return; @@ -657,13 +662,23 @@ final class MapGestureDetector { @Override public void onAnimationUpdate(ValueAnimator animation) { - transform.setZoom((Float) animation.getAnimatedValue(), scalePointBegin); + transform.setZoom((Float) animation.getAnimatedValue(), scalePointBegin, 0, true); } }); animator.addListener(new AnimatorListenerAdapter() { + + @Override + public void onAnimationStart(Animator animation) { + cameraChangeDispatcher.onCameraMoveStarted(REASON_API_ANIMATION); + } + + @Override + public void onAnimationCancel(Animator animation) { + reset(); + } + @Override public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); reset(); } }); @@ -682,7 +697,6 @@ final class MapGestureDetector { private long beginTime = 0; private boolean started = false; - private boolean animating = false; // Called when two fingers first touch the screen @Override @@ -753,9 +767,9 @@ final class MapGestureDetector { } double angularVelocity = calculateVelocityVector(detector); - if (Math.abs(angularVelocity) > 0.001 && rotateGestureOccurred && !animating) { + if (Math.abs(angularVelocity) > 0.001 && rotateGestureOccurred && !rotateAnimating) { animateRotateVelocity(); - } else if (!animating) { + } else if (!rotateAnimating) { reset(); } } @@ -763,12 +777,16 @@ final class MapGestureDetector { private void reset() { beginTime = 0; started = false; - animating = false; + rotateAnimating = false; rotateGestureOccurred = false; + + if (!twoTap) { + cameraChangeDispatcher.onCameraIdle(); + } } private void animateRotateVelocity() { - animating = true; + rotateAnimating = true; double currentRotation = transform.getRawBearing(); double rotateAdditionDegrees = calculateVelocityInDegrees(); createAnimator(currentRotation, rotateAdditionDegrees).start(); @@ -811,9 +829,19 @@ final class MapGestureDetector { } }); animator.addListener(new AnimatorListenerAdapter() { + + @Override + public void onAnimationStart(Animator animation) { + cameraChangeDispatcher.onCameraMoveStarted(REASON_API_ANIMATION); + } + + @Override + public void onAnimationCancel(Animator animation) { + reset(); + } + @Override public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); reset(); } }); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java index b0cc92c62b..7fa85ae550 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java @@ -239,7 +239,7 @@ final class Transform implements MapView.OnMapChangedListener { CameraPosition cameraPosition = invalidateCameraPosition(); if (cameraPosition != null) { int newZoom = (int) Math.round(cameraPosition.zoom + (zoomIn ? 1 : -1)); - setZoom(newZoom, focalPoint, MapboxConstants.ANIMATION_DURATION); + setZoom(newZoom, focalPoint, MapboxConstants.ANIMATION_DURATION, false); } else { // we are not transforming, notify about being idle cameraChangeDispatcher.onCameraIdle(); @@ -250,7 +250,7 @@ final class Transform implements MapView.OnMapChangedListener { CameraPosition cameraPosition = invalidateCameraPosition(); if (cameraPosition != null) { int newZoom = (int) Math.round(cameraPosition.zoom + zoomAddition); - setZoom(newZoom, focalPoint, duration); + setZoom(newZoom, focalPoint, duration, false); } else { // we are not transforming, notify about being idle cameraChangeDispatcher.onCameraIdle(); @@ -258,16 +258,18 @@ final class Transform implements MapView.OnMapChangedListener { } void setZoom(double zoom, @NonNull PointF focalPoint) { - setZoom(zoom, focalPoint, 0); + setZoom(zoom, focalPoint, 0, false); } - void setZoom(double zoom, @NonNull PointF focalPoint, long duration) { + void setZoom(double zoom, @NonNull PointF focalPoint, long duration, boolean isAnimator) { if (mapView != null) { mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { @Override public void onMapChanged(int change) { if (change == MapView.REGION_DID_CHANGE_ANIMATED) { - cameraChangeDispatcher.onCameraIdle(); + if (!isAnimator) { + cameraChangeDispatcher.onCameraIdle(); + } mapView.removeOnMapChangedListener(this); } } -- cgit v1.2.1 From 6e5ddfae9505b03885933edc19cad6a9009f17f6 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 17 Jan 2018 15:54:49 +0100 Subject: [android] - allow setting an OkHttpClient --- .../main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java | 4 ++++ .../java/com/mapbox/mapboxsdk/http/HttpRequestUtil.java | 13 ++++++++++++- .../src/main/java/com/mapbox/mapboxsdk/maps/Transform.java | 2 +- .../testapp/activity/maplayout/DebugModeActivity.java | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java index 945fb0ba47..da27ee7bb8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java @@ -234,4 +234,8 @@ class HTTPRequest implements Callback { static void enablePrintRequestUrlOnFailure(boolean enabled) { logRequestUrl = enabled; } + + static void setOKHttpClient(OkHttpClient client) { + mClient = client; + } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUtil.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUtil.java index 5afe3b6572..872032867a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUtil.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUtil.java @@ -1,5 +1,7 @@ package com.mapbox.mapboxsdk.http; +import okhttp3.OkHttpClient; + /** * Utility class for setting HttpRequest configurations */ @@ -28,8 +30,17 @@ public class HttpRequestUtil { * * @param enabled True will print urls, false will disable */ - public static void setPrintRequestUrlOnFaillure(boolean enabled) { + public static void setPrintRequestUrlOnFailure(boolean enabled) { HTTPRequest.enablePrintRequestUrlOnFailure(enabled); } + /** + * Set the OkHttpClient used for requesting map resources. + * + * @param client the OkHttpClient + */ + public static void setOkHttpClient(OkHttpClient client) { + HTTPRequest.setOKHttpClient(client); + } + } \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java index 7fa85ae550..84a601039f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java @@ -261,7 +261,7 @@ final class Transform implements MapView.OnMapChangedListener { setZoom(zoom, focalPoint, 0, false); } - void setZoom(double zoom, @NonNull PointF focalPoint, long duration, boolean isAnimator) { + void setZoom(double zoom, @NonNull PointF focalPoint, long duration, final boolean isAnimator) { if (mapView != null) { mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { @Override diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java index 3fb91f90e9..f597f67555 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java @@ -57,7 +57,7 @@ public class DebugModeActivity extends AppCompatActivity implements OnMapReadyCa @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - HttpRequestUtil.setPrintRequestUrlOnFaillure(true); + HttpRequestUtil.setPrintRequestUrlOnFailure(true); setContentView(R.layout.activity_debug_mode); setupToolbar(); setupMapView(savedInstanceState); @@ -231,7 +231,7 @@ public class DebugModeActivity extends AppCompatActivity implements OnMapReadyCa protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); - HttpRequestUtil.setPrintRequestUrlOnFaillure(false); + HttpRequestUtil.setPrintRequestUrlOnFailure(false); } @Override -- cgit v1.2.1 From dc8d4e8b0f45cf68c3167cb7c7205248b8e9c281 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 22 Jan 2018 18:55:26 +0100 Subject: [android] - handle null Call instances in HttpRequest --- .../src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java index da27ee7bb8..caee493e6f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java @@ -170,7 +170,7 @@ class HTTPRequest implements Callback { String errorMessage = e.getMessage() != null ? e.getMessage() : "Error processing the request"; int type = getFailureType(e); - if (logEnabled) { + if (logEnabled && call != null && call.request() != null) { String requestUrl = call.request().url().toString(); logFailure(type, errorMessage, requestUrl); } -- cgit v1.2.1 From 938f087e3873c6eda69e385659ac2a75f52eda6c Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 22 Jan 2018 13:50:53 +0100 Subject: [android] - update changelog for v5.3.2 --- platform/android/CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index a45971edeb..e98ed491aa 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -2,6 +2,19 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to do so please see the [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) first to get started. +## master + - Add Hebrew localization [#10967](https://github.com/mapbox/mapbox-gl-native/pull/10967) + +## 5.3.2 - January 22, 2018 + - Validate surface creation before destroying [#10890](https://github.com/mapbox/mapbox-gl-native/pull/10890) + - Add filesource activation ot OfflineRegion [#10904](https://github.com/mapbox/mapbox-gl-native/pull/10904) + - Save configuration of UiSettings [#10908](https://github.com/mapbox/mapbox-gl-native/pull/10908) + - Do not overwrite user-set focal point [#10910](https://github.com/mapbox/mapbox-gl-native/pull/10910) + - Camera callbacks for velocity animated movements [#10925](https://github.com/mapbox/mapbox-gl-native/pull/10925) + - Allow changing the used OkHttpClient [#10948](https://github.com/mapbox/mapbox-gl-native/pull/10948) + - Validate zoom level before creating telemetry event [#10959](https://github.com/mapbox/mapbox-gl-native/pull/10959) + - Handle null call instances in HttpRequest [#10987](https://github.com/mapbox/mapbox-gl-native/pull/10987) + ## 5.3.1 - January 10, 2018 - Blacklist binary program loading for Vivante GC4000 GPUs [#10862](https://github.com/mapbox/mapbox-gl-native/pull/10862) - Support Genymotion [#10841](https://github.com/mapbox/mapbox-gl-native/pull/10841) -- cgit v1.2.1 From 80789ab2c8a8538afc63141619158bdd3a332003 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 23 Jan 2018 11:13:17 +0100 Subject: [android] - rollback fragment flash changes for ViewPager support --- .../src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java | 2 -- .../src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java index 0c11a4220e..5fcf206a5a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java @@ -68,7 +68,6 @@ public final class MapFragment extends Fragment implements OnMapReadyCallback { super.onCreateView(inflater, container, savedInstanceState); Context context = inflater.getContext(); map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments())); - map.setVisibility(View.INVISIBLE); return map; } @@ -91,7 +90,6 @@ public final class MapFragment extends Fragment implements OnMapReadyCallback { for (OnMapReadyCallback onMapReadyCallback : mapReadyCallbackList) { onMapReadyCallback.onMapReady(mapboxMap); } - map.setVisibility(View.VISIBLE); } /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java index c072ec8237..8aa4c7fd09 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java @@ -68,7 +68,6 @@ public class SupportMapFragment extends Fragment implements OnMapReadyCallback { super.onCreateView(inflater, container, savedInstanceState); Context context = inflater.getContext(); map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments())); - map.setVisibility(View.INVISIBLE); return map; } @@ -91,7 +90,6 @@ public class SupportMapFragment extends Fragment implements OnMapReadyCallback { for (OnMapReadyCallback onMapReadyCallback : mapReadyCallbackList) { onMapReadyCallback.onMapReady(mapboxMap); } - map.setVisibility(View.VISIBLE); } /** -- cgit v1.2.1 From 14f3f86f6347c5d4ec2d9fe9d0ca8b05e6b06932 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 23 Jan 2018 12:14:41 +0100 Subject: [android] - release android v5.3.2, bump snapshot version --- platform/android/MapboxGLAndroidSDK/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/android/MapboxGLAndroidSDK/gradle.properties b/platform/android/MapboxGLAndroidSDK/gradle.properties index b4faba88cc..20d6f60baf 100644 --- a/platform/android/MapboxGLAndroidSDK/gradle.properties +++ b/platform/android/MapboxGLAndroidSDK/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.mapbox.mapboxsdk -VERSION_NAME=5.3.2-SNAPSHOT +VERSION_NAME=5.3.3-SNAPSHOT POM_DESCRIPTION=Mapbox GL Android SDK POM_URL=https://github.com/mapbox/mapbox-gl-native -- cgit v1.2.1 From 3f7c30f9d3716bcf1ebea617a38aebe1401e20a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Tue, 23 Jan 2018 13:03:57 -0800 Subject: [core] fix style parsing crash when a layer's paint property is not an object --- include/mbgl/style/conversion/layer.hpp | 3 +++ test/fixtures/style_parser/paint-nonobject.info.json | 7 +++++++ test/fixtures/style_parser/paint-nonobject.style.json | 8 ++++++++ 3 files changed, 18 insertions(+) create mode 100644 test/fixtures/style_parser/paint-nonobject.info.json create mode 100644 test/fixtures/style_parser/paint-nonobject.style.json diff --git a/include/mbgl/style/conversion/layer.hpp b/include/mbgl/style/conversion/layer.hpp index 1fe467165d..c694c3162a 100644 --- a/include/mbgl/style/conversion/layer.hpp +++ b/include/mbgl/style/conversion/layer.hpp @@ -43,6 +43,9 @@ optional setPaintProperties(Layer& layer, const V& value) { if (!paintValue) { return {}; } + if (!isObject(*paintValue)) { + return { { "paint must be an object" } }; + } return eachMember(*paintValue, [&] (const std::string& k, const V& v) { return setPaintProperty(layer, k, v); }); diff --git a/test/fixtures/style_parser/paint-nonobject.info.json b/test/fixtures/style_parser/paint-nonobject.info.json new file mode 100644 index 0000000000..c9ae97efd8 --- /dev/null +++ b/test/fixtures/style_parser/paint-nonobject.info.json @@ -0,0 +1,7 @@ +{ + "default": { + "log": [ + [1, "WARNING", "ParseStyle", "paint must be an object"] + ] + } +} diff --git a/test/fixtures/style_parser/paint-nonobject.style.json b/test/fixtures/style_parser/paint-nonobject.style.json new file mode 100644 index 0000000000..24ec89eda5 --- /dev/null +++ b/test/fixtures/style_parser/paint-nonobject.style.json @@ -0,0 +1,8 @@ +{ + "version": 8, + "layers": [{ + "id": "background", + "type": "background", + "paint": true + }] +} -- cgit v1.2.1 From 0ebc2ee91fa7f96a5cf3f4538b64d1835f08c81a Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Wed, 24 Jan 2018 16:23:19 -0500 Subject: [ios, macos] Fix MGLMapSnapshotter pointForCoordinate returns an scaled point. --- platform/darwin/src/MGLMapSnapshotter.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/darwin/src/MGLMapSnapshotter.mm b/platform/darwin/src/MGLMapSnapshotter.mm index 15a8f6c8ca..8b4ae7977b 100644 --- a/platform/darwin/src/MGLMapSnapshotter.mm +++ b/platform/darwin/src/MGLMapSnapshotter.mm @@ -76,7 +76,7 @@ const CGFloat MGLSnapshotterMinimumPixelSize = 64; - (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate { mbgl::ScreenCoordinate sc = _pointForFn(MGLLatLngFromLocationCoordinate2D(coordinate)); - return CGPointMake(sc.x * self.scale, sc.y * self.scale); + return CGPointMake(sc.x, sc.y); } @end -- cgit v1.2.1