summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-06-19 18:29:16 +0200
committerŁukasz Paczos <lukas.paczos@gmail.com>2019-06-19 18:29:16 +0200
commit828b705c4d0cac0951412a819c1b27a14965cc6c (patch)
tree7cb766ff23c00052064ba095051d5fca2027dc77
parentbd481b1d60132c1b7f8ab1ebd8e363802907f9d5 (diff)
downloadqtlocation-mapboxgl-upstream/lp-qz-14598.tar.gz
[android] ensure to re-enable move when quickzoom finishesupstream/lp-qz-14598
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(