Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java +9 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import static android.content.pm.PackageManager.FEATURE_PC; import static android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS; import static android.view.WindowManager.TRANSIT_CHANGE; import static com.android.window.flags.Flags.enableDisplayFocusInShellTransitions; import android.app.ActivityManager.RunningTaskInfo; import android.content.ContentResolver; import android.content.Context; Loading Loading @@ -195,7 +197,12 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel, FocusT return; } if (enableDisplayFocusInShellTransitions()) { // Pass the current global focus status to avoid updates outside of a ShellTransition. decoration.relayout(taskInfo, decoration.mHasGlobalFocus); } else { decoration.relayout(taskInfo, taskInfo.isFocused); } } @Override Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +7 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static android.view.MotionEvent.ACTION_UP; import static android.view.WindowInsets.Type.statusBars; import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU; import static com.android.window.flags.Flags.enableDisplayFocusInShellTransitions; import static com.android.wm.shell.compatui.AppCompatUtils.isTopActivityExemptFromDesktopWindowing; import static com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger; import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR; Loading Loading @@ -468,7 +469,12 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, removeTaskFromEventReceiver(oldTaskInfo.displayId); incrementEventReceiverTasks(taskInfo.displayId); } if (enableDisplayFocusInShellTransitions()) { // Pass the current global focus status to avoid updates outside of a ShellTransition. decoration.relayout(taskInfo, decoration.mHasGlobalFocus); } else { decoration.relayout(taskInfo, taskInfo.isFocused); } mActivityOrientationChangeHandler.ifPresent(handler -> handler.handleActivityOrientationChange(oldTaskInfo, taskInfo)); } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt +42 −0 Original line number Diff line number Diff line Loading @@ -1307,6 +1307,48 @@ class DesktopModeWindowDecorViewModelTests : ShellTestCase() { verify(decor).closeMaximizeMenu() } @Test @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_FOCUS_IN_SHELL_TRANSITIONS) fun testOnTaskInfoChanged_enableShellTransitionsFlag() { val task = createTask( windowingMode = WINDOWING_MODE_FREEFORM ) val taskSurface = SurfaceControl() val decoration = setUpMockDecorationForTask(task) onTaskOpening(task, taskSurface) assertTrue(windowDecorByTaskIdSpy.contains(task.taskId)) decoration.mHasGlobalFocus = true desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, true) decoration.mHasGlobalFocus = false desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, false) } @Test @DisableFlags(Flags.FLAG_ENABLE_DISPLAY_FOCUS_IN_SHELL_TRANSITIONS) fun testOnTaskInfoChanged_disableShellTransitionsFlag() { val task = createTask( windowingMode = WINDOWING_MODE_FREEFORM ) val taskSurface = SurfaceControl() val decoration = setUpMockDecorationForTask(task) onTaskOpening(task, taskSurface) assertTrue(windowDecorByTaskIdSpy.contains(task.taskId)) task.isFocused = true desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, true) task.isFocused = false desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, false) } private fun createOpenTaskDecoration( @WindowingMode windowingMode: Int, taskSurface: SurfaceControl = SurfaceControl(), Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java +9 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import static android.content.pm.PackageManager.FEATURE_PC; import static android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS; import static android.view.WindowManager.TRANSIT_CHANGE; import static com.android.window.flags.Flags.enableDisplayFocusInShellTransitions; import android.app.ActivityManager.RunningTaskInfo; import android.content.ContentResolver; import android.content.Context; Loading Loading @@ -195,7 +197,12 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel, FocusT return; } if (enableDisplayFocusInShellTransitions()) { // Pass the current global focus status to avoid updates outside of a ShellTransition. decoration.relayout(taskInfo, decoration.mHasGlobalFocus); } else { decoration.relayout(taskInfo, taskInfo.isFocused); } } @Override Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +7 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static android.view.MotionEvent.ACTION_UP; import static android.view.WindowInsets.Type.statusBars; import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU; import static com.android.window.flags.Flags.enableDisplayFocusInShellTransitions; import static com.android.wm.shell.compatui.AppCompatUtils.isTopActivityExemptFromDesktopWindowing; import static com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger; import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR; Loading Loading @@ -468,7 +469,12 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, removeTaskFromEventReceiver(oldTaskInfo.displayId); incrementEventReceiverTasks(taskInfo.displayId); } if (enableDisplayFocusInShellTransitions()) { // Pass the current global focus status to avoid updates outside of a ShellTransition. decoration.relayout(taskInfo, decoration.mHasGlobalFocus); } else { decoration.relayout(taskInfo, taskInfo.isFocused); } mActivityOrientationChangeHandler.ifPresent(handler -> handler.handleActivityOrientationChange(oldTaskInfo, taskInfo)); } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt +42 −0 Original line number Diff line number Diff line Loading @@ -1307,6 +1307,48 @@ class DesktopModeWindowDecorViewModelTests : ShellTestCase() { verify(decor).closeMaximizeMenu() } @Test @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_FOCUS_IN_SHELL_TRANSITIONS) fun testOnTaskInfoChanged_enableShellTransitionsFlag() { val task = createTask( windowingMode = WINDOWING_MODE_FREEFORM ) val taskSurface = SurfaceControl() val decoration = setUpMockDecorationForTask(task) onTaskOpening(task, taskSurface) assertTrue(windowDecorByTaskIdSpy.contains(task.taskId)) decoration.mHasGlobalFocus = true desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, true) decoration.mHasGlobalFocus = false desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, false) } @Test @DisableFlags(Flags.FLAG_ENABLE_DISPLAY_FOCUS_IN_SHELL_TRANSITIONS) fun testOnTaskInfoChanged_disableShellTransitionsFlag() { val task = createTask( windowingMode = WINDOWING_MODE_FREEFORM ) val taskSurface = SurfaceControl() val decoration = setUpMockDecorationForTask(task) onTaskOpening(task, taskSurface) assertTrue(windowDecorByTaskIdSpy.contains(task.taskId)) task.isFocused = true desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, true) task.isFocused = false desktopModeWindowDecorViewModel.onTaskInfoChanged(task) verify(decoration).relayout(task, false) } private fun createOpenTaskDecoration( @WindowingMode windowingMode: Int, taskSurface: SurfaceControl = SurfaceControl(), Loading