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

Commit c96fddec authored by Yuichiro Hanada's avatar Yuichiro Hanada Committed by Android (Google) Code Review
Browse files

Merge "Add DesktopMixedTransitionHandler.startMinimizeTransition" into main

parents c10218e7 ffa18950
Loading
Loading
Loading
Loading
+34 −4
Original line number Diff line number Diff line
@@ -71,9 +71,31 @@ class DesktopMixedTransitionHandler(
        wct: WindowContainerTransaction?,
    ) = freeformTaskTransitionHandler.startWindowingModeTransition(targetWindowingMode, wct)

    /** Delegates starting minimized mode transition to [FreeformTaskTransitionHandler]. */
    override fun startMinimizedModeTransition(wct: WindowContainerTransaction?): IBinder =
        freeformTaskTransitionHandler.startMinimizedModeTransition(wct)
    /**
     * Starts a minimize transition for [taskId], with [isLastTask] which is true if the task going
     * to be minimized is the last visible task.
     */
    override fun startMinimizedModeTransition(
        wct: WindowContainerTransaction?,
        taskId: Int,
        isLastTask: Boolean,
    ): IBinder {
        if (!DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_EXIT_BY_MINIMIZE_TRANSITION_BUGFIX.isTrue) {
            return freeformTaskTransitionHandler.startMinimizedModeTransition(
                wct,
                taskId,
                isLastTask,
            )
        }
        requireNotNull(wct)
        return transitions
            .startTransition(Transitions.TRANSIT_MINIMIZE, wct, /* handler= */ this)
            .also { transition ->
                pendingMixedTransitions.add(
                    PendingMixedTransition.Minimize(transition, taskId, isLastTask)
                )
            }
    }

    /** Delegates starting PiP transition to [FreeformTaskTransitionHandler]. */
    override fun startPipTransition(wct: WindowContainerTransaction?): IBinder =
@@ -298,7 +320,15 @@ class DesktopMixedTransitionHandler(
        finishTransaction: SurfaceControl.Transaction,
        finishCallback: TransitionFinishCallback,
    ): Boolean {
        if (!DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION.isTrue) return false
        val shouldAnimate =
            if (info.type == Transitions.TRANSIT_MINIMIZE) {
                DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_EXIT_BY_MINIMIZE_TRANSITION_BUGFIX.isTrue
            } else {
                DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION.isTrue
            }
        if (!shouldAnimate) {
            return false
        }

        val minimizeChange = findTaskChange(info, pending.minimizingTask)
        if (minimizeChange == null) {
+3 −1
Original line number Diff line number Diff line
@@ -844,7 +844,9 @@ class DesktopTasksController(
            )

        wct.reorder(taskInfo.token, false)
        val transition = freeformTaskTransitionStarter.startMinimizedModeTransition(wct)
        val isLastTask = taskRepository.isOnlyVisibleNonClosingTask(taskId, displayId)
        val transition: IBinder =
            freeformTaskTransitionStarter.startMinimizedModeTransition(wct, taskId, isLastTask)
        desktopTasksLimiter.ifPresent {
            it.addPendingMinimizeChange(
                transition = transition,
+2 −1
Original line number Diff line number Diff line
@@ -93,7 +93,8 @@ public class FreeformTaskTransitionHandler
    }

    @Override
    public IBinder startMinimizedModeTransition(WindowContainerTransaction wct) {
    public IBinder startMinimizedModeTransition(
            WindowContainerTransaction wct, int taskId, boolean isLastTask) {
        final int type = Transitions.TRANSIT_MINIMIZE;
        final IBinder token = mTransitions.startTransition(type, wct, this);
        mPendingTransitionTokens.add(token);
+5 −2
Original line number Diff line number Diff line
@@ -38,10 +38,13 @@ public interface FreeformTaskTransitionStarter {
     * Starts window minimization transition
     *
     * @param wct the {@link WindowContainerTransaction} that changes the windowing mode
     * @param taskId the task id of the task being minimized
     * @param isLastTask true if the task being minimized is the last visible task
     *
     * @return the started transition
     */
    IBinder startMinimizedModeTransition(WindowContainerTransaction wct);
    IBinder startMinimizedModeTransition(
            WindowContainerTransaction wct, int taskId, boolean isLastTask);

    /**
     * Starts close window transition
+3 −1
Original line number Diff line number Diff line
@@ -389,7 +389,9 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel, FocusT
            } else if (id == R.id.back_button) {
                mTaskOperations.injectBackKey(mDisplayId);
            } else if (id == R.id.minimize_window) {
                mTaskOperations.minimizeTask(mTaskToken);
                // This minimize button uses the same effect for any minimization. The last argument
                // doesn't matter.
                mTaskOperations.minimizeTask(mTaskToken, mTaskId, /* isLastTask= */ false);
            } else if (id == R.id.maximize_window) {
                RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId);
                final DisplayAreaInfo rootDisplayAreaInfo =
Loading