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

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

Merge "Create DesktopTasksLimiter even if there is no task limit" into main

parents 0cbc794a 3971e369
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -877,8 +877,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(
@@ -886,7 +885,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(
@@ -325,7 +331,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)