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

Commit 6f7ba915 authored by Matt Sziklay's avatar Matt Sziklay Committed by Android (Google) Code Review
Browse files

Merge "Minimize oldest task when clicking New Window at window limit." into main

parents 29f42f1c 37bb1108
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -239,7 +239,6 @@ class DesktopMixedTransitionHandler(
            pending.minimizingTask?.let { minimizingTask -> findTaskChange(info, minimizingTask) }
        val launchChange = findDesktopTaskLaunchChange(info, pending.launchingTask)
        if (launchChange == null) {
            check(minimizeChange == null)
            check(immersiveExitChange == null)
            logV("No launch Change, returning")
            return false
+22 −16
Original line number Diff line number Diff line
@@ -592,9 +592,14 @@ class DesktopTasksController(
        val isMinimizingToPip = taskInfo.pictureInPictureParams?.isAutoEnterEnabled() ?: false
        // If task is going to PiP, start a PiP transition instead of a minimize transition
        if (isMinimizingToPip) {
            val requestInfo = TransitionRequestInfo(
                TRANSIT_PIP, /* triggerTask= */ null, taskInfo, /* remoteTransition= */ null,
                /* displayChange= */ null, /* flags= */ 0
            val requestInfo =
                TransitionRequestInfo(
                    TRANSIT_PIP,
                    /* triggerTask= */ null,
                    taskInfo,
                    /* remoteTransition= */ null,
                    /* displayChange= */ null,
                    /* flags= */ 0,
                )
            val requestRes = transitions.dispatchRequest(Binder(), requestInfo, /* skip= */ null)
            wct.merge(requestRes.second, true)
@@ -759,15 +764,12 @@ class DesktopTasksController(
        displayId: Int = DEFAULT_DISPLAY,
    ): IBinder {
        val taskIdToMinimize =
            if (launchingTaskId != null) {
                addAndGetMinimizeChanges(displayId, wct, newTaskId = launchingTaskId)
            } else {
                logW("Starting desktop task launch without checking the task-limit")
                // TODO(b/378920066): This currently does not respect the desktop window limit.
                //  It's possible that |launchingTaskId| is null when launching using an intent, and
                //  the task-limit should be respected then too.
                null
            }
            addAndGetMinimizeChanges(
                displayId,
                wct,
                newTaskId = launchingTaskId,
                launchingNewIntent = launchingTaskId == null,
            )
        val exitImmersiveResult =
            desktopImmersiveController.exitImmersiveIfApplicable(
                wct = wct,
@@ -1409,7 +1411,7 @@ class DesktopTasksController(
    override fun onTransitionConsumed(
        transition: IBinder,
        aborted: Boolean,
        finishT: Transaction?
        finishT: Transaction?,
    ) {
        pendingPipTransitionAndTask?.let { (pipTransition, taskId) ->
            if (transition == pipTransition) {
@@ -1985,10 +1987,14 @@ class DesktopTasksController(
    private fun addAndGetMinimizeChanges(
        displayId: Int,
        wct: WindowContainerTransaction,
        newTaskId: Int,
        newTaskId: Int?,
        launchingNewIntent: Boolean = false,
    ): Int? {
        if (!desktopTasksLimiter.isPresent) return null
        return desktopTasksLimiter.get().addAndGetMinimizeTaskChanges(displayId, wct, newTaskId)
        require(newTaskId == null || !launchingNewIntent)
        return desktopTasksLimiter
            .get()
            .addAndGetMinimizeTaskChanges(displayId, wct, newTaskId, launchingNewIntent)
    }

    private fun addPendingMinimizeTransition(transition: IBinder, taskIdToMinimize: Int) {
+20 −6
Original line number Diff line number Diff line
@@ -214,12 +214,17 @@ class DesktopTasksLimiter(
    fun addAndGetMinimizeTaskChanges(
        displayId: Int,
        wct: WindowContainerTransaction,
        newFrontTaskId: Int,
        newFrontTaskId: Int?,
        launchingNewIntent: Boolean = false,
    ): Int? {
        logV("addAndGetMinimizeTaskChanges, newFrontTask=%d", newFrontTaskId)
        val taskRepository = desktopUserRepositories.current
        val taskIdToMinimize =
            getTaskIdToMinimize(taskRepository.getExpandedTasksOrdered(displayId), newFrontTaskId)
            getTaskIdToMinimize(
                taskRepository.getExpandedTasksOrdered(displayId),
                newFrontTaskId,
                launchingNewIntent,
            )
        // If it's a running task, reorder it to back.
        taskIdToMinimize
            ?.let { shellTaskOrganizer.getRunningTaskInfo(it) }
@@ -242,15 +247,24 @@ class DesktopTasksLimiter(
     * Returns the minimized task from the list of visible tasks ordered from front to back with the
     * new task placed in front of other tasks.
     */
    fun getTaskIdToMinimize(visibleOrderedTasks: List<Int>, newTaskIdInFront: Int? = null): Int? {
    fun getTaskIdToMinimize(
        visibleOrderedTasks: List<Int>,
        newTaskIdInFront: Int? = null,
        launchingNewIntent: Boolean = false,
    ): Int? {
        return getTaskIdToMinimize(
            createOrderedTaskListWithGivenTaskInFront(visibleOrderedTasks, newTaskIdInFront)
            createOrderedTaskListWithGivenTaskInFront(visibleOrderedTasks, newTaskIdInFront),
            launchingNewIntent,
        )
    }

    /** Returns the Task to minimize given a list of visible tasks ordered from front to back. */
    private fun getTaskIdToMinimize(visibleOrderedTasks: List<Int>): Int? {
        if (visibleOrderedTasks.size <= maxTasksLimit) {
    private fun getTaskIdToMinimize(
        visibleOrderedTasks: List<Int>,
        launchingNewIntent: Boolean,
    ): Int? {
        val newTasksOpening = if (launchingNewIntent) 1 else 0
        if (visibleOrderedTasks.size + newTasksOpening <= maxTasksLimit) {
            logV("No need to minimize; tasks below limit")
            // No need to minimize anything
            return null
+12 −0
Original line number Diff line number Diff line
@@ -441,6 +441,18 @@ class DesktopTasksLimiterTest : ShellTestCase() {
        assertThat(minimizedTask).isEqualTo(tasks.last().taskId)
    }

    @Test
    fun getTaskToMinimize_tasksAtLimit_newIntentReturnsBackTask() {
        val tasks = (1..MAX_TASK_LIMIT).map { setUpFreeformTask() }
        val minimizedTask = desktopTasksLimiter.getTaskIdToMinimize(
            visibleOrderedTasks = tasks.map { it.taskId },
            newTaskIdInFront = null,
            launchingNewIntent = true)

        // first == front, last == back
        assertThat(minimizedTask).isEqualTo(tasks.last().taskId)
    }

    @Test
    fun minimizeTransitionReadyAndFinished_logsJankInstrumentationBeginAndEnd() {
        (1..<MAX_TASK_LIMIT).forEach { _ -> setUpFreeformTask() }