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

Commit 717fe4ab authored by Vania Desmonda's avatar Vania Desmonda
Browse files

Use main executor for handling key gesture events in desktop mode.

This is to fix a bug where the toast doesn't show when snap resizing a non-resizable app using keyboard shortcuts.

Test: manual test and atest DesktopModeKeyGestureHandlerTest
Fixes: 380036936
Flag: com.android.window.flags.enable_task_resizing_keyboard_shortcuts
Change-Id: Ia64a119bdf0c8aafd43b13d41a040de271be19c2
parent 6c943596
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ class DesktopModeKeyGestureHandler(
            KeyGestureEvent.KEY_GESTURE_TYPE_SNAP_LEFT_FREEFORM_WINDOW -> {
                logV("Key gesture SNAP_LEFT_FREEFORM_WINDOW is handled")
                getGloballyFocusedFreeformTask()?.let {
                    mainExecutor.execute {
                        desktopModeWindowDecorViewModel.get().onSnapResize(
                            it.taskId,
                            true,
@@ -79,11 +80,13 @@ class DesktopModeKeyGestureHandler(
                            /* fromMenu= */ false
                        )
                    }
                }
                return true
            }
            KeyGestureEvent.KEY_GESTURE_TYPE_SNAP_RIGHT_FREEFORM_WINDOW -> {
                logV("Key gesture SNAP_RIGHT_FREEFORM_WINDOW is handled")
                getGloballyFocusedFreeformTask()?.let {
                    mainExecutor.execute {
                        desktopModeWindowDecorViewModel.get().onSnapResize(
                            it.taskId,
                            false,
@@ -91,17 +94,20 @@ class DesktopModeKeyGestureHandler(
                            /* fromMenu= */ false
                        )
                    }
                }
                return true
            }
            KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_MAXIMIZE_FREEFORM_WINDOW -> {
                logV("Key gesture TOGGLE_MAXIMIZE_FREEFORM_WINDOW is handled")
                getGloballyFocusedFreeformTask()?.let {
                    mainExecutor.execute {
                        desktopTasksController.get().toggleDesktopTaskSize(
                            it,
                            ResizeTrigger.MAXIMIZE_MENU,
                            DesktopModeEventLogger.Companion.InputMethod.KEYBOARD,
                        )
                    }
                }
                return true
            }
            KeyGestureEvent.KEY_GESTURE_TYPE_MINIMIZE_FREEFORM_WINDOW -> {
+7 −20
Original line number Diff line number Diff line
@@ -53,10 +53,9 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn
import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.dx.mockito.inline.extended.StaticMockitoSession
import com.android.window.flags.Flags.FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS
import com.android.wm.shell.TestShellExecutor
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayLayout
import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.windowdecor.DesktopModeWindowDecorViewModel
@@ -91,7 +90,7 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() {
    private val rootTaskDisplayAreaOrganizer = mock<RootTaskDisplayAreaOrganizer>()
    private val shellTaskOrganizer = mock<ShellTaskOrganizer>()
    private val focusTransitionObserver = mock<FocusTransitionObserver>()
    private val testExecutor = mock<ShellExecutor>()
    private val testExecutor = TestShellExecutor()
    private val inputManager = mock<InputManager>()
    private val displayController = mock<DisplayController>()
    private val displayLayout = mock<DisplayLayout>()
@@ -148,6 +147,7 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() {

        runningTasks.clear()
        testScope.cancel()
        testExecutor.flushAll()
    }

    @Test
@@ -201,12 +201,7 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() {
        val result = keyGestureEventHandler.handleKeyGestureEvent(event, null)

        assertThat(result).isTrue()
        verify(desktopModeWindowDecorViewModel).onSnapResize(
            task.taskId,
            true,
            DesktopModeEventLogger.Companion.InputMethod.KEYBOARD,
            /* fromMenu= */ false
        )
        assertThat(testExecutor.callbacks.size).isEqualTo(1)
    }

    @Test
@@ -228,12 +223,7 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() {
        val result = keyGestureEventHandler.handleKeyGestureEvent(event, null)

        assertThat(result).isTrue()
        verify(desktopModeWindowDecorViewModel).onSnapResize(
            task.taskId,
            false,
            DesktopModeEventLogger.Companion.InputMethod.KEYBOARD,
            /* fromMenu= */ false
        )
        assertThat(testExecutor.callbacks.size).isEqualTo(1)
    }

    @Test
@@ -255,11 +245,7 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() {
        val result = keyGestureEventHandler.handleKeyGestureEvent(event, null)

        assertThat(result).isTrue()
        verify(desktopTasksController).toggleDesktopTaskSize(
            task,
            ResizeTrigger.MAXIMIZE_MENU,
            DesktopModeEventLogger.Companion.InputMethod.KEYBOARD,
        )
        assertThat(testExecutor.callbacks.size).isEqualTo(1)
    }

    @Test
@@ -281,6 +267,7 @@ class DesktopModeKeyGestureHandlerTest : ShellTestCase() {
        val result = keyGestureEventHandler.handleKeyGestureEvent(event, null)

        assertThat(result).isTrue()
        assertThat(testExecutor.callbacks.size).isEqualTo(1)
    }

    private fun setUpFreeformTask(