Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +2 −3 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -886,7 +885,7 @@ public abstract class WMShellModule { transitions, desktopUserRepositories, shellTaskOrganizer, maxTaskLimit, maxTaskLimit <= 0 ? null : maxTaskLimit, interactionJankMonitor, context, handler)); Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt +15 −9 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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( Loading Loading @@ -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 Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt +14 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +2 −3 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -886,7 +885,7 @@ public abstract class WMShellModule { transitions, desktopUserRepositories, shellTaskOrganizer, maxTaskLimit, maxTaskLimit <= 0 ? null : maxTaskLimit, interactionJankMonitor, context, handler)); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt +15 −9 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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( Loading Loading @@ -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 Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt +14 −0 Original line number Diff line number Diff line Loading @@ -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) Loading