diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java index e8f0447602..d9c111805d 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java @@ -17,7 +17,6 @@ package com.android.quickstep; import static com.android.launcher3.config.FeatureFlags.ENABLE_CURSOR_HOVER_STATES; -import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ICON_MENU; import static com.android.quickstep.TaskbarModeSwitchRule.Mode.PERSISTENT; import static com.android.quickstep.TaskbarModeSwitchRule.Mode.TRANSIENT; @@ -44,7 +43,6 @@ import com.android.launcher3.tapl.LauncherInstrumentation.NavigationModel; import com.android.launcher3.tapl.Overview; import com.android.launcher3.tapl.OverviewActions; import com.android.launcher3.tapl.OverviewTask; -import com.android.launcher3.tapl.OverviewTaskMenu; import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; import com.android.launcher3.ui.TaplTestsLauncher3; import com.android.launcher3.util.TestUtil; @@ -196,38 +194,6 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { actionsView.clickAndDismissScreenshot(); } - - @PlatinumTest(focusArea = "launcher") - @Test - public void testOverviewActionsMenu() throws Exception { - startTestAppsWithCheck(); - - OverviewTaskMenu menu = mLauncher.goHome().switchToOverview().getCurrentTask().tapMenu(); - - assertNotNull("Tapping App info menu item returned null", menu.tapAppInfoMenuItem()); - executeOnLauncher(launcher -> assertTrue( - "Launcher activity is the top activity; expecting another activity to be the top", - isInLaunchedApp(launcher))); - } - - - @Test - @ScreenRecord // b/303329286 - public void testOverviewActionsMenu_iconAppChipMenu() throws Exception { - try (AutoCloseable c = TestUtil.overrideFlag(ENABLE_OVERVIEW_ICON_MENU, true)) { - startTestAppsWithCheck(); - - OverviewTaskMenu menu = - mLauncher.goHome().switchToOverview().getCurrentTask().tapMenu(); - - assertNotNull("Tapping App info menu item returned null", menu.tapAppInfoMenuItem()); - executeOnLauncher(launcher -> assertTrue( - "Launcher activity is the top activity; expecting another activity to be the " - + "top", - isInLaunchedApp(launcher))); - } - } - private int getCurrentOverviewPage(Launcher launcher) { return launcher.getOverviewPanel().getCurrentPage(); } diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java b/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java index ed152f269c..cc56fafffc 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java @@ -16,7 +16,6 @@ package com.android.quickstep; -import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ICON_MENU; import static com.android.launcher3.util.rule.TestStabilityRule.LOCAL; import static com.android.launcher3.util.rule.TestStabilityRule.PLATFORM_POSTSUBMIT; @@ -31,10 +30,8 @@ import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import com.android.launcher3.config.FeatureFlags; -import com.android.launcher3.tapl.OverviewTaskMenu; import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; import com.android.launcher3.ui.TaplTestsLauncher3; -import com.android.launcher3.util.TestUtil; import com.android.launcher3.util.rule.TestStabilityRule; import com.android.quickstep.TaskbarModeSwitchRule.TaskbarModeSwitch; @@ -142,42 +139,6 @@ public class TaplTestsSplitscreen extends AbstractQuickStepTest { .hasMenuItem("Save app pair")); } - @Test - public void testTapBothIconMenus() { - createAndLaunchASplitPair(); - - OverviewTaskMenu taskMenu = - mLauncher.goHome().switchToOverview().getCurrentTask().tapMenu(); - assertTrue("App info item not appearing in expanded task menu.", - taskMenu.hasMenuItem("App info")); - taskMenu.touchOutsideTaskMenuToDismiss(); - - OverviewTaskMenu splitMenu = - mLauncher.getOverview().getCurrentTask().tapSplitTaskMenu(); - assertTrue("App info item not appearing in expanded split task's menu.", - splitMenu.hasMenuItem("App info")); - splitMenu.touchOutsideTaskMenuToDismiss(); - } - - @Test - public void testTapBothIconMenus_iconAppChipMenu() throws Exception { - try (AutoCloseable c = TestUtil.overrideFlag(ENABLE_OVERVIEW_ICON_MENU, true)) { - createAndLaunchASplitPair(); - - OverviewTaskMenu taskMenu = - mLauncher.goHome().switchToOverview().getCurrentTask().tapMenu(); - assertTrue("App info item not appearing in expanded task menu.", - taskMenu.hasMenuItem("App info")); - taskMenu.touchOutsideTaskMenuToDismiss(); - - OverviewTaskMenu splitMenu = - mLauncher.getOverview().getCurrentTask().tapSplitTaskMenu(); - assertTrue("App info item not appearing in expanded split task's menu.", - splitMenu.hasMenuItem("App info")); - splitMenu.touchOutsideTaskMenuToDismiss(); - } - } - private void createAndLaunchASplitPair() { startTestActivity(2); startTestActivity(3); diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index 04e8da1f3b..75f4bb2d11 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -486,7 +486,9 @@ public class InvariantDeviceProfile { iconBitmapSize, fillResIconDpi, numDatabaseAllAppsColumns, dbFile}; } - private void onConfigChanged(Context context) { + /** Updates IDP using the provided context. Notifies listeners of change. */ + @VisibleForTesting + public void onConfigChanged(Context context) { Object[] oldState = toModelState(); // Re-init grid diff --git a/tests/Android.bp b/tests/Android.bp index 34cdbed8d5..150eaca4d6 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -45,6 +45,7 @@ filegroup { "src/com/android/launcher3/allapps/TaplOpenCloseAllApps.java", "src/com/android/launcher3/allapps/TaplTestsAllAppsIconsWorking.java", "src/com/android/launcher3/appiconmenu/TaplAppIconMenuTest.java", + "src/com/android/launcher3/appiconmenu/TaplOverviewIconTest.java", "src/com/android/launcher3/dragging/TaplDragTest.java", "src/com/android/launcher3/dragging/TaplUninstallRemove.java", "src/com/android/launcher3/ui/AbstractLauncherUiTest.java", diff --git a/tests/src/com/android/launcher3/appiconmenu/TaplOverviewIconAppChipMenuTest.java b/tests/src/com/android/launcher3/appiconmenu/TaplOverviewIconAppChipMenuTest.java new file mode 100644 index 0000000000..4070c03688 --- /dev/null +++ b/tests/src/com/android/launcher3/appiconmenu/TaplOverviewIconAppChipMenuTest.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.launcher3.appiconmenu; + +import com.android.launcher3.Flags; +import com.android.launcher3.InvariantDeviceProfile; + +import org.junit.Before; + +/** + * Tests the Icon App Chip Menu in overview. + * + *

