Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt +11 −13 Original line number Diff line number Diff line Loading @@ -86,10 +86,10 @@ class DesktopModeTaskRepository { ) { visibleTasksListeners[visibleTasksListener] = executor displayData.keyIterator().forEach { displayId -> val visibleTasks = getVisibleTaskCount(displayId) val visibleTasksCount = getVisibleTaskCount(displayId) val stashed = isStashed(displayId) executor.execute { visibleTasksListener.onVisibilityChanged(displayId, visibleTasks > 0) visibleTasksListener.onTasksVisibilityChanged(displayId, visibleTasksCount) visibleTasksListener.onStashedChanged(displayId, stashed) } } Loading Loading @@ -222,10 +222,8 @@ class DesktopModeTaskRepository { val otherDisplays = displayData.keyIterator().asSequence().filter { it != displayId } for (otherDisplayId in otherDisplays) { if (displayData[otherDisplayId].visibleTasks.remove(taskId)) { // Task removed from other display, check if we should notify listeners if (displayData[otherDisplayId].visibleTasks.isEmpty()) { notifyVisibleTaskListeners(otherDisplayId, hasVisibleFreeformTasks = false) } notifyVisibleTaskListeners(otherDisplayId, displayData[otherDisplayId].visibleTasks.size) } } } Loading @@ -248,15 +246,15 @@ class DesktopModeTaskRepository { ) } // Check if count changed and if there was no tasks or this is the first task if (prevCount != newCount && (prevCount == 0 || newCount == 0)) { notifyVisibleTaskListeners(displayId, newCount > 0) // Check if count changed if (prevCount != newCount) { notifyVisibleTaskListeners(displayId, newCount) } } private fun notifyVisibleTaskListeners(displayId: Int, hasVisibleFreeformTasks: Boolean) { private fun notifyVisibleTaskListeners(displayId: Int, visibleTasksCount: Int) { visibleTasksListeners.forEach { (listener, executor) -> executor.execute { listener.onVisibilityChanged(displayId, hasVisibleFreeformTasks) } executor.execute { listener.onTasksVisibilityChanged(displayId, visibleTasksCount) } } } Loading Loading @@ -379,9 +377,9 @@ class DesktopModeTaskRepository { */ interface VisibleTasksListener { /** * Called when the desktop starts or stops showing freeform tasks. * Called when the desktop changes the number of visible freeform tasks. */ fun onVisibilityChanged(displayId: Int, hasVisibleFreeformTasks: Boolean) {} fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) {} /** * Called when the desktop stashed status changes. Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +8 −6 Original line number Diff line number Diff line Loading @@ -106,8 +106,8 @@ class DesktopTasksController( visualIndicator = null } private val taskVisibilityListener = object : VisibleTasksListener { override fun onVisibilityChanged(displayId: Int, hasVisibleFreeformTasks: Boolean) { launchAdjacentController.launchAdjacentEnabled = !hasVisibleFreeformTasks override fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) { launchAdjacentController.launchAdjacentEnabled = visibleTasksCount == 0 } } private val dragToDesktopStateListener = object : DragToDesktopStateListener { Loading Loading @@ -1033,14 +1033,16 @@ class DesktopTasksController( SingleInstanceRemoteListener<DesktopTasksController, IDesktopTaskListener> private val listener: VisibleTasksListener = object : VisibleTasksListener { override fun onVisibilityChanged(displayId: Int, visible: Boolean) { override fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) { KtProtoLog.v( WM_SHELL_DESKTOP_MODE, "IDesktopModeImpl: onVisibilityChanged display=%d visible=%b", "IDesktopModeImpl: onVisibilityChanged display=%d visible=%d", displayId, visible visibleTasksCount ) remoteListener.call { l -> l.onVisibilityChanged(displayId, visible) } remoteListener.call { l -> l.onTasksVisibilityChanged(displayId, visibleTasksCount) } } override fun onStashedChanged(displayId: Int, stashed: Boolean) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/IDesktopTaskListener.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -22,8 +22,8 @@ package com.android.wm.shell.desktopmode; */ interface IDesktopTaskListener { /** Desktop task visibility has change. Visible if at least 1 task is visible. */ oneway void onVisibilityChanged(int displayId, boolean visible); /** Desktop tasks visibility has changed. Visible if at least 1 task is visible. */ oneway void onTasksVisibilityChanged(int displayId, int visibleTasksCount); /** Desktop task stashed status has changed. */ oneway void onStashedChanged(int displayId, boolean stashed); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt +19 −19 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.addVisibleTasksListener(listener, executor) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) } Loading @@ -148,7 +148,7 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.addVisibleTasksListener(listener, executor) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isFalse() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(0) // One call as adding listener notifies it assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(0) } Loading @@ -162,8 +162,8 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 2, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(2) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(2) } @Test Loading @@ -175,16 +175,16 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 1, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) assertThat(listener.hasVisibleTasksOnSecondaryDisplay).isFalse() assertThat(listener.visibleTasksCountOnSecondaryDisplay).isEqualTo(0) assertThat(listener.visibleChangesOnSecondaryDisplay).isEqualTo(0) repo.updateVisibleFreeformTasks(displayId = 1, taskId = 2, visible = true) executor.flushAll() // Listener for secondary display is notified assertThat(listener.hasVisibleTasksOnSecondaryDisplay).isTrue() assertThat(listener.visibleTasksCountOnSecondaryDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnSecondaryDisplay).isEqualTo(1) // No changes to listener for default display assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) Loading @@ -198,7 +198,7 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 1, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(1) // Mark task 1 visible on secondary display repo.updateVisibleFreeformTasks(displayId = 1, taskId = 1, visible = true) Loading @@ -208,11 +208,11 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { // 1 - visible task added // 2 - visible task removed assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(2) assertThat(listener.hasVisibleTasksOnDefaultDisplay).isFalse() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(0) // Secondary display should have 1 call for visible task added assertThat(listener.visibleChangesOnSecondaryDisplay).isEqualTo(1) assertThat(listener.hasVisibleTasksOnSecondaryDisplay).isTrue() assertThat(listener.visibleTasksCountOnSecondaryDisplay).isEqualTo(1) } @Test Loading @@ -224,17 +224,17 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 2, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(2) repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 1, visible = false) executor.flushAll() assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(3) repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 2, visible = false) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isFalse() assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(2) assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(0) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(4) } @Test Loading Loading @@ -397,8 +397,8 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { } class TestVisibilityListener : DesktopModeTaskRepository.VisibleTasksListener { var hasVisibleTasksOnDefaultDisplay = false var hasVisibleTasksOnSecondaryDisplay = false var visibleTasksCountOnDefaultDisplay = 0 var visibleTasksCountOnSecondaryDisplay = 0 var visibleChangesOnDefaultDisplay = 0 var visibleChangesOnSecondaryDisplay = 0 Loading @@ -409,14 +409,14 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { var stashedChangesOnDefaultDisplay = 0 var stashedChangesOnSecondaryDisplay = 0 override fun onVisibilityChanged(displayId: Int, hasVisibleFreeformTasks: Boolean) { override fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) { when (displayId) { DEFAULT_DISPLAY -> { hasVisibleTasksOnDefaultDisplay = hasVisibleFreeformTasks visibleTasksCountOnDefaultDisplay = visibleTasksCount visibleChangesOnDefaultDisplay++ } SECOND_DISPLAY -> { hasVisibleTasksOnSecondaryDisplay = hasVisibleFreeformTasks visibleTasksCountOnSecondaryDisplay = visibleTasksCount visibleChangesOnSecondaryDisplay++ } else -> fail("Visible task listener received unexpected display id: $displayId") Loading packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +2 −2 Original line number Diff line number Diff line Loading @@ -347,10 +347,10 @@ public final class WMShell implements desktopMode.addVisibleTasksListener( new DesktopModeTaskRepository.VisibleTasksListener() { @Override public void onVisibilityChanged(int displayId, boolean hasFreeformTasks) { public void onTasksVisibilityChanged(int displayId, int visibleTasksCount) { if (displayId == Display.DEFAULT_DISPLAY) { mSysUiState.setFlag(SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE, hasFreeformTasks) visibleTasksCount > 0) .commitUpdate(mDisplayTracker.getDefaultDisplayId()); } // TODO(b/278084491): update sysui state for changes on other displays Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt +11 −13 Original line number Diff line number Diff line Loading @@ -86,10 +86,10 @@ class DesktopModeTaskRepository { ) { visibleTasksListeners[visibleTasksListener] = executor displayData.keyIterator().forEach { displayId -> val visibleTasks = getVisibleTaskCount(displayId) val visibleTasksCount = getVisibleTaskCount(displayId) val stashed = isStashed(displayId) executor.execute { visibleTasksListener.onVisibilityChanged(displayId, visibleTasks > 0) visibleTasksListener.onTasksVisibilityChanged(displayId, visibleTasksCount) visibleTasksListener.onStashedChanged(displayId, stashed) } } Loading Loading @@ -222,10 +222,8 @@ class DesktopModeTaskRepository { val otherDisplays = displayData.keyIterator().asSequence().filter { it != displayId } for (otherDisplayId in otherDisplays) { if (displayData[otherDisplayId].visibleTasks.remove(taskId)) { // Task removed from other display, check if we should notify listeners if (displayData[otherDisplayId].visibleTasks.isEmpty()) { notifyVisibleTaskListeners(otherDisplayId, hasVisibleFreeformTasks = false) } notifyVisibleTaskListeners(otherDisplayId, displayData[otherDisplayId].visibleTasks.size) } } } Loading @@ -248,15 +246,15 @@ class DesktopModeTaskRepository { ) } // Check if count changed and if there was no tasks or this is the first task if (prevCount != newCount && (prevCount == 0 || newCount == 0)) { notifyVisibleTaskListeners(displayId, newCount > 0) // Check if count changed if (prevCount != newCount) { notifyVisibleTaskListeners(displayId, newCount) } } private fun notifyVisibleTaskListeners(displayId: Int, hasVisibleFreeformTasks: Boolean) { private fun notifyVisibleTaskListeners(displayId: Int, visibleTasksCount: Int) { visibleTasksListeners.forEach { (listener, executor) -> executor.execute { listener.onVisibilityChanged(displayId, hasVisibleFreeformTasks) } executor.execute { listener.onTasksVisibilityChanged(displayId, visibleTasksCount) } } } Loading Loading @@ -379,9 +377,9 @@ class DesktopModeTaskRepository { */ interface VisibleTasksListener { /** * Called when the desktop starts or stops showing freeform tasks. * Called when the desktop changes the number of visible freeform tasks. */ fun onVisibilityChanged(displayId: Int, hasVisibleFreeformTasks: Boolean) {} fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) {} /** * Called when the desktop stashed status changes. Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +8 −6 Original line number Diff line number Diff line Loading @@ -106,8 +106,8 @@ class DesktopTasksController( visualIndicator = null } private val taskVisibilityListener = object : VisibleTasksListener { override fun onVisibilityChanged(displayId: Int, hasVisibleFreeformTasks: Boolean) { launchAdjacentController.launchAdjacentEnabled = !hasVisibleFreeformTasks override fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) { launchAdjacentController.launchAdjacentEnabled = visibleTasksCount == 0 } } private val dragToDesktopStateListener = object : DragToDesktopStateListener { Loading Loading @@ -1033,14 +1033,16 @@ class DesktopTasksController( SingleInstanceRemoteListener<DesktopTasksController, IDesktopTaskListener> private val listener: VisibleTasksListener = object : VisibleTasksListener { override fun onVisibilityChanged(displayId: Int, visible: Boolean) { override fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) { KtProtoLog.v( WM_SHELL_DESKTOP_MODE, "IDesktopModeImpl: onVisibilityChanged display=%d visible=%b", "IDesktopModeImpl: onVisibilityChanged display=%d visible=%d", displayId, visible visibleTasksCount ) remoteListener.call { l -> l.onVisibilityChanged(displayId, visible) } remoteListener.call { l -> l.onTasksVisibilityChanged(displayId, visibleTasksCount) } } override fun onStashedChanged(displayId: Int, stashed: Boolean) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/IDesktopTaskListener.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -22,8 +22,8 @@ package com.android.wm.shell.desktopmode; */ interface IDesktopTaskListener { /** Desktop task visibility has change. Visible if at least 1 task is visible. */ oneway void onVisibilityChanged(int displayId, boolean visible); /** Desktop tasks visibility has changed. Visible if at least 1 task is visible. */ oneway void onTasksVisibilityChanged(int displayId, int visibleTasksCount); /** Desktop task stashed status has changed. */ oneway void onStashedChanged(int displayId, boolean stashed); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt +19 −19 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.addVisibleTasksListener(listener, executor) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) } Loading @@ -148,7 +148,7 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.addVisibleTasksListener(listener, executor) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isFalse() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(0) // One call as adding listener notifies it assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(0) } Loading @@ -162,8 +162,8 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 2, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(2) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(2) } @Test Loading @@ -175,16 +175,16 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 1, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) assertThat(listener.hasVisibleTasksOnSecondaryDisplay).isFalse() assertThat(listener.visibleTasksCountOnSecondaryDisplay).isEqualTo(0) assertThat(listener.visibleChangesOnSecondaryDisplay).isEqualTo(0) repo.updateVisibleFreeformTasks(displayId = 1, taskId = 2, visible = true) executor.flushAll() // Listener for secondary display is notified assertThat(listener.hasVisibleTasksOnSecondaryDisplay).isTrue() assertThat(listener.visibleTasksCountOnSecondaryDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnSecondaryDisplay).isEqualTo(1) // No changes to listener for default display assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) Loading @@ -198,7 +198,7 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 1, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(1) // Mark task 1 visible on secondary display repo.updateVisibleFreeformTasks(displayId = 1, taskId = 1, visible = true) Loading @@ -208,11 +208,11 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { // 1 - visible task added // 2 - visible task removed assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(2) assertThat(listener.hasVisibleTasksOnDefaultDisplay).isFalse() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(0) // Secondary display should have 1 call for visible task added assertThat(listener.visibleChangesOnSecondaryDisplay).isEqualTo(1) assertThat(listener.hasVisibleTasksOnSecondaryDisplay).isTrue() assertThat(listener.visibleTasksCountOnSecondaryDisplay).isEqualTo(1) } @Test Loading @@ -224,17 +224,17 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 2, visible = true) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isTrue() assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(2) repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 1, visible = false) executor.flushAll() assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(1) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(3) repo.updateVisibleFreeformTasks(DEFAULT_DISPLAY, taskId = 2, visible = false) executor.flushAll() assertThat(listener.hasVisibleTasksOnDefaultDisplay).isFalse() assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(2) assertThat(listener.visibleTasksCountOnDefaultDisplay).isEqualTo(0) assertThat(listener.visibleChangesOnDefaultDisplay).isEqualTo(4) } @Test Loading Loading @@ -397,8 +397,8 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { } class TestVisibilityListener : DesktopModeTaskRepository.VisibleTasksListener { var hasVisibleTasksOnDefaultDisplay = false var hasVisibleTasksOnSecondaryDisplay = false var visibleTasksCountOnDefaultDisplay = 0 var visibleTasksCountOnSecondaryDisplay = 0 var visibleChangesOnDefaultDisplay = 0 var visibleChangesOnSecondaryDisplay = 0 Loading @@ -409,14 +409,14 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() { var stashedChangesOnDefaultDisplay = 0 var stashedChangesOnSecondaryDisplay = 0 override fun onVisibilityChanged(displayId: Int, hasVisibleFreeformTasks: Boolean) { override fun onTasksVisibilityChanged(displayId: Int, visibleTasksCount: Int) { when (displayId) { DEFAULT_DISPLAY -> { hasVisibleTasksOnDefaultDisplay = hasVisibleFreeformTasks visibleTasksCountOnDefaultDisplay = visibleTasksCount visibleChangesOnDefaultDisplay++ } SECOND_DISPLAY -> { hasVisibleTasksOnSecondaryDisplay = hasVisibleFreeformTasks visibleTasksCountOnSecondaryDisplay = visibleTasksCount visibleChangesOnSecondaryDisplay++ } else -> fail("Visible task listener received unexpected display id: $displayId") Loading
packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +2 −2 Original line number Diff line number Diff line Loading @@ -347,10 +347,10 @@ public final class WMShell implements desktopMode.addVisibleTasksListener( new DesktopModeTaskRepository.VisibleTasksListener() { @Override public void onVisibilityChanged(int displayId, boolean hasFreeformTasks) { public void onTasksVisibilityChanged(int displayId, int visibleTasksCount) { if (displayId == Display.DEFAULT_DISPLAY) { mSysUiState.setFlag(SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE, hasFreeformTasks) visibleTasksCount > 0) .commitUpdate(mDisplayTracker.getDefaultDisplayId()); } // TODO(b/278084491): update sysui state for changes on other displays Loading