From 08be3775f68eda07502df7c73f93f90d229464eb Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Fri, 18 Nov 2022 10:02:16 -0800 Subject: [PATCH] Prevent x-axis window movement during the initial swipe up to show transient taskbar - If gesture starts and isLikelyToStartANewTask=true, we do not clamp - If gesture starts and isLikelyToStartANewTask=false AND transient taskbar is not already showing, we clamp the scrolling Bug: 258851206 Test: swipe up to show taskbar, no x-axis movement swipe left/right still works as expected Change-Id: Iac194df63e03b4a28b49008983c88c165847aa31 --- quickstep/res/values/dimens.xml | 2 ++ .../android/quickstep/AbsSwipeUpHandler.java | 15 +++++++++ .../OtherActivityInputConsumer.java | 6 ++++ .../android/quickstep/views/RecentsView.java | 31 +++++++++++++++++++ res/values/dimens.xml | 1 + 5 files changed, 55 insertions(+) diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index cd60879580..c0b665730d 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -289,6 +289,8 @@ 10dp 32dp 10dp + + 16dp 150dp 225dp diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index b09e531fab..32997b6df8 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -750,6 +750,21 @@ public abstract class AbsSwipeUpHandler, } } + /** + * Sets whether or not we should clamp the scroll offset. + * This is used to avoid x-axis movement when swiping up transient taskbar. + * @param clampScrollOffset When true, we clamp the scroll to 0 before the clamp threshold is + * met. + */ + public void setClampScrollOffset(boolean clampScrollOffset) { + if (mRecentsView == null) { + mStateCallback.runOnceAtState(STATE_LAUNCHER_PRESENT, + () -> mRecentsView.setClampScrollOffset(clampScrollOffset)); + return; + } + mRecentsView.setClampScrollOffset(clampScrollOffset); + } + public void setIsLikelyToStartNewTask(boolean isLikelyToStartNewTask) { setIsLikelyToStartNewTask( isLikelyToStartNewTask, diff --git a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java index b3d3c3dbf6..61383a5b68 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java @@ -382,6 +382,9 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC mInteractionHandler.onGestureStarted(isLikelyToStartNewTask); mInteractionHandler.setTaskbarAlreadyOpen(mTaskbarAlreadyOpen); + if (mIsTransientTaskbar && !mTaskbarAlreadyOpen && !isLikelyToStartNewTask) { + mInteractionHandler.setClampScrollOffset(true); + } } private void startTouchTrackingForWindowAnimation(long touchTimeMs) { @@ -477,6 +480,9 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC @UiThread private void onInteractionGestureFinished() { Preconditions.assertUIThread(); + if (mInteractionHandler != null) { + mInteractionHandler.setClampScrollOffset(false); + } removeListener(); mInteractionHandler = null; cleanupAfterGesture(); diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 80b41a7007..5a26f32f48 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -498,6 +498,9 @@ public abstract class RecentsView0dp 0dp 0dp + 0dp 0dp