Loading quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +17 −45 Original line number Diff line number Diff line Loading @@ -278,8 +278,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private RunningWindowAnim[] mRunningWindowAnim; // Possible second animation running at the same time as mRunningWindowAnim private Animator mParallelRunningAnim; // Current running divider animation private ValueAnimator mDividerAnimator; private boolean mIsMotionPaused; private boolean mHasMotionEverBeenPaused; Loading Loading @@ -325,8 +323,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private final boolean mIsTransientTaskbar; // May be set to false when mIsTransientTaskbar is true. private boolean mCanSlowSwipeGoHome = true; private boolean mHasReachedOverviewThreshold = false; private boolean mDividerHiddenBeforeAnimation = false; // Indicates whether the divider is shown, only used when split screen is activated. private boolean mIsDividerShown = true; @Nullable private RemoteAnimationTargets.ReleaseCheck mSwipePipToHomeReleaseCheck = null; Loading Loading @@ -767,10 +765,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private void setIsLikelyToStartNewTask(boolean isLikelyToStartNewTask, boolean animate) { if (mIsLikelyToStartNewTask != isLikelyToStartNewTask) { if (isLikelyToStartNewTask && mIsTransientTaskbar) { setDividerShown(false /* shown */, true /* immediate */); } mIsLikelyToStartNewTask = isLikelyToStartNewTask; maybeUpdateRecentsAttachedState(animate); } Loading Loading @@ -1110,9 +1104,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, } else { mStateCallback.setState(STATE_RESUME_LAST_TASK); } if (mRecentsAnimationTargets != null) { setDividerShown(true /* shown */, true /* immediate */); } // Restore the divider as it resumes the last top-tasks. setDividerShown(true); break; } ActiveGestureLog.INSTANCE.addLog( Loading Loading @@ -1284,9 +1277,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, if (mRecentsAnimationController != null) { mRecentsAnimationController.detachNavigationBarFromApp(true); } if (mIsTransientTaskbar) { setDividerShown(false /* shown */, true /* immediate */); } } else if (endTarget == RECENTS) { if (mRecentsView != null) { int nearestPage = mRecentsView.getDestinationPage(); Loading Loading @@ -1686,12 +1676,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, } mRecentsAnimationController.enableInputConsumer(); // Start hiding the divider if (!mIsTransientTaskbar || mTaskbarAlreadyOpen || mIsTaskbarAllAppsOpen || mDividerHiddenBeforeAnimation) { setDividerShown(false /* shown */, true /* immediate */); } } private void computeRecentsScrollIfInvisible() { Loading Loading @@ -2155,9 +2139,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, @Override public void onRecentsAnimationFinished(RecentsAnimationController controller) { if (!controller.getFinishTargetIsLauncher()) { setDividerShown(true /* shown */, false /* immediate */); } mRecentsAnimationController = null; mRecentsAnimationTargets = null; if (mRecentsView != null) { Loading Loading @@ -2257,18 +2238,23 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, boolean notSwipingToHome = mRecentsAnimationTargets != null && mGestureState.getEndTarget() != HOME; boolean setRecentsScroll = mRecentsViewScrollLinked && mRecentsView != null; float progress = Math.max(mCurrentShift.value, getScaleProgressDueToScroll()); int scrollOffset = setRecentsScroll ? mRecentsView.getScrollOffset() : 0; if (progress > 0 || scrollOffset != 0) { // Hide the divider as the tasks start moving. setDividerShown(false); } for (RemoteTargetHandle remoteHandle : mRemoteTargetHandles) { AnimatorControllerWithResistance playbackController = remoteHandle.getPlaybackController(); if (playbackController != null) { playbackController.setProgress(Math.max(mCurrentShift.value, getScaleProgressDueToScroll()), mDragLengthFactor); playbackController.setProgress(progress, mDragLengthFactor); } if (notSwipingToHome) { TaskViewSimulator taskViewSimulator = remoteHandle.getTaskViewSimulator(); if (setRecentsScroll) { taskViewSimulator.setScroll(mRecentsView.getScrollOffset()); taskViewSimulator.setScroll(scrollOffset); } taskViewSimulator.apply(remoteHandle.getTransformParams()); } Loading Loading @@ -2327,10 +2313,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, // "Catch up" with the displacement at mTaskbarCatchUpThreshold. if (displacement < mTaskbarCatchUpThreshold) { if (!mHasReachedOverviewThreshold) { setDividerShown(false /* shown */, true /* immediate */); mHasReachedOverviewThreshold = true; } return Utilities.mapToRange(displacement, mTaskbarAppWindowThreshold, mTaskbarCatchUpThreshold, 0, mTaskbarCatchUpThreshold, ACCEL_DEACCEL); } Loading @@ -2338,23 +2320,13 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, return displacement; } private void setDividerShown(boolean shown, boolean immediate) { if (mRecentsAnimationTargets == null) { if (!shown) { mDividerHiddenBeforeAnimation = true; } private void setDividerShown(boolean shown) { if (mRecentsAnimationTargets == null || mIsDividerShown == shown) { return; } if (mDividerAnimator != null) { mDividerAnimator.cancel(); } mDividerAnimator = TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRecentsAnimationTargets.nonApps, shown, (dividerAnimator) -> { dividerAnimator.start(); if (immediate) { dividerAnimator.end(); } }); mIsDividerShown = shown; TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRecentsAnimationTargets.nonApps, shown, null /* animatorHandler */); } /** Loading quickstep/src/com/android/quickstep/TaskAnimationManager.java +2 −6 Original line number Diff line number Diff line Loading @@ -188,12 +188,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn return; } } else if (nonAppTargets.length > 0) { TaskViewUtils.createSplitAuxiliarySurfacesAnimator( nonAppTargets /* nonApps */, true /*shown*/, dividerAnimator -> { dividerAnimator.start(); dividerAnimator.end(); }); TaskViewUtils.createSplitAuxiliarySurfacesAnimator(nonAppTargets /* nonApps */, true /*shown*/, null /* animatorHandler */); } if (mController != null) { if (mLastAppearedTaskTarget == null Loading quickstep/src/com/android/quickstep/TaskViewUtils.java +19 −11 Original line number Diff line number Diff line Loading @@ -679,28 +679,36 @@ public final class TaskViewUtils { /** * Creates an animation to show/hide the auxiliary surfaces (aka. divider bar), only calling * {@param animatorHandler} if there are valid surfaces to animate. * Passing null handler to apply the visibility immediately. * * @return the animator animating the surfaces */ public static ValueAnimator createSplitAuxiliarySurfacesAnimator( RemoteAnimationTarget[] nonApps, boolean shown, Consumer<ValueAnimator> animatorHandler) { @Nullable RemoteAnimationTarget[] nonApps, boolean shown, @Nullable Consumer<ValueAnimator> animatorHandler) { if (nonApps == null || nonApps.length == 0) { return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); List<SurfaceControl> auxiliarySurfaces = new ArrayList<>(nonApps.length); boolean hasSurfaceToAnimate = false; for (int i = 0; i < nonApps.length; ++i) { final RemoteAnimationTarget targ = nonApps[i]; final SurfaceControl leash = targ.leash; if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) { List<SurfaceControl> auxiliarySurfaces = new ArrayList<>(); for (RemoteAnimationTarget target : nonApps) { final SurfaceControl leash = target.leash; if (target.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) { auxiliarySurfaces.add(leash); hasSurfaceToAnimate = true; } } if (!hasSurfaceToAnimate) { if (auxiliarySurfaces.isEmpty()) { return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); if (animatorHandler == null) { // Apply the visibility directly without fade animation. for (SurfaceControl leash : auxiliarySurfaces) { t.setVisibility(leash, shown); } t.apply(); t.close(); return null; } Loading Loading
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +17 −45 Original line number Diff line number Diff line Loading @@ -278,8 +278,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private RunningWindowAnim[] mRunningWindowAnim; // Possible second animation running at the same time as mRunningWindowAnim private Animator mParallelRunningAnim; // Current running divider animation private ValueAnimator mDividerAnimator; private boolean mIsMotionPaused; private boolean mHasMotionEverBeenPaused; Loading Loading @@ -325,8 +323,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private final boolean mIsTransientTaskbar; // May be set to false when mIsTransientTaskbar is true. private boolean mCanSlowSwipeGoHome = true; private boolean mHasReachedOverviewThreshold = false; private boolean mDividerHiddenBeforeAnimation = false; // Indicates whether the divider is shown, only used when split screen is activated. private boolean mIsDividerShown = true; @Nullable private RemoteAnimationTargets.ReleaseCheck mSwipePipToHomeReleaseCheck = null; Loading Loading @@ -767,10 +765,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, private void setIsLikelyToStartNewTask(boolean isLikelyToStartNewTask, boolean animate) { if (mIsLikelyToStartNewTask != isLikelyToStartNewTask) { if (isLikelyToStartNewTask && mIsTransientTaskbar) { setDividerShown(false /* shown */, true /* immediate */); } mIsLikelyToStartNewTask = isLikelyToStartNewTask; maybeUpdateRecentsAttachedState(animate); } Loading Loading @@ -1110,9 +1104,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, } else { mStateCallback.setState(STATE_RESUME_LAST_TASK); } if (mRecentsAnimationTargets != null) { setDividerShown(true /* shown */, true /* immediate */); } // Restore the divider as it resumes the last top-tasks. setDividerShown(true); break; } ActiveGestureLog.INSTANCE.addLog( Loading Loading @@ -1284,9 +1277,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, if (mRecentsAnimationController != null) { mRecentsAnimationController.detachNavigationBarFromApp(true); } if (mIsTransientTaskbar) { setDividerShown(false /* shown */, true /* immediate */); } } else if (endTarget == RECENTS) { if (mRecentsView != null) { int nearestPage = mRecentsView.getDestinationPage(); Loading Loading @@ -1686,12 +1676,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, } mRecentsAnimationController.enableInputConsumer(); // Start hiding the divider if (!mIsTransientTaskbar || mTaskbarAlreadyOpen || mIsTaskbarAllAppsOpen || mDividerHiddenBeforeAnimation) { setDividerShown(false /* shown */, true /* immediate */); } } private void computeRecentsScrollIfInvisible() { Loading Loading @@ -2155,9 +2139,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, @Override public void onRecentsAnimationFinished(RecentsAnimationController controller) { if (!controller.getFinishTargetIsLauncher()) { setDividerShown(true /* shown */, false /* immediate */); } mRecentsAnimationController = null; mRecentsAnimationTargets = null; if (mRecentsView != null) { Loading Loading @@ -2257,18 +2238,23 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, boolean notSwipingToHome = mRecentsAnimationTargets != null && mGestureState.getEndTarget() != HOME; boolean setRecentsScroll = mRecentsViewScrollLinked && mRecentsView != null; float progress = Math.max(mCurrentShift.value, getScaleProgressDueToScroll()); int scrollOffset = setRecentsScroll ? mRecentsView.getScrollOffset() : 0; if (progress > 0 || scrollOffset != 0) { // Hide the divider as the tasks start moving. setDividerShown(false); } for (RemoteTargetHandle remoteHandle : mRemoteTargetHandles) { AnimatorControllerWithResistance playbackController = remoteHandle.getPlaybackController(); if (playbackController != null) { playbackController.setProgress(Math.max(mCurrentShift.value, getScaleProgressDueToScroll()), mDragLengthFactor); playbackController.setProgress(progress, mDragLengthFactor); } if (notSwipingToHome) { TaskViewSimulator taskViewSimulator = remoteHandle.getTaskViewSimulator(); if (setRecentsScroll) { taskViewSimulator.setScroll(mRecentsView.getScrollOffset()); taskViewSimulator.setScroll(scrollOffset); } taskViewSimulator.apply(remoteHandle.getTransformParams()); } Loading Loading @@ -2327,10 +2313,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, // "Catch up" with the displacement at mTaskbarCatchUpThreshold. if (displacement < mTaskbarCatchUpThreshold) { if (!mHasReachedOverviewThreshold) { setDividerShown(false /* shown */, true /* immediate */); mHasReachedOverviewThreshold = true; } return Utilities.mapToRange(displacement, mTaskbarAppWindowThreshold, mTaskbarCatchUpThreshold, 0, mTaskbarCatchUpThreshold, ACCEL_DEACCEL); } Loading @@ -2338,23 +2320,13 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, return displacement; } private void setDividerShown(boolean shown, boolean immediate) { if (mRecentsAnimationTargets == null) { if (!shown) { mDividerHiddenBeforeAnimation = true; } private void setDividerShown(boolean shown) { if (mRecentsAnimationTargets == null || mIsDividerShown == shown) { return; } if (mDividerAnimator != null) { mDividerAnimator.cancel(); } mDividerAnimator = TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRecentsAnimationTargets.nonApps, shown, (dividerAnimator) -> { dividerAnimator.start(); if (immediate) { dividerAnimator.end(); } }); mIsDividerShown = shown; TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRecentsAnimationTargets.nonApps, shown, null /* animatorHandler */); } /** Loading
quickstep/src/com/android/quickstep/TaskAnimationManager.java +2 −6 Original line number Diff line number Diff line Loading @@ -188,12 +188,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn return; } } else if (nonAppTargets.length > 0) { TaskViewUtils.createSplitAuxiliarySurfacesAnimator( nonAppTargets /* nonApps */, true /*shown*/, dividerAnimator -> { dividerAnimator.start(); dividerAnimator.end(); }); TaskViewUtils.createSplitAuxiliarySurfacesAnimator(nonAppTargets /* nonApps */, true /*shown*/, null /* animatorHandler */); } if (mController != null) { if (mLastAppearedTaskTarget == null Loading
quickstep/src/com/android/quickstep/TaskViewUtils.java +19 −11 Original line number Diff line number Diff line Loading @@ -679,28 +679,36 @@ public final class TaskViewUtils { /** * Creates an animation to show/hide the auxiliary surfaces (aka. divider bar), only calling * {@param animatorHandler} if there are valid surfaces to animate. * Passing null handler to apply the visibility immediately. * * @return the animator animating the surfaces */ public static ValueAnimator createSplitAuxiliarySurfacesAnimator( RemoteAnimationTarget[] nonApps, boolean shown, Consumer<ValueAnimator> animatorHandler) { @Nullable RemoteAnimationTarget[] nonApps, boolean shown, @Nullable Consumer<ValueAnimator> animatorHandler) { if (nonApps == null || nonApps.length == 0) { return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); List<SurfaceControl> auxiliarySurfaces = new ArrayList<>(nonApps.length); boolean hasSurfaceToAnimate = false; for (int i = 0; i < nonApps.length; ++i) { final RemoteAnimationTarget targ = nonApps[i]; final SurfaceControl leash = targ.leash; if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) { List<SurfaceControl> auxiliarySurfaces = new ArrayList<>(); for (RemoteAnimationTarget target : nonApps) { final SurfaceControl leash = target.leash; if (target.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) { auxiliarySurfaces.add(leash); hasSurfaceToAnimate = true; } } if (!hasSurfaceToAnimate) { if (auxiliarySurfaces.isEmpty()) { return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); if (animatorHandler == null) { // Apply the visibility directly without fade animation. for (SurfaceControl leash : auxiliarySurfaces) { t.setVisibility(leash, shown); } t.apply(); t.close(); return null; } Loading