Loading quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +21 −10 Original line number Diff line number Diff line Loading @@ -249,6 +249,8 @@ 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 @@ -831,8 +833,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, // Notify when the animation starts flushOnRecentsAnimationAndLauncherBound(); TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, false /*shown*/, true /*animate*/); // Start hiding the divider setDividerShown(false, false /* immediate */); // Only add the callback to enable the input consumer after we actually have the controller mStateCallback.runOnceAtState(STATE_APP_CONTROLLER_RECEIVED | STATE_GESTURE_STARTED, Loading @@ -849,8 +851,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED); if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, true /*animate*/); setDividerShown(true, false /* immediate */); } // Defer clearing the controller and the targets until after we've updated the state Loading Loading @@ -1000,8 +1001,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, mStateCallback.setState(STATE_RESUME_LAST_TASK); } if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, false /*animate*/); setDividerShown(true, true /* immediate */); } break; } Loading Loading @@ -1653,8 +1653,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, mActivityInterface.onTransitionCancelled(wasVisible, mGestureState.getEndTarget()); if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, false /*animate*/); setDividerShown(true, true /* immediate */); } // Leave the pending invisible flag, as it may be used by wallpaper open animation. Loading Loading @@ -1920,8 +1919,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, @Override public void onRecentsAnimationFinished(RecentsAnimationController controller) { if (!controller.getFinishTargetIsLauncher()) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, true /*animate*/); setDividerShown(true, false /* immediate */); } mRecentsAnimationController = null; mRecentsAnimationTargets = null; Loading Loading @@ -2026,6 +2024,19 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, return scaleProgress; } private void setDividerShown(boolean shown, boolean immediate) { if (mDividerAnimator != null) { mDividerAnimator.cancel(); } mDividerAnimator = TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRecentsAnimationTargets.nonApps, shown, (dividerAnimator) -> { dividerAnimator.start(); if (immediate) { dividerAnimator.end(); } }); } /** * Used for winscope tracing, see launcher_trace.proto * @see com.android.systemui.shared.tracing.ProtoTraceable#writeToProto Loading quickstep/src/com/android/quickstep/TaskViewUtils.java +24 −35 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat. import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; /** * Utility class for helpful methods related to {@link TaskView} objects and their tasks. Loading Loading @@ -538,8 +539,16 @@ public final class TaskViewUtils { nonAppTargets, depthController, pa); if (launcherClosing) { // TODO(b/182592057): differentiate between "restore split" vs "launch fullscreen app" TaskViewUtils.setSplitAuxiliarySurfacesShown(nonAppTargets, true /*shown*/, true /*animate*/, pa); TaskViewUtils.createSplitAuxiliarySurfacesAnimator(nonAppTargets, true /*shown*/, (dividerAnimator) -> { // If split apps are launching, we want to delay showing the divider bar // until the very end once the apps are mostly in place. This is because we // aren't moving the divider leash in the relative position with the // launching apps. dividerAnimator.setStartDelay(pa.getDuration() - SPLIT_DIVIDER_ANIM_DURATION); pa.add(dividerAnimator); }); } Animator childStateAnimation = null; Loading Loading @@ -594,16 +603,17 @@ public final class TaskViewUtils { anim.addListener(windowAnimEndListener); } public static void setSplitAuxiliarySurfacesShown(RemoteAnimationTargetCompat[] nonApps, boolean shown, boolean animate) { setSplitAuxiliarySurfacesShown(nonApps, shown, animate,null); } private static void setSplitAuxiliarySurfacesShown( @NonNull RemoteAnimationTargetCompat[] nonApps, boolean shown, boolean animate, @Nullable PendingAnimation splitLaunchAnimation) { /** * Creates an animation to show/hide the auxiliary surfaces (aka. divider bar), only calling * {@param animatorHandler} if there are valid surfaces to animate. * * @return the animator animating the surfaces */ public static ValueAnimator createSplitAuxiliarySurfacesAnimator( RemoteAnimationTargetCompat[] nonApps, boolean shown, Consumer<ValueAnimator> animatorHandler) { if (nonApps == null || nonApps.length == 0) { return; return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); Loading @@ -618,20 +628,7 @@ public final class TaskViewUtils { } } if (!hasSurfaceToAnimate) { return; } if (!animate) { for (SurfaceControl leash : auxiliarySurfaces) { t.setAlpha(leash, shown ? 1 : 0); if (shown) { t.show(leash); } else { t.hide(leash); } } t.apply(); return; return null; } ValueAnimator dockFadeAnimator = ValueAnimator.ofFloat(0f, 1f); Loading Loading @@ -668,15 +665,7 @@ public final class TaskViewUtils { } }); dockFadeAnimator.setDuration(SPLIT_DIVIDER_ANIM_DURATION); if (splitLaunchAnimation != null) { // If split apps are launching, we want to delay showing the divider bar until the very // end once the apps are mostly in place. This is because we aren't moving the divider // leash in the relative position with the launching apps. dockFadeAnimator.setStartDelay( splitLaunchAnimation.getDuration() - SPLIT_DIVIDER_ANIM_DURATION); splitLaunchAnimation.add(dockFadeAnimator); } else { dockFadeAnimator.start(); } animatorHandler.accept(dockFadeAnimator); return dockFadeAnimator; } } quickstep/src/com/android/quickstep/views/RecentsView.java +6 −3 Original line number Diff line number Diff line Loading @@ -4241,9 +4241,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T if (isSuccess) { if (tv.getTaskIds()[1] != -1) { // TODO(b/194414938): make this part of the animations instead. TaskViewUtils.setSplitAuxiliarySurfacesShown(mRemoteTargetHandles[0] .getTransformParams().getTargetSet().nonApps, true /*shown*/, false /*animate*/); TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRemoteTargetHandles[0].getTransformParams().getTargetSet().nonApps, true /*shown*/, (dividerAnimator) -> { dividerAnimator.start(); dividerAnimator.end(); }); } if (ENABLE_QUICKSTEP_LIVE_TILE.get() && tv.isRunningTask()) { finishRecentsAnimation(false /* toRecents */, null); Loading Loading
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +21 −10 Original line number Diff line number Diff line Loading @@ -249,6 +249,8 @@ 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 @@ -831,8 +833,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, // Notify when the animation starts flushOnRecentsAnimationAndLauncherBound(); TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, false /*shown*/, true /*animate*/); // Start hiding the divider setDividerShown(false, false /* immediate */); // Only add the callback to enable the input consumer after we actually have the controller mStateCallback.runOnceAtState(STATE_APP_CONTROLLER_RECEIVED | STATE_GESTURE_STARTED, Loading @@ -849,8 +851,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED); if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, true /*animate*/); setDividerShown(true, false /* immediate */); } // Defer clearing the controller and the targets until after we've updated the state Loading Loading @@ -1000,8 +1001,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, mStateCallback.setState(STATE_RESUME_LAST_TASK); } if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, false /*animate*/); setDividerShown(true, true /* immediate */); } break; } Loading Loading @@ -1653,8 +1653,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, mActivityInterface.onTransitionCancelled(wasVisible, mGestureState.getEndTarget()); if (mRecentsAnimationTargets != null) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, false /*animate*/); setDividerShown(true, true /* immediate */); } // Leave the pending invisible flag, as it may be used by wallpaper open animation. Loading Loading @@ -1920,8 +1919,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, @Override public void onRecentsAnimationFinished(RecentsAnimationController controller) { if (!controller.getFinishTargetIsLauncher()) { TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true /*shown*/, true /*animate*/); setDividerShown(true, false /* immediate */); } mRecentsAnimationController = null; mRecentsAnimationTargets = null; Loading Loading @@ -2026,6 +2024,19 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, return scaleProgress; } private void setDividerShown(boolean shown, boolean immediate) { if (mDividerAnimator != null) { mDividerAnimator.cancel(); } mDividerAnimator = TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRecentsAnimationTargets.nonApps, shown, (dividerAnimator) -> { dividerAnimator.start(); if (immediate) { dividerAnimator.end(); } }); } /** * Used for winscope tracing, see launcher_trace.proto * @see com.android.systemui.shared.tracing.ProtoTraceable#writeToProto Loading
quickstep/src/com/android/quickstep/TaskViewUtils.java +24 −35 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat. import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; /** * Utility class for helpful methods related to {@link TaskView} objects and their tasks. Loading Loading @@ -538,8 +539,16 @@ public final class TaskViewUtils { nonAppTargets, depthController, pa); if (launcherClosing) { // TODO(b/182592057): differentiate between "restore split" vs "launch fullscreen app" TaskViewUtils.setSplitAuxiliarySurfacesShown(nonAppTargets, true /*shown*/, true /*animate*/, pa); TaskViewUtils.createSplitAuxiliarySurfacesAnimator(nonAppTargets, true /*shown*/, (dividerAnimator) -> { // If split apps are launching, we want to delay showing the divider bar // until the very end once the apps are mostly in place. This is because we // aren't moving the divider leash in the relative position with the // launching apps. dividerAnimator.setStartDelay(pa.getDuration() - SPLIT_DIVIDER_ANIM_DURATION); pa.add(dividerAnimator); }); } Animator childStateAnimation = null; Loading Loading @@ -594,16 +603,17 @@ public final class TaskViewUtils { anim.addListener(windowAnimEndListener); } public static void setSplitAuxiliarySurfacesShown(RemoteAnimationTargetCompat[] nonApps, boolean shown, boolean animate) { setSplitAuxiliarySurfacesShown(nonApps, shown, animate,null); } private static void setSplitAuxiliarySurfacesShown( @NonNull RemoteAnimationTargetCompat[] nonApps, boolean shown, boolean animate, @Nullable PendingAnimation splitLaunchAnimation) { /** * Creates an animation to show/hide the auxiliary surfaces (aka. divider bar), only calling * {@param animatorHandler} if there are valid surfaces to animate. * * @return the animator animating the surfaces */ public static ValueAnimator createSplitAuxiliarySurfacesAnimator( RemoteAnimationTargetCompat[] nonApps, boolean shown, Consumer<ValueAnimator> animatorHandler) { if (nonApps == null || nonApps.length == 0) { return; return null; } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); Loading @@ -618,20 +628,7 @@ public final class TaskViewUtils { } } if (!hasSurfaceToAnimate) { return; } if (!animate) { for (SurfaceControl leash : auxiliarySurfaces) { t.setAlpha(leash, shown ? 1 : 0); if (shown) { t.show(leash); } else { t.hide(leash); } } t.apply(); return; return null; } ValueAnimator dockFadeAnimator = ValueAnimator.ofFloat(0f, 1f); Loading Loading @@ -668,15 +665,7 @@ public final class TaskViewUtils { } }); dockFadeAnimator.setDuration(SPLIT_DIVIDER_ANIM_DURATION); if (splitLaunchAnimation != null) { // If split apps are launching, we want to delay showing the divider bar until the very // end once the apps are mostly in place. This is because we aren't moving the divider // leash in the relative position with the launching apps. dockFadeAnimator.setStartDelay( splitLaunchAnimation.getDuration() - SPLIT_DIVIDER_ANIM_DURATION); splitLaunchAnimation.add(dockFadeAnimator); } else { dockFadeAnimator.start(); } animatorHandler.accept(dockFadeAnimator); return dockFadeAnimator; } }
quickstep/src/com/android/quickstep/views/RecentsView.java +6 −3 Original line number Diff line number Diff line Loading @@ -4241,9 +4241,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T if (isSuccess) { if (tv.getTaskIds()[1] != -1) { // TODO(b/194414938): make this part of the animations instead. TaskViewUtils.setSplitAuxiliarySurfacesShown(mRemoteTargetHandles[0] .getTransformParams().getTargetSet().nonApps, true /*shown*/, false /*animate*/); TaskViewUtils.createSplitAuxiliarySurfacesAnimator( mRemoteTargetHandles[0].getTransformParams().getTargetSet().nonApps, true /*shown*/, (dividerAnimator) -> { dividerAnimator.start(); dividerAnimator.end(); }); } if (ENABLE_QUICKSTEP_LIVE_TILE.get() && tv.isRunningTask()) { finishRecentsAnimation(false /* toRecents */, null); Loading