diff options
Diffstat (limited to 'tests/src/com/android/launcher3/ui/TestViewHelpers.java')
-rw-r--r-- | tests/src/com/android/launcher3/ui/TestViewHelpers.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/tests/src/com/android/launcher3/ui/TestViewHelpers.java b/tests/src/com/android/launcher3/ui/TestViewHelpers.java index d0df66485..d13d31952 100644 --- a/tests/src/com/android/launcher3/ui/TestViewHelpers.java +++ b/tests/src/com/android/launcher3/ui/TestViewHelpers.java @@ -18,15 +18,28 @@ package com.android.launcher3.ui; import static androidx.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.InstrumentationRegistry.getTargetContext; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + import android.content.ComponentName; +import android.content.Context; +import android.graphics.Point; import android.os.Process; +import android.os.SystemClock; import android.util.Log; +import android.view.KeyEvent; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import androidx.test.uiautomator.By; +import androidx.test.uiautomator.BySelector; import androidx.test.uiautomator.UiDevice; +import androidx.test.uiautomator.UiObject2; +import androidx.test.uiautomator.Until; import com.android.launcher3.LauncherAppWidgetProviderInfo; +import com.android.launcher3.R; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.testcomponent.AppWidgetNoConfig; import com.android.launcher3.testcomponent.AppWidgetWithConfig; @@ -37,6 +50,21 @@ import java.util.function.Function; public class TestViewHelpers { private static final String TAG = "TestViewHelpers"; + private static UiDevice getDevice() { + return UiDevice.getInstance(getInstrumentation()); + } + + public static UiObject2 findViewById(int id) { + return getDevice().wait(Until.findObject(getSelectorForId(id)), + AbstractLauncherUiTest.DEFAULT_UI_TIMEOUT); + } + + public static BySelector getSelectorForId(int id) { + final Context targetContext = getTargetContext(); + String name = targetContext.getResources().getResourceEntryName(id); + return By.res(targetContext.getPackageName(), name); + } + /** * Finds a widget provider which can fit on the home screen. * @@ -63,6 +91,92 @@ public class TestViewHelpers { return info; } + /** + * Drags an icon to the center of homescreen. + * + * @param icon object that is either app icon or shortcut icon + */ + public static void dragToWorkspace(UiObject2 icon, boolean expectedToShowShortcuts) { + Point center = icon.getVisibleCenter(); + + // Action Down + final long downTime = SystemClock.uptimeMillis(); + sendPointer(downTime, MotionEvent.ACTION_DOWN, center); + + UiObject2 dragLayer = findViewById(R.id.drag_layer); + + if (expectedToShowShortcuts) { + // Make sure shortcuts show up, and then move a bit to hide them. + assertNotNull(findViewById(R.id.deep_shortcuts_container)); + + Point moveLocation = new Point(center); + int distanceToMove = + getTargetContext().getResources().getDimensionPixelSize( + R.dimen.deep_shortcuts_start_drag_threshold) + 50; + if (moveLocation.y - distanceToMove >= dragLayer.getVisibleBounds().top) { + moveLocation.y -= distanceToMove; + } else { + moveLocation.y += distanceToMove; + } + movePointer(downTime, center, moveLocation); + + assertNull(findViewById(R.id.deep_shortcuts_container)); + } + + // Wait until Remove/Delete target is visible + assertNotNull(findViewById(R.id.delete_target_text)); + + Point moveLocation = dragLayer.getVisibleCenter(); + + // Move to center + movePointer(downTime, center, moveLocation); + sendPointer(downTime, MotionEvent.ACTION_UP, moveLocation); + + // Wait until remove target is gone. + getDevice().wait(Until.gone(getSelectorForId(R.id.delete_target_text)), + AbstractLauncherUiTest.DEFAULT_UI_TIMEOUT); + } + + private static void movePointer(long downTime, Point from, Point to) { + while (!from.equals(to)) { + try { + Thread.sleep(20); + } catch (InterruptedException e) { + e.printStackTrace(); + } + from.x = getNextMoveValue(to.x, from.x); + from.y = getNextMoveValue(to.y, from.y); + sendPointer(downTime, MotionEvent.ACTION_MOVE, from); + } + } + + private static int getNextMoveValue(int targetValue, int oldValue) { + if (targetValue - oldValue > 10) { + return oldValue + 10; + } else if (targetValue - oldValue < -10) { + return oldValue - 10; + } else { + return targetValue; + } + } + + public static void sendPointer(long downTime, int action, Point point) { + MotionEvent event = MotionEvent.obtain(downTime, + SystemClock.uptimeMillis(), action, point.x, point.y, 0); + getInstrumentation().sendPointerSync(event); + event.recycle(); + } + + /** + * Opens widget tray and returns the recycler view. + */ + public static UiObject2 openWidgetsTray() { + final UiDevice device = getDevice(); + device.pressKeyCode(KeyEvent.KEYCODE_W, KeyEvent.META_CTRL_ON); + device.waitForIdle(); + return findViewById(R.id.widgets_list_view); + } + public static View findChildView(ViewGroup parent, Function<View, Boolean> condition) { for (int i = 0; i < parent.getChildCount(); ++i) { final View child = parent.getChildAt(i); |