diff options
author | Tony Wickham <twickham@google.com> | 2019-10-01 17:52:54 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-10-01 17:52:54 +0000 |
commit | e8d064a3c1df8a6c5eb22978285c9ed9a18e2899 (patch) | |
tree | 61fa82daff46da7647de0455bc2678510fc93ab2 | |
parent | 1f3a847011784a00d415273f6ca61f26172b0699 (diff) | |
parent | c9654eb09158a9878d7ff8fc9e588ec2d4903318 (diff) | |
download | packages_apps_Trebuchet-e8d064a3c1df8a6c5eb22978285c9ed9a18e2899.tar.gz packages_apps_Trebuchet-e8d064a3c1df8a6c5eb22978285c9ed9a18e2899.tar.bz2 packages_apps_Trebuchet-e8d064a3c1df8a6c5eb22978285c9ed9a18e2899.zip |
Merge "Don't allow scrolling RecentsView outside navbar during quickswitch" into ub-launcher3-qt-future-dev
-rw-r--r-- | quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsAnimationWrapper.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsAnimationWrapper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsAnimationWrapper.java index e51ba631b..c4d3fa03a 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsAnimationWrapper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsAnimationWrapper.java @@ -19,6 +19,8 @@ import static android.view.MotionEvent.ACTION_CANCEL; import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_UP; +import android.os.SystemClock; +import android.util.Log; import android.view.InputEvent; import android.view.KeyEvent; import android.view.MotionEvent; @@ -38,6 +40,8 @@ import java.util.function.Supplier; */ public class RecentsAnimationWrapper { + private static final String TAG = "RecentsAnimationWrapper"; + // A list of callbacks to run when we receive the recents animation target. There are different // than the state callbacks as these run on the current worker thread. private final ArrayList<Runnable> mCallbacks = new ArrayList<>(); @@ -125,6 +129,7 @@ public class RecentsAnimationWrapper { boolean sendUserLeaveHint) { SwipeAnimationTargetSet controller = targetSet; targetSet = null; + disableInputProxy(); if (controller != null) { controller.finishController(toRecents, onFinishComplete, sendUserLeaveHint); } @@ -153,6 +158,16 @@ public class RecentsAnimationWrapper { mInputConsumerController.setInputListener(this::onInputConsumerEvent); } + private void disableInputProxy() { + if (mInputConsumer != null && mTouchInProgress) { + long now = SystemClock.uptimeMillis(); + MotionEvent dummyCancel = MotionEvent.obtain(now, now, ACTION_CANCEL, 0, 0, 0); + mInputConsumer.onMotionEvent(dummyCancel); + dummyCancel.recycle(); + } + mInputConsumerController.setInputListener(null); + } + private boolean onInputConsumerEvent(InputEvent ev) { if (ev instanceof MotionEvent) { onInputConsumerMotionEvent((MotionEvent) ev); @@ -168,6 +183,18 @@ public class RecentsAnimationWrapper { private boolean onInputConsumerMotionEvent(MotionEvent ev) { int action = ev.getAction(); + + // Just to be safe, verify that ACTION_DOWN comes before any other action, + // and ignore any ACTION_DOWN after the first one (though that should not happen). + if (!mTouchInProgress && action != ACTION_DOWN) { + Log.w(TAG, "Received non-down motion before down motion: " + action); + return false; + } + if (mTouchInProgress && action == ACTION_DOWN) { + Log.w(TAG, "Received down motion while touch was already in progress"); + return false; + } + if (action == ACTION_DOWN) { mTouchInProgress = true; if (mInputConsumer == null) { |