Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt +25 −12 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.isExitDesktop import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.TransitionUtil import com.android.wm.shell.shared.TransitionUtil.isClosingMode import com.android.wm.shell.shared.TransitionUtil.isOpeningMode import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions Loading Loading @@ -345,18 +347,29 @@ class DesktopTasksTransitionObserver( } private fun updateTopTransparentFullscreenTaskId(info: TransitionInfo) { run forEachLoop@{ info.changes.forEach { change -> change.taskInfo?.let { task -> val desktopRepository = desktopUserRepositories.getProfile(task.userId) val displayId = task.displayId val transparentTaskId = desktopRepository.getTopTransparentFullscreenTaskId(displayId) if (transparentTaskId == null) return@forEachLoop val changeMode = change.mode val taskId = task.taskId val isTopTransparentFullscreenTaskClosing = taskId == transparentTaskId && isClosingMode(changeMode) val isNonTopTransparentFullscreenTaskOpening = taskId != transparentTaskId && isOpeningMode(changeMode) // Clear `topTransparentFullscreenTask` information from repository if task // is closed or sent to back. // is closed, sent to back or if a different task is opened, brought to front. if ( TransitionUtil.isClosingMode(change.mode) && task.taskId == desktopRepository.getTopTransparentFullscreenTaskId(displayId) isTopTransparentFullscreenTaskClosing || isNonTopTransparentFullscreenTaskOpening ) { desktopRepository.clearTopTransparentFullscreenTaskId(displayId) return@forEachLoop } } } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserverTest.kt +44 −0 Original line number Diff line number Diff line Loading @@ -335,6 +335,50 @@ class DesktopTasksTransitionObserverTest { verify(taskRepository).clearTopTransparentFullscreenTaskId(topTransparentTask.displayId) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY, Flags.FLAG_INCLUDE_TOP_TRANSPARENT_FULLSCREEN_TASK_IN_DESKTOP_HEURISTIC, ) fun nonTopTransparentTaskOpened_clearTopTransparentTaskIdFromRepository() { val mockTransition = Mockito.mock(IBinder::class.java) val topTransparentTask = createTaskInfo(1) val nonTopTransparentTask = createTaskInfo(2) whenever(taskRepository.getTopTransparentFullscreenTaskId(any())) .thenReturn(topTransparentTask.taskId) transitionObserver.onTransitionReady( transition = mockTransition, info = createOpenChangeTransition(nonTopTransparentTask), startTransaction = mock(), finishTransaction = mock(), ) verify(taskRepository).clearTopTransparentFullscreenTaskId(topTransparentTask.displayId) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY, Flags.FLAG_INCLUDE_TOP_TRANSPARENT_FULLSCREEN_TASK_IN_DESKTOP_HEURISTIC, ) fun nonTopTransparentTaskSentToFront_clearTopTransparentTaskIdFromRepository() { val mockTransition = Mockito.mock(IBinder::class.java) val topTransparentTask = createTaskInfo(1) val nonTopTransparentTask = createTaskInfo(2) whenever(taskRepository.getTopTransparentFullscreenTaskId(any())) .thenReturn(topTransparentTask.taskId) transitionObserver.onTransitionReady( transition = mockTransition, info = createToFrontTransition(nonTopTransparentTask), startTransaction = mock(), finishTransaction = mock(), ) verify(taskRepository).clearTopTransparentFullscreenTaskId(topTransparentTask.displayId) } @Test fun transitCloseWallpaper_wallpaperActivityVisibilitySaved() { val wallpaperTask = createWallpaperTaskInfo() Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt +25 −12 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.isExitDesktop import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.TransitionUtil import com.android.wm.shell.shared.TransitionUtil.isClosingMode import com.android.wm.shell.shared.TransitionUtil.isOpeningMode import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions Loading Loading @@ -345,18 +347,29 @@ class DesktopTasksTransitionObserver( } private fun updateTopTransparentFullscreenTaskId(info: TransitionInfo) { run forEachLoop@{ info.changes.forEach { change -> change.taskInfo?.let { task -> val desktopRepository = desktopUserRepositories.getProfile(task.userId) val displayId = task.displayId val transparentTaskId = desktopRepository.getTopTransparentFullscreenTaskId(displayId) if (transparentTaskId == null) return@forEachLoop val changeMode = change.mode val taskId = task.taskId val isTopTransparentFullscreenTaskClosing = taskId == transparentTaskId && isClosingMode(changeMode) val isNonTopTransparentFullscreenTaskOpening = taskId != transparentTaskId && isOpeningMode(changeMode) // Clear `topTransparentFullscreenTask` information from repository if task // is closed or sent to back. // is closed, sent to back or if a different task is opened, brought to front. if ( TransitionUtil.isClosingMode(change.mode) && task.taskId == desktopRepository.getTopTransparentFullscreenTaskId(displayId) isTopTransparentFullscreenTaskClosing || isNonTopTransparentFullscreenTaskOpening ) { desktopRepository.clearTopTransparentFullscreenTaskId(displayId) return@forEachLoop } } } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserverTest.kt +44 −0 Original line number Diff line number Diff line Loading @@ -335,6 +335,50 @@ class DesktopTasksTransitionObserverTest { verify(taskRepository).clearTopTransparentFullscreenTaskId(topTransparentTask.displayId) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY, Flags.FLAG_INCLUDE_TOP_TRANSPARENT_FULLSCREEN_TASK_IN_DESKTOP_HEURISTIC, ) fun nonTopTransparentTaskOpened_clearTopTransparentTaskIdFromRepository() { val mockTransition = Mockito.mock(IBinder::class.java) val topTransparentTask = createTaskInfo(1) val nonTopTransparentTask = createTaskInfo(2) whenever(taskRepository.getTopTransparentFullscreenTaskId(any())) .thenReturn(topTransparentTask.taskId) transitionObserver.onTransitionReady( transition = mockTransition, info = createOpenChangeTransition(nonTopTransparentTask), startTransaction = mock(), finishTransaction = mock(), ) verify(taskRepository).clearTopTransparentFullscreenTaskId(topTransparentTask.displayId) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY, Flags.FLAG_INCLUDE_TOP_TRANSPARENT_FULLSCREEN_TASK_IN_DESKTOP_HEURISTIC, ) fun nonTopTransparentTaskSentToFront_clearTopTransparentTaskIdFromRepository() { val mockTransition = Mockito.mock(IBinder::class.java) val topTransparentTask = createTaskInfo(1) val nonTopTransparentTask = createTaskInfo(2) whenever(taskRepository.getTopTransparentFullscreenTaskId(any())) .thenReturn(topTransparentTask.taskId) transitionObserver.onTransitionReady( transition = mockTransition, info = createToFrontTransition(nonTopTransparentTask), startTransaction = mock(), finishTransaction = mock(), ) verify(taskRepository).clearTopTransparentFullscreenTaskId(topTransparentTask.displayId) } @Test fun transitCloseWallpaper_wallpaperActivityVisibilitySaved() { val wallpaperTask = createWallpaperTaskInfo() Loading