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

Commit 3971e369 authored by Yuichiro Hanada's avatar Yuichiro Hanada
Browse files

Create DesktopTasksLimiter even if there is no task limit

because DesktopTasksLimiter is responsible for reporting minimization
events to DesktopRepository too.
We need it even if there is no task limit to make sure the state of
DesktopRepository gets updated correctly.

Bug: 397323419
Test: WMShellUnitTests
Flag: EXEMPT - bug fix
Change-Id: If3c25d10b6cc44b58363ff7de1d8334bdf8faa27
parent 94d03ec5
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -873,8 +873,7 @@ public abstract class WMShellModule {
            @ShellMainThread Handler handler) {
        int maxTaskLimit = DesktopModeStatus.getMaxTaskLimit(context);
        if (!DesktopModeStatus.canEnterDesktopMode(context)
                || !ENABLE_DESKTOP_WINDOWING_TASK_LIMIT.isTrue()
                || maxTaskLimit <= 0) {
                || !ENABLE_DESKTOP_WINDOWING_TASK_LIMIT.isTrue()) {
            return Optional.empty();
        }
        return Optional.of(
@@ -882,7 +881,7 @@ public abstract class WMShellModule {
                        transitions,
                        desktopUserRepositories,
                        shellTaskOrganizer,
                        maxTaskLimit,
                        maxTaskLimit <= 0 ? null : maxTaskLimit,
                        interactionJankMonitor,
                        context,
                        handler));
+15 −9
Original line number Diff line number Diff line
@@ -38,17 +38,17 @@ import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.transition.Transitions.TransitionObserver

/**
 * Limits the number of tasks shown in Desktop Mode.
 * Keeps track of minimized tasks and limits the number of tasks shown in Desktop Mode.
 *
 * This class should only be used if
 * [android.window.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_TASK_LIMIT] is enabled and
 * [maxTasksLimit] is strictly greater than 0.
 * [maxTasksLimit] must be strictly greater than 0 if it's given.
 *
 * TODO(b/400634379): Separate two responsibilities of this class into two classes.
 */
class DesktopTasksLimiter(
    transitions: Transitions,
    private val desktopUserRepositories: DesktopUserRepositories,
    private val shellTaskOrganizer: ShellTaskOrganizer,
    private val maxTasksLimit: Int,
    private val maxTasksLimit: Int?,
    private val interactionJankMonitor: InteractionJankMonitor,
    private val context: Context,
    @ShellMainThread private val handler: Handler,
@@ -59,13 +59,19 @@ class DesktopTasksLimiter(
    private var userId: Int

    init {
        require(maxTasksLimit > 0) {
            "DesktopTasksLimiter: maxTasksLimit should be greater than 0. Current value: $maxTasksLimit."
        maxTasksLimit?.let {
            require(it > 0) {
                "DesktopTasksLimiter: maxTasksLimit should be greater than 0. Current value: $it."
            }
        }
        transitions.registerObserver(minimizeTransitionObserver)
        userId = ActivityManager.getCurrentUser()
        desktopUserRepositories.current.addActiveTaskListener(leftoverMinimizedTasksRemover)
        if (maxTasksLimit != null) {
            logV("Starting limiter with a maximum of %d tasks", maxTasksLimit)
        } else {
            logV("Starting limiter without the task limit")
        }
    }

    data class TaskDetails(
@@ -324,7 +330,7 @@ class DesktopTasksLimiter(
        launchingNewIntent: Boolean,
    ): Int? {
        val newTasksOpening = if (launchingNewIntent) 1 else 0
        if (visibleOrderedTasks.size + newTasksOpening <= maxTasksLimit) {
        if (visibleOrderedTasks.size + newTasksOpening <= (maxTasksLimit ?: Int.MAX_VALUE)) {
            logV("No need to minimize; tasks below limit")
            // No need to minimize anything
            return null
+14 −0
Original line number Diff line number Diff line
@@ -171,6 +171,20 @@ class DesktopTasksLimiterTest : ShellTestCase() {
        }
    }

    @Test
    fun createDesktopTasksLimiter_withNoLimit_shouldSucceed() {
        // Instantiation should succeed without an error.
        DesktopTasksLimiter(
            transitions,
            userRepositories,
            shellTaskOrganizer,
            maxTasksLimit = null,
            interactionJankMonitor,
            mContext,
            handler,
        )
    }

    @Test
    fun addPendingMinimizeTransition_taskIsNotMinimized() {
        desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0)