Same tests as TaplOverviewIconTest with the Flag FLAG_ENABLE_OVERVIEW_ICON_MENU enabled. + * This class can be removed once FLAG_ENABLE_OVERVIEW_ICON_MENU is enabled by default. + */ +public class TaplOverviewIconAppChipMenuTest extends TaplOverviewIconTest { + + @Before + public void setUp() throws Exception { + mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_OVERVIEW_ICON_MENU); // Call before super.setUp + super.setUp(); + executeOnLauncher(launcher -> InvariantDeviceProfile.INSTANCE.get(launcher).onConfigChanged( + launcher)); + } +} diff --git a/tests/src/com/android/launcher3/appiconmenu/TaplOverviewIconTest.java b/tests/src/com/android/launcher3/appiconmenu/TaplOverviewIconTest.java new file mode 100644 index 0000000000..7340264282 --- /dev/null +++ b/tests/src/com/android/launcher3/appiconmenu/TaplOverviewIconTest.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.launcher3.appiconmenu; + +import static com.android.launcher3.ui.TaplTestsLauncher3.initialize; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import android.content.Intent; +import android.platform.test.annotations.PlatinumTest; + +import com.android.launcher3.tapl.OverviewTaskMenu; +import com.android.launcher3.ui.AbstractLauncherUiTest; + +import org.junit.Before; +import org.junit.Test; + +/** + * This test run in both Out of process (Oop) and in-process (Ipc). + * Tests the app Icon in overview. + */ +public class TaplOverviewIconTest extends AbstractLauncherUiTest { + + private static final String CALCULATOR_APP_PACKAGE = + resolveSystemApp(Intent.CATEGORY_APP_CALCULATOR); + + @Before + public void setUp() throws Exception { + super.setUp(); + initialize(this); + } + + @PlatinumTest(focusArea = "launcher") + @Test + public void testOverviewActionsMenu() { + startTestAppsWithCheck(); + + OverviewTaskMenu menu = mLauncher.goHome().switchToOverview().getCurrentTask().tapMenu(); + + assertNotNull("Tapping App info menu item returned null", menu.tapAppInfoMenuItem()); + executeOnLauncher(launcher -> assertTrue( + "Launcher activity is the top activity; expecting another activity to be the top", + isInLaunchedApp(launcher))); + } + + private void startTestAppsWithCheck() { + startTestApps(); + executeOnLauncher(launcher -> assertTrue( + "Launcher activity is the top activity; expecting another activity to be the top " + + "one", + isInLaunchedApp(launcher))); + } + + private void startTestApps() { + startAppFast(getAppPackageName()); + startAppFast(CALCULATOR_APP_PACKAGE); + startTestActivity(2); + } + + @Test + public void testSplitTaskTapBothIconMenus() { + createAndLaunchASplitPair(); + + OverviewTaskMenu taskMenu = + mLauncher.goHome().switchToOverview().getCurrentTask().tapMenu(); + assertTrue("App info item not appearing in expanded task menu.", + taskMenu.hasMenuItem("App info")); + taskMenu.touchOutsideTaskMenuToDismiss(); + + OverviewTaskMenu splitMenu = + mLauncher.getOverview().getCurrentTask().tapSplitTaskMenu(); + assertTrue("App info item not appearing in expanded split task's menu.", + splitMenu.hasMenuItem("App info")); + splitMenu.touchOutsideTaskMenuToDismiss(); + } + + private void createAndLaunchASplitPair() { + startTestActivity(2); + startTestActivity(3); + + if (mLauncher.isTablet()) { + mLauncher.goHome().switchToOverview().getOverviewActions() + .clickSplit() + .getTestActivityTask(2) + .open(); + } else { + mLauncher.goHome().switchToOverview().getCurrentTask() + .tapMenu() + .tapSplitMenuItem() + .getCurrentTask() + .open(); + } + } +} diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java index fe5150901d..b84b5492b8 100644 --- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java @@ -39,6 +39,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; +import android.platform.test.flag.junit.SetFlagsRule; import android.system.OsConstants; import android.util.Log; @@ -48,6 +49,7 @@ import androidx.test.uiautomator.BySelector; import androidx.test.uiautomator.UiDevice; import androidx.test.uiautomator.Until; +import com.android.launcher3.Flags; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.Utilities; @@ -202,6 +204,22 @@ public abstract class AbstractLauncherUiTest { @Rule public ScreenRecordRule mScreenRecordRule = new ScreenRecordRule(); + @Rule + public SetFlagsRule mSetFlagsRule = getFlagsRule(); + + // TODO(b/301555714): Remove when SetFlagsRule initializes flags to their default values. + private SetFlagsRule getFlagsRule() { + SetFlagsRule flagsRule = new SetFlagsRule(); + flagsRule.disableFlags( + Flags.FLAG_ENABLE_GRID_ONLY_OVERVIEW, + Flags.FLAG_ENABLE_OVERVIEW_ICON_MENU, + Flags.FLAG_ENABLE_RESPONSIVE_WORKSPACE, + Flags.FLAG_ENABLE_CURSOR_HOVER_STATES, + Flags.FLAG_ENABLE_TWOLINE_ALLAPPS, + Flags.FLAG_ENABLE_EXPANDING_PAUSE_WORK_BUTTON); + return flagsRule; + } + protected void clearPackageData(String pkg) throws IOException, InterruptedException { final CountDownLatch count = new CountDownLatch(2); final SimpleBroadcastReceiver broadcastReceiver =