diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 4b35859625..1bc00be593 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -831,7 +831,7 @@ public abstract class AbsSwipeUpHandler, return; } mLauncherTransitionController.setProgress( - Math.max(getTaskbarProgress(), getScaleProgressDueToScroll()), mDragLengthFactor); + Math.max(mCurrentShift.value, getScaleProgressDueToScroll()), mDragLengthFactor); } /** @@ -2212,7 +2212,7 @@ public abstract class AbsSwipeUpHandler, AnimatorControllerWithResistance playbackController = remoteHandle.getPlaybackController(); if (playbackController != null) { - playbackController.setProgress(Math.max(getTaskbarProgress(), + playbackController.setProgress(Math.max(mCurrentShift.value, getScaleProgressDueToScroll()), mDragLengthFactor); } @@ -2264,31 +2264,32 @@ public abstract class AbsSwipeUpHandler, } /** - * Overrides the current shift progress to keep the app window at the bottom of the screen - * while the transient taskbar is being swiped in. + * Overrides the gesture displacement to keep the app window at the bottom of the screen while + * the transient taskbar is being swiped in. * * There is also a catch up period so that the window can start moving 1:1 with the swipe. */ - private float getTaskbarProgress() { + @Override + protected float overrideDisplacementForTransientTaskbar(float displacement) { if (!mIsTransientTaskbar) { - return mCurrentShift.value; + return displacement; } if (mTaskbarAlreadyOpen) { - return mCurrentShift.value; + return displacement; } - if (mCurrentDisplacement < mTaskbarAppWindowThreshold) { + if (displacement < mTaskbarAppWindowThreshold) { return 0; } - // "Catch up" with `mCurrentShift.value`. - if (mCurrentDisplacement < mTaskbarCatchUpThreshold) { - return Utilities.mapToRange(mCurrentDisplacement, mTaskbarAppWindowThreshold, - mTaskbarCatchUpThreshold, 0, mCurrentShift.value, ACCEL_DEACCEL); + // "Catch up" with the displacement at mTaskbarCatchUpThreshold. + if (displacement < mTaskbarCatchUpThreshold) { + return Utilities.mapToRange(displacement, mTaskbarAppWindowThreshold, + mTaskbarCatchUpThreshold, 0, mTaskbarCatchUpThreshold, ACCEL_DEACCEL); } - return mCurrentShift.value; + return displacement; } private void setDividerShown(boolean shown, boolean immediate) { diff --git a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java index ddb06ce858..fdde45a900 100644 --- a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java +++ b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java @@ -116,7 +116,7 @@ public abstract class SwipeUpAnimationLogic implements @UiThread public void updateDisplacement(float displacement) { // We are moving in the negative x/y direction - displacement = -displacement; + displacement = overrideDisplacementForTransientTaskbar(-displacement); mCurrentDisplacement = displacement; float shift; @@ -130,6 +130,17 @@ public abstract class SwipeUpAnimationLogic implements mCurrentShift.updateValue(shift); } + /** + * When Transient Taskbar is enabled, subclasses can override the displacement to keep the app + * window at the bottom of the screen while taskbar is being swiped in. + * @param displacement The distance the user has swiped up from the bottom of the screen. This + * value will be positive unless the user swipe downwards. + * @return the overridden displacement. + */ + protected float overrideDisplacementForTransientTaskbar(float displacement) { + return displacement; + } + /** * Called when the value of {@link #mCurrentShift} changes */