From c06426164f5eec115d8c3ab651c2346f381cd755 Mon Sep 17 00:00:00 2001 From: Ikram Gabiyev Date: Wed, 16 Nov 2022 05:14:22 +0000 Subject: [PATCH 1/2] Stash transient taskbar upon icon drag Transient taskbar needs to be stashed upon dragging the icon from it to create a splitscreen. Bug: 258850827 Test: manually reproduced the steps in the bug Change-Id: I88f2b4b25cb4c12fbe7e646a8ed668921ef24ab9 --- .../android/launcher3/taskbar/TaskbarDragController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java index 3045eca052..dfff7eed78 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java @@ -305,6 +305,9 @@ public class TaskbarDragController extends DragController im if (mDisallowGlobalDrag) { AbstractFloatingView.closeAllOpenViewsExcept(mActivity, TYPE_TASKBAR_ALL_APPS); } else { + // stash the transient taskbar + mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); + AbstractFloatingView.closeAllOpenViews(mActivity); } @@ -413,6 +416,9 @@ public class TaskbarDragController extends DragController im if (dragEvent.getResult()) { maybeOnDragEnd(); } else { + // un-stash the transient taskbar in case drag and drop was canceled + mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(false); + // This will take care of calling maybeOnDragEnd() after the animation animateGlobalDragViewToOriginalPosition(btv, dragEvent); } From 08be3775f68eda07502df7c73f93f90d229464eb Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Fri, 18 Nov 2022 10:02:16 -0800 Subject: [PATCH 2/2] 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