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