1f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhampackage com.android.launcher3.ui;
2f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
33e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyalimport android.content.pm.LauncherActivityInfo;
4f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport android.graphics.Point;
51d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport android.support.test.filters.LargeTest;
61d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport android.support.test.runner.AndroidJUnit4;
7f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport android.support.test.uiautomator.By;
8f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport android.support.test.uiautomator.UiObject2;
9f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport android.support.test.uiautomator.Until;
10f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport android.view.MotionEvent;
11f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
12f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport com.android.launcher3.R;
13f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport com.android.launcher3.util.Condition;
14f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickhamimport com.android.launcher3.util.Wait;
151d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport com.android.launcher3.util.rule.LauncherActivityRule;
161d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport com.android.launcher3.util.rule.ShellCommandRule;
171d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal
181d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport org.junit.Rule;
191d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport org.junit.Test;
201d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport org.junit.runner.RunWith;
211d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal
221d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport static org.junit.Assert.assertNotNull;
231d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalimport static org.junit.Assert.assertTrue;
24f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
25f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham/**
26f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham * Test for dragging a deep shortcut to the home screen.
27f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham */
28f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham@LargeTest
291d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal@RunWith(AndroidJUnit4.class)
301d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyalpublic class ShortcutsToHomeTest extends AbstractLauncherUiTest {
31f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
321d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal    @Rule public LauncherActivityRule mActivityMonitor = new LauncherActivityRule();
331d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal    @Rule public ShellCommandRule mDefaultLauncherRule = ShellCommandRule.setDefaultLauncher();
34f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
351d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal    @Test
36f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham    public void testDragIcon_portrait() throws Throwable {
37f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        lockRotation(true);
38f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        performTest();
39f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham    }
40f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
411d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal    @Test
42f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham    public void testDragIcon_landscape() throws Throwable {
43f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        lockRotation(false);
44f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        performTest();
45f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham    }
46f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
47f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham    private void performTest() throws Throwable {
48f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        clearHomescreen();
491d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal        mActivityMonitor.startLauncher();
501d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal
511d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal        LauncherActivityInfo settingsApp  = getSettingsApp();
52f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
53f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        // Open all apps and wait for load complete.
54f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        final UiObject2 appsContainer = openAllApps();
55f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT));
56f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
57f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        // Find the app and long press it to show shortcuts.
581d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal        UiObject2 icon = scrollAndFind(appsContainer, By.text(settingsApp.getLabel().toString()));
59f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        // Press icon center until shortcuts appear
60f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        Point iconCenter = icon.getVisibleCenter();
61f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        sendPointer(MotionEvent.ACTION_DOWN, iconCenter);
62f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        UiObject2 deepShortcutsContainer = findViewById(R.id.deep_shortcuts_container);
63f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        assertNotNull(deepShortcutsContainer);
64f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        sendPointer(MotionEvent.ACTION_UP, iconCenter);
65f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
66f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        // Drag the first shortcut to the home screen.
67f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        assertTrue(deepShortcutsContainer.getChildCount() > 0);
68f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        UiObject2 shortcut = deepShortcutsContainer.getChildren().get(0)
6926b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                .findObject(getSelectorForId(R.id.bubble_text));
70f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        String shortcutName = shortcut.getText();
71f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        dragToWorkspace(shortcut, false);
72f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham
73f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        // Verify that the shortcut works on home screen
74f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        // (the app opens and has the same text as the shortcut).
75f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        mDevice.findObject(By.text(shortcutName)).click();
76f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham        assertTrue(mDevice.wait(Until.hasObject(By.pkg(
771d7f45d8f8fafc46f23963e3b43c95a2c2120079Sunny Goyal                settingsApp.getComponentName().getPackageName())
78f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham                .text(shortcutName)), DEFAULT_UI_TIMEOUT));
79f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham    }
80f38d8593bd8973f50d0101f2e51181b6b39b6e9aTony Wickham}
81