mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
Test: presubmit Flag: N/A Bug: 187761685 Change-Id: I8b3894a383416cea08c56c8874e6974323ffdc3a
227 lines
8.4 KiB
Java
227 lines
8.4 KiB
Java
/*
|
|
* 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.allapps;
|
|
|
|
import static com.android.launcher3.util.TestUtil.expectFail;
|
|
import static com.android.launcher3.ui.AbstractLauncherUiTest.initialize;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.assertTrue;
|
|
import static org.junit.Assume.assumeFalse;
|
|
import static org.junit.Assume.assumeTrue;
|
|
|
|
import android.content.Intent;
|
|
import android.platform.test.annotations.PlatinumTest;
|
|
|
|
import androidx.test.filters.FlakyTest;
|
|
import androidx.test.platform.app.InstrumentationRegistry;
|
|
|
|
import com.android.launcher3.LauncherState;
|
|
import com.android.launcher3.config.FeatureFlags;
|
|
import com.android.launcher3.tapl.AllApps;
|
|
import com.android.launcher3.ui.AbstractLauncherUiTest;
|
|
import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape;
|
|
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
|
|
/**
|
|
* Test that we can open and close the all apps in multiple situations.
|
|
* The test runs in Out of process (Oop) and in process.
|
|
*/
|
|
public class TaplOpenCloseAllAppsTest extends AbstractLauncherUiTest {
|
|
|
|
public static final String READ_DEVICE_CONFIG_PERMISSION =
|
|
"android.permission.READ_DEVICE_CONFIG";
|
|
|
|
/**
|
|
* Calls static method initialize
|
|
*/
|
|
@Before
|
|
public void setUp() throws Exception {
|
|
super.setUp();
|
|
initialize(this);
|
|
}
|
|
|
|
/**
|
|
* Make sure we can go home after pressing the context menu on an Icon on the AllApps.
|
|
*/
|
|
@Test
|
|
public void testPressHomeOnAllAppsContextMenu() {
|
|
final AllApps allApps = mLauncher.getWorkspace().switchToAllApps();
|
|
allApps.freeze();
|
|
try {
|
|
allApps.getAppIcon("TestActivity7").openMenu();
|
|
} finally {
|
|
allApps.unfreeze();
|
|
}
|
|
mLauncher.goHome();
|
|
}
|
|
|
|
/**
|
|
* Make sure we can open AllApps from the Workspace.
|
|
*/
|
|
@Test
|
|
@PortraitLandscape
|
|
public void testWorkspaceSwitchToAllApps() {
|
|
assertNotNull("switchToAllApps() returned null",
|
|
mLauncher.getWorkspace().switchToAllApps());
|
|
assertTrue("Launcher internal state is not All Apps",
|
|
isInState(() -> LauncherState.ALL_APPS));
|
|
}
|
|
|
|
/**
|
|
* Make sure we can go to Workspace from AllApps
|
|
*/
|
|
@Test
|
|
@PortraitLandscape
|
|
public void testAllAppsSwitchToWorkspace() {
|
|
assertNotNull("switchToWorkspace() returned null",
|
|
mLauncher.getWorkspace().switchToAllApps()
|
|
.switchToWorkspace(/* swipeDown= */ true));
|
|
assertTrue("Launcher internal state is not Workspace",
|
|
isInState(() -> LauncherState.NORMAL));
|
|
}
|
|
|
|
/**
|
|
* Make sure the swipe up gesture can take us back to the workspace from AllApps
|
|
*/
|
|
@PlatinumTest(focusArea = "launcher")
|
|
@Test
|
|
@PortraitLandscape
|
|
public void testAllAppsSwipeUpToWorkspace() {
|
|
assertNotNull("testAllAppsSwipeUpToWorkspace() returned null",
|
|
mLauncher.getWorkspace().switchToAllApps()
|
|
.switchToWorkspace(/* swipeDown= */ false));
|
|
assertTrue("Launcher internal state is not Workspace",
|
|
isInState(() -> LauncherState.NORMAL));
|
|
}
|
|
|
|
/**
|
|
* Make sure we can go to the Workspace from AllApps on tablets by tapping on the background.
|
|
*/
|
|
@Test
|
|
@PortraitLandscape
|
|
public void testAllAppsDeadzoneForTablet() {
|
|
assumeTrue(mLauncher.isTablet());
|
|
|
|
mLauncher.getWorkspace().switchToAllApps().dismissByTappingOutsideForTablet(
|
|
true /* tapRight */);
|
|
mLauncher.getWorkspace().switchToAllApps().dismissByTappingOutsideForTablet(
|
|
false /* tapRight */);
|
|
}
|
|
|
|
/**
|
|
* Make sure that AllApps closes when pressing the home button
|
|
*/
|
|
@Test
|
|
@PortraitLandscape
|
|
public void testAllAppsFromHome() {
|
|
// Test opening all apps
|
|
assertNotNull("switchToAllApps() returned null",
|
|
mLauncher.getWorkspace().switchToAllApps());
|
|
|
|
runAllAppsTest(mLauncher.getAllApps());
|
|
|
|
// Testing pressHome.
|
|
assertTrue("Launcher internal state is not All Apps",
|
|
isInState(() -> LauncherState.ALL_APPS));
|
|
assertNotNull("pressHome returned null", mLauncher.goHome());
|
|
assertTrue("Launcher internal state is not Home",
|
|
isInState(() -> LauncherState.NORMAL));
|
|
assertNotNull("getHome returned null", mLauncher.getWorkspace());
|
|
}
|
|
|
|
/**
|
|
* Makes sure the state of AllApps is correct.
|
|
*/
|
|
public void runAllAppsTest(AllApps allApps) {
|
|
allApps.freeze();
|
|
try {
|
|
assertNotNull("allApps parameter is null", allApps);
|
|
|
|
assertTrue(
|
|
"Launcher internal state is not All Apps",
|
|
isInState(() -> LauncherState.ALL_APPS));
|
|
|
|
// Test flinging forward and backward.
|
|
executeOnLauncher(launcher -> assertEquals(
|
|
"All Apps started in already scrolled state", 0,
|
|
getAllAppsScroll(launcher)));
|
|
|
|
allApps.flingForward();
|
|
assertTrue("Launcher internal state is not All Apps",
|
|
isInState(() -> LauncherState.ALL_APPS));
|
|
final Integer flingForwardY = getFromLauncher(
|
|
launcher -> getAllAppsScroll(launcher));
|
|
executeOnLauncher(
|
|
launcher -> assertTrue("flingForward() didn't scroll App Apps",
|
|
flingForwardY > 0));
|
|
|
|
allApps.flingBackward();
|
|
assertTrue(
|
|
"Launcher internal state is not All Apps",
|
|
isInState(() -> LauncherState.ALL_APPS));
|
|
final Integer flingBackwardY = getFromLauncher(
|
|
launcher -> getAllAppsScroll(launcher));
|
|
executeOnLauncher(launcher -> assertTrue("flingBackward() didn't scroll App Apps",
|
|
flingBackwardY < flingForwardY));
|
|
|
|
// Test scrolling down to the end of the app list.
|
|
assertNotNull("All apps: can't find YouTube", allApps.getAppIcon("ZZZ"));
|
|
// Test scrolling up to the beginning oof the app list.
|
|
assertNotNull("All apps: can't find Camera", allApps.getAppIcon("AAA"));
|
|
// Test failing to find a non-existing app.
|
|
final AllApps allAppsFinal = allApps;
|
|
expectFail("All apps: could find a non-existing app",
|
|
() -> allAppsFinal.getAppIcon("NO APP"));
|
|
|
|
assertTrue(
|
|
"Launcher internal state is not All Apps",
|
|
isInState(() -> LauncherState.ALL_APPS));
|
|
} finally {
|
|
allApps.unfreeze();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Makes sure that when pressing back when AllApps is open we go back to the Home screen.
|
|
*/
|
|
@FlakyTest(bugId = 256615483)
|
|
@Test
|
|
@PortraitLandscape
|
|
public void testPressBackFromAllAppsToHome() {
|
|
InstrumentationRegistry.getInstrumentation().getUiAutomation().adoptShellPermissionIdentity(
|
|
READ_DEVICE_CONFIG_PERMISSION);
|
|
assumeFalse(FeatureFlags.ENABLE_BACK_SWIPE_LAUNCHER_ANIMATION.get());
|
|
mLauncher
|
|
.getWorkspace()
|
|
.switchToAllApps()
|
|
.pressBackToWorkspace();
|
|
waitForState("Launcher internal state didn't switch to Home", () -> LauncherState.NORMAL);
|
|
startAppFast(resolveSystemApp(Intent.CATEGORY_APP_CALCULATOR));
|
|
mLauncher.getLaunchedAppState().pressBackToWorkspace();
|
|
waitForState("Launcher internal state didn't switch to Home", () -> LauncherState.NORMAL);
|
|
}
|
|
|
|
@Test
|
|
public void testDismissAllAppsWithEscKey() {
|
|
mLauncher.goHome().switchToAllApps().dismissByEscKey();
|
|
waitForState("Launcher internal state didn't switch to Home", () -> LauncherState.NORMAL);
|
|
}
|
|
}
|