Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2922eb65 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix crash when minimizing a window using keyboard shortcut as the...

Merge "Fix crash when minimizing a window using keyboard shortcut as the transition was not running on the shell main thread." into main
parents f6d7cc20 543b24e2
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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();
    }
+8 −3
Original line number Diff line number Diff line
@@ -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,10 +107,12 @@ class DesktopModeKeyGestureHandler(
            KeyGestureEvent.KEY_GESTURE_TYPE_MINIMIZE_FREEFORM_WINDOW -> {
                logV("Key gesture MINIMIZE_FREEFORM_WINDOW is handled")
                getGloballyFocusedFreeformTask()?.let {
                    mainExecutor.execute {
                        desktopTasksController.get().minimizeTask(
                            it,
                        )
                    }
                }
                return true
            }
            else -> return false
+6 −26
Original line number Diff line number Diff line
@@ -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(