summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2018-09-05 19:06:38 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2018-09-12 13:59:11 +0200
commit8cd86fe1b40c45ac634cce4bb8f989e663ef6ea2 (patch)
tree015a8d20ff8ce88cd857a9429d30093c6eba8154
parent907612e93d8a2b156d4604fda348707ccb347836 (diff)
downloadqtlocation-mapboxgl-8cd86fe1b40c45ac634cce4bb8f989e663ef6ea2.tar.gz
[android] improved gestures management while tracking location
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java78
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java1
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java55
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml1
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res/values/styles.xml2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt (renamed from platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/MapboxAnimatorCoordinatorTest.kt)2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java10
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java28
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_location_mode.xml13
10 files changed, 142 insertions, 50 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java
index 5b2209179e..50fb829fcc 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java
@@ -2,6 +2,7 @@ package com.mapbox.mapboxsdk.location;
import android.content.Context;
import android.graphics.PointF;
+import android.support.annotation.NonNull;
import android.view.MotionEvent;
import com.mapbox.android.gestures.AndroidGesturesManager;
@@ -9,11 +10,8 @@ import com.mapbox.android.gestures.MoveGestureDetector;
import com.mapbox.android.gestures.RotateGestureDetector;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.geometry.LatLng;
-import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.location.modes.CameraMode;
-
-import java.util.List;
-import java.util.Set;
+import com.mapbox.mapboxsdk.maps.MapboxMap;
final class LocationCameraController implements MapboxAnimator.OnCameraAnimationsValuesChangeListener {
@@ -28,6 +26,9 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
private final MoveGestureDetector moveGestureDetector;
private final OnCameraMoveInvalidateListener onCameraMoveInvalidateListener;
+ private final AndroidGesturesManager initialGesturesManager;
+ private final AndroidGesturesManager internalGesturesManager;
+
LocationCameraController(
Context context,
MapboxMap mapboxMap,
@@ -35,12 +36,13 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
LocationComponentOptions options,
OnCameraMoveInvalidateListener onCameraMoveInvalidateListener) {
this.mapboxMap = mapboxMap;
- mapboxMap.setGesturesManager(
- new LocationGesturesManager(context), true, true);
- moveGestureDetector = mapboxMap.getGesturesManager().getMoveGestureDetector();
- mapboxMap.addOnMoveListener(onMoveListener);
+
+ initialGesturesManager = mapboxMap.getGesturesManager();
+ internalGesturesManager = new LocationGesturesManager(context);
+ moveGestureDetector = internalGesturesManager.getMoveGestureDetector();
mapboxMap.addOnRotateListener(onRotateListener);
mapboxMap.addOnFlingListener(onFlingListener);
+ mapboxMap.addOnMoveListener(onMoveListener);
this.internalCameraTrackingChangedListener = internalCameraTrackingChangedListener;
this.onCameraMoveInvalidateListener = onCameraMoveInvalidateListener;
@@ -51,15 +53,24 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
LocationCameraController(MapboxMap mapboxMap,
MoveGestureDetector moveGestureDetector,
OnCameraTrackingChangedListener internalCameraTrackingChangedListener,
- OnCameraMoveInvalidateListener onCameraMoveInvalidateListener) {
+ OnCameraMoveInvalidateListener onCameraMoveInvalidateListener,
+ AndroidGesturesManager androidGesturesManager) {
this.mapboxMap = mapboxMap;
this.moveGestureDetector = moveGestureDetector;
this.internalCameraTrackingChangedListener = internalCameraTrackingChangedListener;
this.onCameraMoveInvalidateListener = onCameraMoveInvalidateListener;
+ this.internalGesturesManager = androidGesturesManager;
+ this.initialGesturesManager = androidGesturesManager;
}
void initializeOptions(LocationComponentOptions options) {
this.options = options;
+ if (options.trackingGesturesManagement()) {
+ mapboxMap.setGesturesManager(internalGesturesManager, true, true);
+ adjustGesturesThresholds();
+ } else {
+ mapboxMap.setGesturesManager(initialGesturesManager, true, true);
+ }
}
void setCameraMode(@CameraMode.Mode int cameraMode) {
@@ -141,11 +152,13 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
}
private void adjustGesturesThresholds() {
- if (isLocationTracking()) {
- adjustFocalPoint = true;
- moveGestureDetector.setMoveThreshold(options.trackingInitialMoveThreshold());
- } else {
- moveGestureDetector.setMoveThreshold(0f);
+ if (options.trackingGesturesManagement()) {
+ if (isLocationTracking()) {
+ adjustFocalPoint = true;
+ moveGestureDetector.setMoveThreshold(options.trackingInitialMoveThreshold());
+ } else {
+ moveGestureDetector.setMoveThreshold(0f);
+ }
}
}
@@ -176,29 +189,31 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
private boolean interrupt;
@Override
- public void onMoveBegin(MoveGestureDetector detector) {
- if (detector.getPointersCount() > 1
+ public void onMoveBegin(@NonNull MoveGestureDetector detector) {
+ if (options.trackingGesturesManagement()
+ && detector.getPointersCount() > 1
&& detector.getMoveThreshold() != options.trackingMultiFingerMoveThreshold()
&& isLocationTracking()) {
detector.setMoveThreshold(options.trackingMultiFingerMoveThreshold());
interrupt = true;
+ } else {
+ setCameraMode(CameraMode.NONE);
}
}
@Override
- public void onMove(MoveGestureDetector detector) {
+ public void onMove(@NonNull MoveGestureDetector detector) {
if (interrupt) {
detector.interrupt();
return;
}
-
setCameraMode(CameraMode.NONE);
}
@Override
- public void onMoveEnd(MoveGestureDetector detector) {
- if (!interrupt && isLocationTracking()) {
- moveGestureDetector.setMoveThreshold(options.trackingInitialMoveThreshold());
+ public void onMoveEnd(@NonNull MoveGestureDetector detector) {
+ if (options.trackingGesturesManagement() && !interrupt && isLocationTracking()) {
+ detector.setMoveThreshold(options.trackingInitialMoveThreshold());
}
interrupt = false;
}
@@ -206,19 +221,19 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
private MapboxMap.OnRotateListener onRotateListener = new MapboxMap.OnRotateListener() {
@Override
- public void onRotateBegin(RotateGestureDetector detector) {
+ public void onRotateBegin(@NonNull RotateGestureDetector detector) {
if (isBearingTracking()) {
setCameraMode(CameraMode.NONE);
}
}
@Override
- public void onRotate(RotateGestureDetector detector) {
+ public void onRotate(@NonNull RotateGestureDetector detector) {
// no implementation
}
@Override
- public void onRotateEnd(RotateGestureDetector detector) {
+ public void onRotateEnd(@NonNull RotateGestureDetector detector) {
// no implementation
}
};
@@ -232,23 +247,10 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation
private class LocationGesturesManager extends AndroidGesturesManager {
- public LocationGesturesManager(Context context) {
+ LocationGesturesManager(Context context) {
super(context);
}
- public LocationGesturesManager(Context context, boolean applyDefaultThresholds) {
- super(context, applyDefaultThresholds);
- }
-
- public LocationGesturesManager(Context context, Set<Integer>[] exclusiveGestures) {
- super(context, exclusiveGestures);
- }
-
- public LocationGesturesManager(Context context, List<Set<Integer>> exclusiveGestures,
- boolean applyDefaultThresholds) {
- super(context, exclusiveGestures, applyDefaultThresholds);
- }
-
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
if (motionEvent != null) {
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java
index 4b0860998f..42c40634f9 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java
@@ -351,6 +351,7 @@ public final class LocationComponent {
public void applyStyle(LocationComponentOptions options) {
this.options = options;
locationLayerController.applyStyle(options);
+ locationCameraController.initializeOptions(options);
staleStateManager.setEnabled(options.enableStaleState());
staleStateManager.setDelayTime(options.staleStateTimeout());
updateMapWithOptions(options);
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java
index 9a50840926..fcca4764d4 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java
@@ -12,6 +12,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
+import com.mapbox.android.gestures.AndroidGesturesManager;
import com.mapbox.mapboxsdk.R;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
@@ -100,6 +101,7 @@ public class LocationComponentOptions implements Parcelable {
private double minZoom;
private float maxZoomIconScale;
private float minZoomIconScale;
+ private boolean trackingGesturesManagement;
private float trackingInitialMoveThreshold;
private float trackingMultiFingerMoveThreshold;
private String layerBelow;
@@ -132,6 +134,7 @@ public class LocationComponentOptions implements Parcelable {
double minZoom,
float maxZoomIconScale,
float minZoomIconScale,
+ boolean trackingGesturesManagement,
float trackingInitialMoveThreshold,
float trackingMultiFingerMoveThreshold,
String layerBelow) {
@@ -165,6 +168,7 @@ public class LocationComponentOptions implements Parcelable {
this.minZoom = minZoom;
this.maxZoomIconScale = maxZoomIconScale;
this.minZoomIconScale = minZoomIconScale;
+ this.trackingGesturesManagement = trackingGesturesManagement;
this.trackingInitialMoveThreshold = trackingInitialMoveThreshold;
this.trackingMultiFingerMoveThreshold = trackingMultiFingerMoveThreshold;
this.layerBelow = layerBelow;
@@ -243,10 +247,11 @@ public class LocationComponentOptions implements Parcelable {
R.styleable.mapbox_LocationComponent_mapbox_accuracyAlpha, ACCURACY_ALPHA_DEFAULT));
builder.elevation(elevation);
+ builder.trackingGesturesManagement(typedArray.getBoolean(
+ R.styleable.mapbox_LocationComponent_mapbox_trackingGesturesManagement, false));
builder.trackingInitialMoveThreshold(typedArray.getDimension(
R.styleable.mapbox_LocationComponent_mapbox_trackingInitialMoveThreshold,
context.getResources().getDimension(R.dimen.mapbox_locationComponentTrackingInitialMoveThreshold)));
-
builder.trackingMultiFingerMoveThreshold(typedArray.getDimension(
R.styleable.mapbox_LocationComponent_mapbox_trackingMultiFingerMoveThreshold,
context.getResources().getDimension(R.dimen.mapbox_locationComponentTrackingMultiFingerMoveThreshold)));
@@ -654,6 +659,23 @@ public class LocationComponentOptions implements Parcelable {
}
/**
+ * Returns whether gesture threshold should be adjusted when camera is in one of the tracking modes.
+ * This will adjust the focal point and increase thresholds to enable camera manipulation,
+ * like zooming in and out, without breaking tracking.
+ * <p>
+ * <strong>Note</strong>: If set to true, this can overwrite some of the gesture thresholds
+ * and the custom {@link com.mapbox.android.gestures.AndroidGesturesManager} that was set with
+ * {@link com.mapbox.mapboxsdk.maps.MapboxMap#setGesturesManager(AndroidGesturesManager, boolean, boolean)}.
+ *
+ * @return true if gestures are adjusted when in one of the camera tracking modes, false otherwise
+ * @see Builder#trackingInitialMoveThreshold(float)
+ * @see Builder#trackingMultiFingerMoveThreshold(float)
+ */
+ public boolean trackingGesturesManagement() {
+ return trackingGesturesManagement;
+ }
+
+ /**
* Minimum single pointer movement in pixels required to break camera tracking.
*
* @return the minimum movement
@@ -710,6 +732,7 @@ public class LocationComponentOptions implements Parcelable {
+ "minZoom=" + minZoom + ", "
+ "maxZoomIconScale=" + maxZoomIconScale + ", "
+ "minZoomIconScale=" + minZoomIconScale + ", "
+ + "trackingGesturesManagement=" + trackingGesturesManagement + ", "
+ "trackingInitialMoveThreshold=" + trackingInitialMoveThreshold + ", "
+ "trackingMultiFingerMoveThreshold=" + trackingMultiFingerMoveThreshold + ", "
+ "layerBelow=" + layerBelow
@@ -760,6 +783,7 @@ public class LocationComponentOptions implements Parcelable {
&& (Double.doubleToLongBits(this.minZoom) == Double.doubleToLongBits(that.minZoom()))
&& (Float.floatToIntBits(this.maxZoomIconScale) == Float.floatToIntBits(that.maxZoomIconScale()))
&& (Float.floatToIntBits(this.minZoomIconScale) == Float.floatToIntBits(that.minZoomIconScale()))
+ && (this.trackingGesturesManagement == that.trackingGesturesManagement())
&& (Float.floatToIntBits(this.trackingInitialMoveThreshold)
== Float.floatToIntBits(that.trackingInitialMoveThreshold()))
&& (Float.floatToIntBits(this.trackingMultiFingerMoveThreshold)
@@ -827,6 +851,8 @@ public class LocationComponentOptions implements Parcelable {
h$ *= 1000003;
h$ ^= Float.floatToIntBits(minZoomIconScale);
h$ *= 1000003;
+ h$ ^= trackingGesturesManagement ? 1231 : 1237;
+ h$ *= 1000003;
h$ ^= Float.floatToIntBits(trackingInitialMoveThreshold);
h$ *= 1000003;
h$ ^= Float.floatToIntBits(trackingMultiFingerMoveThreshold);
@@ -865,6 +891,7 @@ public class LocationComponentOptions implements Parcelable {
in.readDouble(),
in.readFloat(),
in.readFloat(),
+ in.readInt() == 1,
in.readFloat(),
in.readFloat(),
in.readString()
@@ -961,6 +988,7 @@ public class LocationComponentOptions implements Parcelable {
dest.writeDouble(minZoom());
dest.writeFloat(maxZoomIconScale());
dest.writeFloat(minZoomIconScale());
+ dest.writeInt(trackingGesturesManagement() ? 1 : 0);
dest.writeFloat(trackingInitialMoveThreshold());
dest.writeFloat(trackingMultiFingerMoveThreshold());
dest.writeString(layerBelow());
@@ -1023,6 +1051,7 @@ public class LocationComponentOptions implements Parcelable {
private Double minZoom;
private Float maxZoomIconScale;
private Float minZoomIconScale;
+ private Boolean trackingGesturesManagement;
private Float trackingInitialMoveThreshold;
private Float trackingMultiFingerMoveThreshold;
private String layerBelow;
@@ -1058,6 +1087,7 @@ public class LocationComponentOptions implements Parcelable {
this.minZoom = source.minZoom();
this.maxZoomIconScale = source.maxZoomIconScale();
this.minZoomIconScale = source.minZoomIconScale();
+ this.trackingGesturesManagement = source.trackingGesturesManagement();
this.trackingInitialMoveThreshold = source.trackingInitialMoveThreshold();
this.trackingMultiFingerMoveThreshold = source.trackingMultiFingerMoveThreshold();
this.layerBelow = source.layerBelow();
@@ -1436,6 +1466,25 @@ public class LocationComponentOptions implements Parcelable {
}
/**
+ * Set whether gesture threshold should be adjusted when camera is in one of the tracking modes.
+ * This will adjust the focal point and increase thresholds to enable camera manipulation,
+ * like zooming in and out, without breaking tracking.
+ * <p>
+ * <strong>Note</strong>: This can overwrite some of the gesture thresholds
+ * and the custom {@link com.mapbox.android.gestures.AndroidGesturesManager} that was set with
+ * {@link com.mapbox.mapboxsdk.maps.MapboxMap#setGesturesManager(AndroidGesturesManager, boolean, boolean)}.
+ *
+ * @param trackingGesturesManagement true if gestures should be adjusted when in one of the camera tracking modes,
+ * false otherwise
+ * @see Builder#trackingInitialMoveThreshold(float)
+ * @see Builder#trackingMultiFingerMoveThreshold(float)
+ */
+ public LocationComponentOptions.Builder trackingGesturesManagement(boolean trackingGesturesManagement) {
+ this.trackingGesturesManagement = trackingGesturesManagement;
+ return this;
+ }
+
+ /**
* Sets minimum single pointer movement (map pan) in pixels required to break camera tracking.
*
* @param moveThreshold the minimum movement
@@ -1516,6 +1565,9 @@ public class LocationComponentOptions implements Parcelable {
if (this.minZoomIconScale == null) {
missing += " minZoomIconScale";
}
+ if (this.trackingGesturesManagement == null) {
+ missing += " trackingGesturesManagement";
+ }
if (this.trackingInitialMoveThreshold == null) {
missing += " trackingInitialMoveThreshold";
}
@@ -1553,6 +1605,7 @@ public class LocationComponentOptions implements Parcelable {
this.minZoom,
this.maxZoomIconScale,
this.minZoomIconScale,
+ trackingGesturesManagement,
this.trackingInitialMoveThreshold,
this.trackingMultiFingerMoveThreshold,
this.layerBelow);
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
index 62cc066bd6..b279252c41 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
@@ -170,6 +170,7 @@
<attr name="mapbox_minZoomIconScale" format="float"/>
<!-- Camera tracking settings -->
+ <attr name="mapbox_trackingGesturesManagement" format="boolean"/>
<attr name="mapbox_trackingInitialMoveThreshold" format="dimension"/>
<attr name="mapbox_trackingMultiFingerMoveThreshold" format="dimension"/>
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml
index 453079d195..d2428d8d8f 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml
@@ -17,5 +17,5 @@
<dimen name="mapbox_minimum_angular_velocity">0.025dp</dimen>
<dimen name="mapbox_locationComponentTrackingInitialMoveThreshold">25dp</dimen>
- <dimen name="mapbox_locationComponentTrackingMultiFingerMoveThreshold">125dp</dimen>
+ <dimen name="mapbox_locationComponentTrackingMultiFingerMoveThreshold">400dp</dimen>
</resources>
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/styles.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/styles.xml
index ac29065f24..122b76ba3f 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/styles.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/styles.xml
@@ -18,7 +18,6 @@
<item name="mapbox_enableStaleState">true</item>
<item name="mapbox_staleStateTimeout">30000</item>
-
<!-- Location icon padding -->
<item name="mapbox_iconPaddingLeft">0</item>
<item name="mapbox_iconPaddingTop">0</item>
@@ -34,6 +33,7 @@
<item name="mapbox_minZoomIconScale">0.6</item>
<!-- Camera tracking settings -->
+ <item name="mapbox_trackingGesturesManagement">false</item>
<item name="mapbox_trackingInitialMoveThreshold">@dimen/mapbox_locationComponentTrackingInitialMoveThreshold</item>
<item name="mapbox_trackingMultiFingerMoveThreshold">@dimen/mapbox_locationComponentTrackingMultiFingerMoveThreshold</item>
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/MapboxAnimatorCoordinatorTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt
index fb4dcd580c..a3ac653e81 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/MapboxAnimatorCoordinatorTest.kt
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt
@@ -15,7 +15,7 @@ import org.mockito.Mockito
import org.robolectric.RobolectricTestRunner
@RunWith(RobolectricTestRunner::class)
-class MapboxAnimatorCoordinatorTest {
+class LocationAnimatorCoordinatorTest {
private lateinit var locationAnimatorCoordinator: LocationAnimatorCoordinator
private val cameraPosition: CameraPosition = CameraPosition.DEFAULT
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java
index de0d67613e..bcd9e68509 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java
@@ -2,6 +2,7 @@ package com.mapbox.mapboxsdk.location;
import android.graphics.PointF;
+import com.mapbox.android.gestures.AndroidGesturesManager;
import com.mapbox.android.gestures.MoveGestureDetector;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdate;
@@ -314,8 +315,9 @@ public class LocationCameraControllerTest {
when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class));
MoveGestureDetector moveGestureDetector = mock(MoveGestureDetector.class);
OnCameraMoveInvalidateListener onCameraMoveInvalidateListener = mock(OnCameraMoveInvalidateListener.class);
+ AndroidGesturesManager androidGesturesManager = mock(AndroidGesturesManager.class);
return new LocationCameraController(mapboxMap, moveGestureDetector,
- onCameraTrackingChangedListener, onCameraMoveInvalidateListener);
+ onCameraTrackingChangedListener, onCameraMoveInvalidateListener, androidGesturesManager);
}
private LocationCameraController buildCamera(MoveGestureDetector moveGestureDetector) {
@@ -323,15 +325,17 @@ public class LocationCameraControllerTest {
when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class));
OnCameraTrackingChangedListener onCameraTrackingChangedListener = mock(OnCameraTrackingChangedListener.class);
OnCameraMoveInvalidateListener onCameraMoveInvalidateListener = mock(OnCameraMoveInvalidateListener.class);
+ AndroidGesturesManager androidGesturesManager = mock(AndroidGesturesManager.class);
return new LocationCameraController(mapboxMap, moveGestureDetector,
- onCameraTrackingChangedListener, onCameraMoveInvalidateListener);
+ onCameraTrackingChangedListener, onCameraMoveInvalidateListener, androidGesturesManager);
}
private LocationCameraController buildCamera(MapboxMap mapboxMap) {
MoveGestureDetector moveGestureDetector = mock(MoveGestureDetector.class);
OnCameraTrackingChangedListener onCameraTrackingChangedListener = mock(OnCameraTrackingChangedListener.class);
OnCameraMoveInvalidateListener onCameraMoveInvalidateListener = mock(OnCameraMoveInvalidateListener.class);
+ AndroidGesturesManager androidGesturesManager = mock(AndroidGesturesManager.class);
return new LocationCameraController(mapboxMap, moveGestureDetector,
- onCameraTrackingChangedListener, onCameraMoveInvalidateListener);
+ onCameraTrackingChangedListener, onCameraMoveInvalidateListener, androidGesturesManager);
}
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java
index f2f57c854d..72bd91108a 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java
@@ -158,6 +158,12 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
} else if (id == R.id.action_component_enabled) {
activateLocationComponent();
return true;
+ } else if (id == R.id.action_gestures_management_disabled) {
+ disableGesturesManagement();
+ return true;
+ } else if (id == R.id.action_gestures_management_enabled) {
+ enableGesturesManagement();
+ return true;
}
return super.onOptionsItemSelected(item);
@@ -192,18 +198,36 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea
}
}
- public void toggleStyle() {
+ private void toggleStyle() {
customStyle = !customStyle;
locationComponent.applyStyle(
this,
customStyle ? R.style.CustomLocationComponent : R.style.mapbox_LocationComponent);
}
- public void toggleMapStyle() {
+ private void toggleMapStyle() {
String styleUrl = mapboxMap.getStyleUrl().contentEquals(Style.DARK) ? Style.LIGHT : Style.DARK;
mapboxMap.setStyle(styleUrl);
}
+ private void disableGesturesManagement() {
+ LocationComponentOptions options = locationComponent
+ .getLocationComponentOptions()
+ .toBuilder()
+ .trackingGesturesManagement(false)
+ .build();
+ locationComponent.applyStyle(options);
+ }
+
+ private void enableGesturesManagement() {
+ LocationComponentOptions options = locationComponent
+ .getLocationComponentOptions()
+ .toBuilder()
+ .trackingGesturesManagement(true)
+ .build();
+ locationComponent.applyStyle(options);
+ }
+
@Override
@SuppressWarnings( {"MissingPermission"})
protected void onStart() {
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_location_mode.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_location_mode.xml
index 7004999f88..302ab33bc2 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_location_mode.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_location_mode.xml
@@ -10,11 +10,18 @@
app:showAsAction="never"/>
<item android:id="@+id/action_component_disable"
- android:title="Disable"
+ android:title="Disable Component"
app:showAsAction="never"/>
-
<item android:id="@+id/action_component_enabled"
- android:title="Enabled"
+ android:title="Enable Component"
+ app:showAsAction="never"/>
+
+ <item android:id="@+id/action_gestures_management_enabled"
+ android:title="Enable Gestures Management"
+ app:showAsAction="never"/>
+
+ <item android:id="@+id/action_gestures_management_disabled"
+ android:title="Disable Gestures Management"
app:showAsAction="never"/>
</menu> \ No newline at end of file