diff options
| author | 2024-11-22 18:54:32 +0000 | |
|---|---|---|
| committer | 2024-11-22 18:54:32 +0000 | |
| commit | 2922eb653c3d09e27c2fba55a5c9d33d0ecf84ec (patch) | |
| tree | e0d8e01c69ecf43dbca305ae720322eb9b63cc90 | |
| parent | f6d7cc203fcad0b40b0b7770c3370306e9930005 (diff) | |
| parent | 543b24e29f2d4718e70fc2a64db710ca4848f704 (diff) | |
Merge "Fix crash when minimizing a window using keyboard shortcut as the transition was not running on the shell main thread." into main
3 files changed, 17 insertions, 31 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 436fe8b78697..974535385334 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -855,14 +855,15 @@ public abstract class WMShellModule { Optional<DesktopTasksController> desktopTasksController, InputManager inputManager, ShellTaskOrganizer shellTaskOrganizer, - FocusTransitionObserver focusTransitionObserver) { + FocusTransitionObserver focusTransitionObserver, + @ShellMainThread ShellExecutor mainExecutor) { if (DesktopModeStatus.canEnterDesktopMode(context) && useKeyGestureEventHandler() && manageKeyGestures() && (Flags.enableMoveToNextDisplayShortcut() || Flags.enableTaskResizingKeyboardShortcuts())) { return Optional.of(new DesktopModeKeyGestureHandler(context, desktopModeWindowDecorViewModel, desktopTasksController, - inputManager, shellTaskOrganizer, focusTransitionObserver)); + inputManager, shellTaskOrganizer, focusTransitionObserver, mainExecutor)); } return Optional.empty(); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt index 798e499d68eb..2b0724d64d0e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt @@ -30,9 +30,11 @@ import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM import android.content.Context import com.android.hardware.input.Flags.manageKeyGestures import com.android.window.flags.Flags.enableTaskResizingKeyboardShortcuts +import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger import com.android.wm.shell.transition.FocusTransitionObserver import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE +import com.android.wm.shell.shared.annotations.ShellMainThread import java.util.Optional /** @@ -45,6 +47,7 @@ class DesktopModeKeyGestureHandler( inputManager: InputManager, private val shellTaskOrganizer: ShellTaskOrganizer, private val focusTransitionObserver: FocusTransitionObserver, + @ShellMainThread private val mainExecutor: ShellExecutor, ) : KeyGestureEventHandler { init { @@ -104,9 +107,11 @@ class DesktopModeKeyGestureHandler( KeyGestureEvent.KEY_GESTURE_TYPE_MINIMIZE_FREEFORM_WINDOW -> { logV("Key gesture MINIMIZE_FREEFORM_WINDOW is handled") getGloballyFocusedFreeformTask()?.let { - desktopTasksController.get().minimizeTask( - it, - ) + mainExecutor.execute { + desktopTasksController.get().minimizeTask( + it, + ) + } } return true } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt index 0756b6b6246c..19397c23af48 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt @@ -134,6 +134,12 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { null }.whenever(inputManager).registerKeyGestureEventHandler(any()) shellInit.init() + + desktopModeKeyGestureHandler = DesktopModeKeyGestureHandler( + context, + Optional.of(desktopModeWindowDecorViewModel), Optional.of(desktopTasksController), + inputManager, shellTaskOrganizer, focusTransitionObserver, testExecutor + ) } @After @@ -151,11 +157,6 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { FLAG_USE_KEY_GESTURE_EVENT_HANDLER ) fun keyGestureMoveToNextDisplay_shouldMoveToNextDisplay() { - desktopModeKeyGestureHandler = DesktopModeKeyGestureHandler( - context, - Optional.of(desktopModeWindowDecorViewModel), Optional.of(desktopTasksController), - inputManager, shellTaskOrganizer, focusTransitionObserver - ) // Set up two display ids whenever(rootTaskDisplayAreaOrganizer.displayIds) .thenReturn(intArrayOf(DEFAULT_DISPLAY, SECOND_DISPLAY)) @@ -187,11 +188,6 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS ) fun keyGestureSnapLeft_shouldSnapResizeTaskToLeft() { - desktopModeKeyGestureHandler = DesktopModeKeyGestureHandler( - context, - Optional.of(desktopModeWindowDecorViewModel), Optional.of(desktopTasksController), - inputManager, shellTaskOrganizer, focusTransitionObserver - ) val task = setUpFreeformTask() task.isFocused = true whenever(shellTaskOrganizer.getRunningTasks()).thenReturn(arrayListOf(task)) @@ -219,11 +215,6 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS ) fun keyGestureSnapRight_shouldSnapResizeTaskToRight() { - desktopModeKeyGestureHandler = DesktopModeKeyGestureHandler( - context, - Optional.of(desktopModeWindowDecorViewModel), Optional.of(desktopTasksController), - inputManager, shellTaskOrganizer, focusTransitionObserver - ) val task = setUpFreeformTask() task.isFocused = true whenever(shellTaskOrganizer.getRunningTasks()).thenReturn(arrayListOf(task)) @@ -251,11 +242,6 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS ) fun keyGestureToggleFreeformWindowSize_shouldToggleTaskSize() { - desktopModeKeyGestureHandler = DesktopModeKeyGestureHandler( - context, - Optional.of(desktopModeWindowDecorViewModel), Optional.of(desktopTasksController), - inputManager, shellTaskOrganizer, focusTransitionObserver - ) val task = setUpFreeformTask() task.isFocused = true whenever(shellTaskOrganizer.getRunningTasks()).thenReturn(arrayListOf(task)) @@ -282,11 +268,6 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS ) fun keyGestureMinimizeFreeformWindow_shouldMinimizeTask() { - desktopModeKeyGestureHandler = DesktopModeKeyGestureHandler( - context, - Optional.of(desktopModeWindowDecorViewModel), Optional.of(desktopTasksController), - inputManager, shellTaskOrganizer, focusTransitionObserver - ) val task = setUpFreeformTask() task.isFocused = true whenever(shellTaskOrganizer.getRunningTasks()).thenReturn(arrayListOf(task)) @@ -300,7 +281,6 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() { val result = keyGestureEventHandler.handleKeyGestureEvent(event, null) assertThat(result).isTrue() - verify(desktopTasksController).minimizeTask(task) } private fun setUpFreeformTask( |