diff options
5 files changed, 56 insertions, 35 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index 6d14440c9b18..f8d7b6bc3aad 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -202,17 +202,18 @@ class DesktopTasksController(      }      /** -     * Moves a single task to freeform and sets the taskBounds to the passed in bounds, -     * startBounds +     * The first part of the animated move to desktop transition. Applies the changes to move task +     * to desktop mode and sets the taskBounds to the passed in bounds, startBounds. This is +     * followed with a call to {@link finishMoveToDesktop} or {@link cancelMoveToDesktop}.       */ -    fun moveToFreeform( +    fun startMoveToDesktop(              taskInfo: RunningTaskInfo,              startBounds: Rect,              dragToDesktopValueAnimator: MoveToDesktopAnimator      ) {          KtProtoLog.v(              WM_SHELL_DESKTOP_MODE, -            "DesktopTasksController: moveToFreeform with bounds taskId=%d", +            "DesktopTasksController: startMoveToDesktop taskId=%d",              taskInfo.taskId          )          val wct = WindowContainerTransaction() @@ -221,18 +222,21 @@ class DesktopTasksController(          wct.setBounds(taskInfo.token, startBounds)          if (Transitions.ENABLE_SHELL_TRANSITIONS) { -            enterDesktopTaskTransitionHandler.startMoveToFreeformAnimation(wct, -                    dragToDesktopValueAnimator, mOnAnimationFinishedCallback) +            enterDesktopTaskTransitionHandler.startMoveToDesktop(wct, dragToDesktopValueAnimator, +                    mOnAnimationFinishedCallback)          } else {              shellTaskOrganizer.applyTransaction(wct)          }      } -    /** Brings apps to front and sets freeform task bounds */ -    private fun moveToDesktopWithAnimation(taskInfo: RunningTaskInfo, freeformBounds: Rect) { +    /** +     * The second part of the animated move to desktop transition, called after +     * {@link startMoveToDesktop}. Brings apps to front and sets freeform task bounds. +     */ +    private fun finalizeMoveToDesktop(taskInfo: RunningTaskInfo, freeformBounds: Rect) {          KtProtoLog.v(              WM_SHELL_DESKTOP_MODE, -            "DesktopTasksController: moveToDesktop with animation taskId=%d", +            "DesktopTasksController: finalizeMoveToDesktop taskId=%d",              taskInfo.taskId          )          val wct = WindowContainerTransaction() @@ -241,8 +245,8 @@ class DesktopTasksController(          wct.setBounds(taskInfo.token, freeformBounds)          if (Transitions.ENABLE_SHELL_TRANSITIONS) { -            enterDesktopTaskTransitionHandler.startTransition( -                Transitions.TRANSIT_ENTER_DESKTOP_MODE, wct, mOnAnimationFinishedCallback) +            enterDesktopTaskTransitionHandler.finalizeMoveToDesktop(wct, +                    mOnAnimationFinishedCallback)          } else {              shellTaskOrganizer.applyTransaction(wct)              releaseVisualIndicator() @@ -272,13 +276,14 @@ class DesktopTasksController(      }      /** -     * Move a task to fullscreen after being dragged from fullscreen and released back into -     * status bar area +     * The second part of the animated move to desktop transition, called after +     * {@link startMoveToDesktop}. Move a task to fullscreen after being dragged from fullscreen +     * and released back into status bar area.       */ -    fun cancelMoveToFreeform(task: RunningTaskInfo, moveToDesktopAnimator: MoveToDesktopAnimator) { +    fun cancelMoveToDesktop(task: RunningTaskInfo, moveToDesktopAnimator: MoveToDesktopAnimator) {          KtProtoLog.v(              WM_SHELL_DESKTOP_MODE, -            "DesktopTasksController: cancelMoveToFreeform taskId=%d", +            "DesktopTasksController: cancelMoveToDesktop taskId=%d",              task.taskId          )          val wct = WindowContainerTransaction() @@ -784,7 +789,7 @@ class DesktopTasksController(              taskInfo: RunningTaskInfo,              freeformBounds: Rect      ) { -        moveToDesktopWithAnimation(taskInfo, freeformBounds) +        finalizeMoveToDesktop(taskInfo, freeformBounds)      }      private fun getStatusBarHeight(taskInfo: RunningTaskInfo): Int { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java index 650cac5cb999..1acf783257f2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java @@ -79,7 +79,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition       * @param wct WindowContainerTransaction for transition       * @param onAnimationEndCallback to be called after animation       */ -    public void startTransition(@WindowManager.TransitionType int type, +    private void startTransition(@WindowManager.TransitionType int type,              @NonNull WindowContainerTransaction wct,              Consumer<SurfaceControl.Transaction> onAnimationEndCallback) {          mOnAnimationFinishedCallback = onAnimationEndCallback; @@ -88,17 +88,29 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition      }      /** -     * Starts Transition of type TRANSIT_ENTER_FREEFORM +     * Starts Transition of type TRANSIT_START_MOVE_TO_DESKTOP_MODE       * @param wct WindowContainerTransaction for transition       * @param moveToDesktopAnimator Animator that shrinks and positions task during two part move       *                              to desktop animation       * @param onAnimationEndCallback to be called after animation       */ -    public void startMoveToFreeformAnimation(@NonNull WindowContainerTransaction wct, +    public void startMoveToDesktop(@NonNull WindowContainerTransaction wct,              @NonNull MoveToDesktopAnimator moveToDesktopAnimator,              Consumer<SurfaceControl.Transaction> onAnimationEndCallback) {          mMoveToDesktopAnimator = moveToDesktopAnimator; -        startTransition(Transitions.TRANSIT_ENTER_FREEFORM, wct, onAnimationEndCallback); +        startTransition(Transitions.TRANSIT_START_MOVE_TO_DESKTOP_MODE, wct, +                onAnimationEndCallback); +    } + +    /** +     * Starts Transition of type TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE +     * @param wct WindowContainerTransaction for transition +     * @param onAnimationEndCallback to be called after animation +     */ +    public void finalizeMoveToDesktop(@NonNull WindowContainerTransaction wct, +            Consumer<SurfaceControl.Transaction> onAnimationEndCallback) { +        startTransition(Transitions.TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE, wct, +                onAnimationEndCallback);      }      /** @@ -155,7 +167,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition          }          final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo(); -        if (type == Transitions.TRANSIT_ENTER_FREEFORM +        if (type == Transitions.TRANSIT_START_MOVE_TO_DESKTOP_MODE                  && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) {              // Transitioning to freeform but keeping fullscreen bounds, so the crop is set              // to null and we don't require an animation @@ -182,7 +194,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition          }          Rect endBounds = change.getEndAbsBounds(); -        if (type == Transitions.TRANSIT_ENTER_DESKTOP_MODE +        if (type == Transitions.TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE                  && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM                  && !endBounds.isEmpty()) {              // This Transition animates a task to freeform bounds after being dragged into freeform diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java index 75659960bc32..4ca383f66267 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java @@ -149,11 +149,13 @@ public class Transitions implements RemoteCallable<Transitions>,      /** Transition type for maximize to freeform transition. */      public static final int TRANSIT_RESTORE_FROM_MAXIMIZE = WindowManager.TRANSIT_FIRST_CUSTOM + 9; -    /** Transition type to freeform in desktop mode. */ -    public static final int TRANSIT_ENTER_FREEFORM = WindowManager.TRANSIT_FIRST_CUSTOM + 10; +    /** Transition type for starting the move to desktop mode. */ +    public static final int TRANSIT_START_MOVE_TO_DESKTOP_MODE = +            WindowManager.TRANSIT_FIRST_CUSTOM + 10; -    /** Transition type to freeform in desktop mode. */ -    public static final int TRANSIT_ENTER_DESKTOP_MODE = WindowManager.TRANSIT_FIRST_CUSTOM + 11; +    /** Transition type for finalizing the move to desktop mode. */ +    public static final int TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE = +            WindowManager.TRANSIT_FIRST_CUSTOM + 11;      /** Transition type to fullscreen from desktop mode. */      public static final int TRANSIT_EXIT_DESKTOP_MODE = WindowManager.TRANSIT_FIRST_CUSTOM + 12; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java index 14f2f9b9fcf5..48bdbecce018 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java @@ -197,7 +197,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {              @NonNull TransitionInfo info,              @NonNull TransitionInfo.Change change) {          if (change.getMode() == WindowManager.TRANSIT_CHANGE -                && (info.getType() == Transitions.TRANSIT_ENTER_DESKTOP_MODE +                && (info.getType() == Transitions.TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE                  || info.getType() == Transitions.TRANSIT_CANCEL_ENTERING_DESKTOP_MODE                  || info.getType() == Transitions.TRANSIT_EXIT_DESKTOP_MODE                  || info.getType() == Transitions.TRANSIT_DESKTOP_MODE_TOGGLE_RESIZE)) { @@ -616,7 +616,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {                      } else if (mMoveToDesktopAnimator != null) {                          relevantDecor.incrementRelayoutBlock();                          mDesktopTasksController.ifPresent( -                                c -> c.cancelMoveToFreeform(relevantDecor.mTaskInfo, +                                c -> c.cancelMoveToDesktop(relevantDecor.mTaskInfo,                                          mMoveToDesktopAnimator));                          mMoveToDesktopAnimator = null;                          return; @@ -643,7 +643,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {                                      mDragToDesktopAnimationStartBounds, relevantDecor.mTaskInfo,                                      relevantDecor.mTaskSurface);                              mDesktopTasksController.ifPresent( -                                    c -> c.moveToFreeform(relevantDecor.mTaskInfo, +                                    c -> c.startMoveToDesktop(relevantDecor.mTaskInfo,                                              mDragToDesktopAnimationStartBounds,                                              mMoveToDesktopAnimator));                              mMoveToDesktopAnimator.startAnimation(); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandlerTest.java index c6642f3472f0..885ae3851c6d 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandlerTest.java @@ -99,16 +99,17 @@ public class EnterDesktopTaskTransitionHandlerTest {          final int taskId = 1;          WindowContainerTransaction wct = new WindowContainerTransaction();          doReturn(mToken).when(mTransitions) -                .startTransition(Transitions.TRANSIT_ENTER_FREEFORM, wct, +                .startTransition(Transitions.TRANSIT_START_MOVE_TO_DESKTOP_MODE, wct,                          mEnterDesktopTaskTransitionHandler);          doReturn(taskId).when(mMoveToDesktopAnimator).getTaskId(); -        mEnterDesktopTaskTransitionHandler.startMoveToFreeformAnimation(wct, +        mEnterDesktopTaskTransitionHandler.startMoveToDesktop(wct,                  mMoveToDesktopAnimator, null);          TransitionInfo.Change change =                  createChange(WindowManager.TRANSIT_CHANGE, taskId, WINDOWING_MODE_FREEFORM); -        TransitionInfo info = createTransitionInfo(Transitions.TRANSIT_ENTER_FREEFORM, change); +        TransitionInfo info = createTransitionInfo(Transitions.TRANSIT_START_MOVE_TO_DESKTOP_MODE, +                change);          assertTrue(mEnterDesktopTaskTransitionHandler @@ -120,17 +121,18 @@ public class EnterDesktopTaskTransitionHandlerTest {      @Test      public void testTransitEnterDesktopModeAnimation() throws Throwable { -        final int transitionType = Transitions.TRANSIT_ENTER_DESKTOP_MODE; +        final int transitionType = Transitions.TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE;          final int taskId = 1;          WindowContainerTransaction wct = new WindowContainerTransaction();          doReturn(mToken).when(mTransitions)                  .startTransition(transitionType, wct, mEnterDesktopTaskTransitionHandler); -        mEnterDesktopTaskTransitionHandler.startTransition(transitionType, wct, null); +        mEnterDesktopTaskTransitionHandler.finalizeMoveToDesktop(wct, null);          TransitionInfo.Change change =                  createChange(WindowManager.TRANSIT_CHANGE, taskId, WINDOWING_MODE_FREEFORM);          change.setEndAbsBounds(new Rect(0, 0, 1, 1)); -        TransitionInfo info = createTransitionInfo(Transitions.TRANSIT_ENTER_DESKTOP_MODE, change); +        TransitionInfo info = createTransitionInfo( +                Transitions.TRANSIT_FINALIZE_MOVE_TO_DESKTOP_MODE, change);          runOnUiThread(() -> {              try {  |