summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-11-22 18:54:32 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-11-22 18:54:32 +0000
commit2922eb653c3d09e27c2fba55a5c9d33d0ecf84ec (patch)
treee0d8e01c69ecf43dbca305ae720322eb9b63cc90
parentf6d7cc203fcad0b40b0b7770c3370306e9930005 (diff)
parent543b24e29f2d4718e70fc2a64db710ca4848f704 (diff)
Merge "Fix crash when minimizing a window using keyboard shortcut as the transition was not running on the shell main thread." into main
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandler.kt11
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeKeyGestureHandlerTest.kt32
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(