diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java index febfc3ad73..65b5397fd1 100644 --- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java +++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java @@ -209,27 +209,38 @@ public class OverviewCommandHelper { && dp != null && (dp.isTablet || dp.isTwoPanels); - if (cmd.type == TYPE_HIDE) { - if (!allowQuickSwitch) { + switch (cmd.type) { + case TYPE_HIDE: + if (!allowQuickSwitch) { + return true; + } + mKeyboardTaskFocusIndex = uiController.launchFocusedTask(); + if (mKeyboardTaskFocusIndex == -1) { + return true; + } + break; + case TYPE_KEYBOARD_INPUT: + if (allowQuickSwitch) { + uiController.openQuickSwitchView(); + return true; + } else { + mKeyboardTaskFocusIndex = 0; + break; + } + case TYPE_HOME: + ActiveGestureLog.INSTANCE.addLog( + "OverviewCommandHelper.executeCommand(TYPE_HOME)"); + mService.startActivity(mOverviewComponentObserver.getHomeIntent()); return true; - } - mKeyboardTaskFocusIndex = uiController.launchFocusedTask(); - if (mKeyboardTaskFocusIndex == -1) { - return true; - } - } - if (cmd.type == TYPE_KEYBOARD_INPUT) { - if (allowQuickSwitch) { - uiController.openQuickSwitchView(); - return true; - } else { + case TYPE_SHOW: + // When Recents is not currently visible, the command's type is TYPE_SHOW + // when overview is triggered via the keyboard overview button or Action+Tab + // keys (Not Alt+Tab which is KQS). The overview button on-screen in 3-button + // nav is TYPE_TOGGLE. mKeyboardTaskFocusIndex = 0; - } - } - if (cmd.type == TYPE_HOME) { - ActiveGestureLog.INSTANCE.addLog("OverviewCommandHelper.executeCommand(TYPE_HOME)"); - mService.startActivity(mOverviewComponentObserver.getHomeIntent()); - return true; + break; + default: + // continue below to handle displaying Recents. } } else { createdRecentsView = visibleRecentsView; @@ -351,7 +362,8 @@ public class OverviewCommandHelper { private void updateRecentsViewFocus(CommandInfo cmd) { RecentsView recentsView = mOverviewComponentObserver.getActivityInterface().getVisibleRecentsView(); - if (recentsView == null || (cmd.type != TYPE_KEYBOARD_INPUT && cmd.type != TYPE_HIDE)) { + if (recentsView == null || (cmd.type != TYPE_KEYBOARD_INPUT && cmd.type != TYPE_HIDE + && cmd.type != TYPE_SHOW)) { return; } // When the overview is launched via alt tab (cmd type is TYPE_KEYBOARD_INPUT), diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java index ad8535f84c..c0b31b70ff 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java @@ -44,6 +44,7 @@ import com.android.launcher3.tapl.Overview; import com.android.launcher3.tapl.OverviewActions; import com.android.launcher3.tapl.OverviewTask; import com.android.launcher3.tapl.SelectModeButtons; +import com.android.launcher3.tapl.Workspace; import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; import com.android.launcher3.util.Wait; import com.android.launcher3.util.rule.ScreenRecordRule.ScreenRecord; @@ -227,6 +228,32 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { isInState(() -> LauncherState.NORMAL)); } + @Test + public void testOpenOverviewWithActionPlusTabKeys() throws Exception { + startTestAppsWithCheck(); + startAppFast(CALCULATOR_APP_PACKAGE); // Ensure Calculator is last opened app. + Workspace home = mLauncher.goHome(); + assertTrue("Launcher state is not Home", isInState(() -> LauncherState.NORMAL)); + + Overview overview = home.openOverviewFromActionPlusTabKeyboardShortcut(); + + assertTrue("Launcher state is not Overview", isInState(() -> LauncherState.OVERVIEW)); + overview.launchFocusedTaskByEnterKey(CALCULATOR_APP_PACKAGE); // Assert app is focused. + } + + @Test + public void testOpenOverviewWithRecentsKey() throws Exception { + startTestAppsWithCheck(); + startAppFast(CALCULATOR_APP_PACKAGE); // Ensure Calculator is last opened app. + Workspace home = mLauncher.goHome(); + assertTrue("Launcher state is not Home", isInState(() -> LauncherState.NORMAL)); + + Overview overview = home.openOverviewFromRecentsKeyboardShortcut(); + + assertTrue("Launcher state is not Overview", isInState(() -> LauncherState.OVERVIEW)); + overview.launchFocusedTaskByEnterKey(CALCULATOR_APP_PACKAGE); // Assert app is focused. + } + private int getCurrentOverviewPage(Launcher launcher) { return launcher.getOverviewPanel().getCurrentPage(); } diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java index 7abaed3860..506e563777 100644 --- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java +++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java @@ -17,10 +17,14 @@ package com.android.launcher3.tapl; import static android.view.KeyEvent.KEYCODE_META_RIGHT; +import static android.view.KeyEvent.KEYCODE_RECENT_APPS; +import static android.view.KeyEvent.KEYCODE_TAB; +import static android.view.KeyEvent.META_META_ON; import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED; import static com.android.launcher3.testing.shared.TestProtocol.ALL_APPS_STATE_ORDINAL; import static com.android.launcher3.testing.shared.TestProtocol.NORMAL_STATE_ORDINAL; +import static com.android.launcher3.testing.shared.TestProtocol.OVERVIEW_STATE_ORDINAL; import static com.android.launcher3.testing.shared.TestProtocol.UIOBJECT_STALE_ELEMENT; import static junit.framework.TestCase.assertNotNull; @@ -134,6 +138,40 @@ public final class Workspace extends Home { } } + /** Opens the Launcher Overview page with the action+tab keyboard shortcut. */ + public Overview openOverviewFromActionPlusTabKeyboardShortcut() { + try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); + LauncherInstrumentation.Closable c = + mLauncher.addContextLayer("want to open overview")) { + verifyActiveContainer(); + mLauncher.runToState( + () -> mLauncher.getDevice().pressKeyCode(KEYCODE_TAB, META_META_ON), + OVERVIEW_STATE_ORDINAL, + "pressing keyboard shortcut"); + try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( + "pressed meta+tab key")) { + return new Overview(mLauncher); + } + } + } + + /** Opens the Launcher Overview page with the Recents keyboard shortcut. */ + public Overview openOverviewFromRecentsKeyboardShortcut() { + try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); + LauncherInstrumentation.Closable c = + mLauncher.addContextLayer("want to open overview")) { + verifyActiveContainer(); + mLauncher.runToState( + () -> mLauncher.getDevice().pressKeyCode(KEYCODE_RECENT_APPS), + OVERVIEW_STATE_ORDINAL, + "pressing keyboard shortcut"); + try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( + "pressed recents apps key")) { + return new Overview(mLauncher); + } + } + } + /** * Returns the home qsb. *