summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-06-19 18:29:16 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-06-20 10:28:02 +0200
commit577e03f949c9e897269b99db376a518193b2a895 (patch)
tree075dcf1df5276beea19d13d6a0c2678ab1cfeb6b
parent3d6da490735fa0874cf01804c8e7299e120393f1 (diff)
downloadqtlocation-mapboxgl-577e03f949c9e897269b99db376a518193b2a895.tar.gz
[android] ensure to re-enable move when quickzoom finishes
Because the double tap event can be canceled and stop delivering events whenever ACTION_CANCEL or ACTION_POINTER_DOWN is dispatched, we need to make the #onScaleEnd callback responsible for re-enabling the move detector as well
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java13
1 files changed, 11 insertions, 2 deletions
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 17d3ab0aa2..3f24ebe2ac 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
@@ -344,8 +344,10 @@ final class MapGestureDetector {
}
if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) {
- // re-enabled the move detector
- gesturesManager.getMoveGestureDetector().setEnabled(true);
+ if (executeDoubleTap) {
+ // re-enable the move detector only if we did not start the quickzoom, otherwise, re-enable in the #onScaleEnd
+ gesturesManager.getMoveGestureDetector().setEnabled(true);
+ }
if (!uiSettings.isZoomGesturesEnabled() || !uiSettings.isDoubleTapGesturesEnabled() || !executeDoubleTap) {
return false;
@@ -512,6 +514,13 @@ final class MapGestureDetector {
@Override
public void onScaleEnd(@NonNull StandardScaleGestureDetector detector, float velocityX, float velocityY) {
+ if (quickZoom) {
+ // re-enabled the move detector only if the quickzoom happened
+ // we need to split the responsibility of re-enabling the move detector,
+ // because the double tap event (where the detector is disabled) can be canceled without warning (see #14598)
+ gesturesManager.getMoveGestureDetector().setEnabled(true);
+ }
+
if (uiSettings.isIncreaseRotateThresholdWhenScaling()) {
// resetting default angle threshold
gesturesManager.getRotateGestureDetector().setAngleThreshold(