From 828b705c4d0cac0951412a819c1b27a14965cc6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 19 Jun 2019 18:29:16 +0200 Subject: [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 --- .../java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java | 13 +++++++++++-- 1 file 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( -- cgit v1.2.1