/* * Copyright (C) 2018 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.quickstep; import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS; import static androidx.test.InstrumentationRegistry.getInstrumentation; import static com.android.launcher3.tapl.LauncherInstrumentation.WAIT_TIME_MS; import static com.android.launcher3.tapl.TestHelpers.getHomeIntentInPackage; import static com.android.launcher3.tapl.TestHelpers.getLauncherInMyProcess; import static com.android.launcher3.util.rule.ShellCommandRule.disableHeadsUpNotification; import static com.android.launcher3.util.rule.ShellCommandRule.getLauncherCommand; import static com.android.quickstep.NavigationModeSwitchRule.Mode.THREE_BUTTON; import static org.junit.Assert.assertTrue; import android.app.Instrumentation; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.RemoteException; import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import androidx.test.uiautomator.By; import androidx.test.uiautomator.UiDevice; import androidx.test.uiautomator.Until; import com.android.launcher3.tapl.LauncherInstrumentation; import com.android.launcher3.testcomponent.TestCommandReceiver; import com.android.quickstep.NavigationModeSwitchRule.NavigationModeSwitch; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.junit.runners.model.Statement; @LargeTest @RunWith(AndroidJUnit4.class) /** * TODO: Fix fallback when quickstep is enabled */ public class FallbackRecentsTest { private final UiDevice mDevice; private final LauncherInstrumentation mLauncher; private final ActivityInfo mOtherLauncherActivity; @Rule public final TestRule mDisableHeadsUpNotification = disableHeadsUpNotification(); @Rule public final TestRule mQuickstepOnOffExecutor; @Rule public final TestRule mSetLauncherCommand; public FallbackRecentsTest() throws RemoteException { Instrumentation instrumentation = getInstrumentation(); Context context = instrumentation.getContext(); mDevice = UiDevice.getInstance(instrumentation); mDevice.setOrientationNatural(); mLauncher = new LauncherInstrumentation(instrumentation); mQuickstepOnOffExecutor = new NavigationModeSwitchRule(mLauncher); mOtherLauncherActivity = context.getPackageManager().queryIntentActivities( getHomeIntentInPackage(context), MATCH_DISABLED_COMPONENTS).get(0).activityInfo; mSetLauncherCommand = (base, desc) -> new Statement() { @Override public void evaluate() throws Throwable { TestCommandReceiver.callCommand(TestCommandReceiver.ENABLE_TEST_LAUNCHER); UiDevice.getInstance(getInstrumentation()).executeShellCommand( getLauncherCommand(mOtherLauncherActivity)); try { base.evaluate(); } finally { TestCommandReceiver.callCommand(TestCommandReceiver.DISABLE_TEST_LAUNCHER); UiDevice.getInstance(getInstrumentation()).executeShellCommand( getLauncherCommand(getLauncherInMyProcess())); } } }; } @NavigationModeSwitch(mode = THREE_BUTTON) @Test public void goToOverviewFromHome() { mDevice.pressHome(); assertTrue("Fallback Launcher not visible", mDevice.wait(Until.hasObject(By.pkg( mOtherLauncherActivity.packageName)), WAIT_TIME_MS)); mLauncher.getBackground().switchToOverview(); } @NavigationModeSwitch(mode = THREE_BUTTON) @Test public void goToOverviewFromApp() { startAppFast("com.android.settings"); mLauncher.getBackground().switchToOverview(); } private void startAppFast(String packageName) { final Instrumentation instrumentation = getInstrumentation(); final Intent intent = instrumentation.getContext().getPackageManager(). getLaunchIntentForPackage(packageName); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); instrumentation.getTargetContext().startActivity(intent); assertTrue(packageName + " didn't start", mDevice.wait(Until.hasObject(By.pkg(packageName).depth(0)), WAIT_TIME_MS)); } }