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/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); } diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 4bbbe6069d..b0de9cef64 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -755,6 +755,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 503644a606..f842fd0c48 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java @@ -378,6 +378,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) { @@ -473,6 +476,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