Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d91397a6 authored by Maryam Dehaini's avatar Maryam Dehaini Committed by Automerger Merge Worker
Browse files

Merge "Rename drag to desktop transitions" into udc-qpr-dev am: c5cbf470 am: 04b799d8

parents f7db3836 04b799d8
Loading
Loading
Loading
Loading
+21 −16
Original line number Diff line number Diff line
@@ -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 {
+18 −6
Original line number Diff line number Diff line
@@ -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
+6 −4
Original line number Diff line number Diff line
@@ -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;
+3 −3
Original line number Diff line number Diff line
@@ -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();
+8 −6
Original line number Diff line number Diff line
@@ -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 {