summaryrefslogtreecommitdiff
path: root/tests/src/com/android/launcher3/ui/widget
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/launcher3/ui/widget')
-rw-r--r--tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java13
-rw-r--r--tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java24
-rw-r--r--tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java138
-rw-r--r--tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java10
4 files changed, 96 insertions, 89 deletions
diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
index e9a2b0ffb4..b2ce400d8d 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
@@ -30,10 +30,13 @@ import android.view.View;
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
+import com.android.launcher3.Launcher;
+import com.android.launcher3.celllayout.FavoriteItemsTransaction;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.testcomponent.WidgetConfigActivity;
import com.android.launcher3.ui.AbstractLauncherUiTest;
+import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape;
import com.android.launcher3.ui.TestViewHelpers;
import com.android.launcher3.util.Wait;
import com.android.launcher3.util.rule.ShellCommandRule;
@@ -63,7 +66,7 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest {
@Before
public void setUp() throws Exception {
super.setUp();
- mWidgetInfo = TestViewHelpers.findWidgetProvider(this, true /* hasConfigureScreen */);
+ mWidgetInfo = TestViewHelpers.findWidgetProvider(true /* hasConfigureScreen */);
mAppWidgetManager = AppWidgetManager.getInstance(mTargetContext);
}
@@ -84,8 +87,7 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest {
* @param acceptConfig accept the config activity
*/
private void runTest(boolean acceptConfig) throws Throwable {
- clearHomescreen();
- mDevice.pressHome();
+ new FavoriteItemsTransaction(mTargetContext).commitAndLoadHome(mLauncher);
// Drag widget to homescreen
WidgetConfigStartupMonitor monitor = new WidgetConfigStartupMonitor();
@@ -123,7 +125,10 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest {
@Override
public boolean isTrue() throws Throwable {
- return mMainThreadExecutor.submit(mActivityMonitor.itemExists(this)).get();
+ return mMainThreadExecutor.submit(() -> {
+ Launcher l = Launcher.ACTIVITY_TRACKER.getCreatedActivity();
+ return l != null && l.getWorkspace().getFirstMatch(this) != null;
+ }).get();
}
@Override
diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
index 3eb20e3820..9dca24bb28 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
@@ -18,17 +18,18 @@ package com.android.launcher3.ui.widget;
import static com.android.launcher3.ui.TaplTestsLauncher3.getAppPackageName;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
import android.platform.test.annotations.PlatinumTest;
+import android.platform.test.rule.ScreenRecordRule;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-import com.android.launcher3.model.data.LauncherAppWidgetInfo;
+import com.android.launcher3.celllayout.FavoriteItemsTransaction;
import com.android.launcher3.tapl.Widget;
import com.android.launcher3.tapl.WidgetResizeFrame;
import com.android.launcher3.ui.AbstractLauncherUiTest;
+import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape;
import com.android.launcher3.ui.TestViewHelpers;
import com.android.launcher3.util.rule.ShellCommandRule;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
@@ -51,14 +52,15 @@ public class AddWidgetTest extends AbstractLauncherUiTest {
@PlatinumTest(focusArea = "launcher")
@Test
@PortraitLandscape
+ @ScreenRecordRule.ScreenRecord // b/289161193
public void testDragIcon() throws Throwable {
- clearHomescreen();
- mDevice.pressHome();
+ mLauncher.enableDebugTracing(); // b/289161193
+ new FavoriteItemsTransaction(mTargetContext).commitAndLoadHome(mLauncher);
waitForLauncherCondition("Workspace didn't finish loading", l -> !l.isWorkspaceLoading());
final LauncherAppWidgetProviderInfo widgetInfo =
- TestViewHelpers.findWidgetProvider(this, false /* hasConfigureScreen */);
+ TestViewHelpers.findWidgetProvider(false /* hasConfigureScreen */);
WidgetResizeFrame resizeFrame = mLauncher
.getWorkspace()
@@ -66,11 +68,6 @@ public class AddWidgetTest extends AbstractLauncherUiTest {
.getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager()))
.dragWidgetToWorkspace();
- assertTrue(mActivityMonitor.itemExists(
- (info, view) -> info instanceof LauncherAppWidgetInfo &&
- ((LauncherAppWidgetInfo) info).providerName.getClassName().equals(
- widgetInfo.provider.getClassName())).call());
-
assertNotNull("Widget resize frame not shown after widget add", resizeFrame);
resizeFrame.dismiss();
@@ -78,6 +75,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest {
DEFAULT_UI_TIMEOUT);
assertNotNull("Widget not found on the workspace", widget);
widget.launch(getAppPackageName());
+ mLauncher.disableDebugTracing(); // b/289161193
}
/**
@@ -90,8 +88,8 @@ public class AddWidgetTest extends AbstractLauncherUiTest {
@Test
@PortraitLandscape
public void testDragCustomShortcut() throws Throwable {
- clearHomescreen();
- mDevice.pressHome();
+ new FavoriteItemsTransaction(mTargetContext).commitAndLoadHome(mLauncher);
+
mLauncher.getWorkspace().openAllWidgets()
.getWidget("com.android.launcher3.testcomponent.CustomShortcutConfigActivity")
.dragToWorkspace(false, true);
diff --git a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
index 0f861eb1f3..7db31618b1 100644
--- a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
@@ -15,8 +15,13 @@
*/
package com.android.launcher3.ui.widget;
-import static androidx.test.InstrumentationRegistry.getTargetContext;
-
+import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
+import static com.android.launcher3.WorkspaceLayoutManager.FIRST_SCREEN_ID;
+import static com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_ID_NOT_VALID;
+import static com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY;
+import static com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_RESTORE_STARTED;
+import static com.android.launcher3.provider.LauncherDbUtils.itemIdMatch;
+import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.WidgetUtils.createWidgetInfo;
import static org.junit.Assert.assertEquals;
@@ -26,7 +31,6 @@ import static org.junit.Assert.assertTrue;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionParams;
import android.content.pm.PackageManager;
@@ -34,11 +38,14 @@ import android.database.Cursor;
import android.os.Bundle;
import android.widget.RemoteViews;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
+import com.android.launcher3.LauncherAppState;
+import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
+import com.android.launcher3.celllayout.FavoriteItemsTransaction;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.pm.InstallSessionHelper;
import com.android.launcher3.tapl.Widget;
@@ -57,6 +64,7 @@ import org.junit.runner.RunWith;
import java.util.HashSet;
import java.util.Set;
+import java.util.function.Consumer;
/**
* Tests for bind widget flow.
@@ -70,24 +78,18 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
@Rule
public ShellCommandRule mGrantWidgetRule = ShellCommandRule.grantWidgetBind();
- private ContentResolver mResolver;
-
// Objects created during test, which should be cleaned up in the end.
private Cursor mCursor;
// App install session id.
private int mSessionId = -1;
+ private LauncherModel mModel;
+
@Override
@Before
public void setUp() throws Exception {
super.setUp();
-
- mResolver = mTargetContext.getContentResolver();
-
- // Clear all existing data
- LauncherSettings.Settings.call(mResolver, LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB);
- LauncherSettings.Settings.call(mResolver,
- LauncherSettings.Settings.METHOD_CLEAR_EMPTY_DB_FLAG);
+ mModel = LauncherAppState.getInstance(mTargetContext).getModel();
}
@After
@@ -103,34 +105,24 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
@Test
public void testBindNormalWidget_withConfig() {
- LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, true);
- LauncherAppWidgetInfo item = createWidgetInfo(info, getTargetContext(), true);
-
- addItemToScreen(item);
+ LauncherAppWidgetProviderInfo info = addWidgetToScreen(true, true, i -> { });
verifyWidgetPresent(info);
}
@Test
public void testBindNormalWidget_withoutConfig() {
- LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, false);
- LauncherAppWidgetInfo item = createWidgetInfo(info, getTargetContext(), true);
-
- addItemToScreen(item);
+ LauncherAppWidgetProviderInfo info = addWidgetToScreen(false, true, i -> { });
verifyWidgetPresent(info);
}
@Test
public void testUnboundWidget_removed() {
- LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, false);
- LauncherAppWidgetInfo item = createWidgetInfo(info, getTargetContext(), false);
- item.appWidgetId = -33;
-
- addItemToScreen(item);
+ LauncherAppWidgetProviderInfo info = addWidgetToScreen(false, false,
+ item -> item.appWidgetId = -33);
final Workspace workspace = mLauncher.getWorkspace();
// Item deleted from db
- mCursor = mResolver.query(LauncherSettings.Favorites.getContentUri(item.id),
- null, null, null, null, null);
+ mCursor = queryItem();
assertEquals(0, mCursor.getCount());
// The view does not exist
@@ -140,36 +132,26 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
@Test
public void testPendingWidget_autoRestored() {
// A non-restored widget with no config screen gets restored automatically.
- LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, false);
-
// Do not bind the widget
- LauncherAppWidgetInfo item = createWidgetInfo(info, getTargetContext(), false);
- item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID;
-
- addItemToScreen(item);
+ LauncherAppWidgetProviderInfo info = addWidgetToScreen(false, false,
+ item -> item.restoreStatus = FLAG_ID_NOT_VALID);
verifyWidgetPresent(info);
}
@Test
public void testPendingWidget_withConfigScreen() {
// A non-restored widget with config screen get bound and shows a 'Click to setup' UI.
- LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(this, true);
-
// Do not bind the widget
- LauncherAppWidgetInfo item = createWidgetInfo(info, getTargetContext(), false);
- item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID;
-
- addItemToScreen(item);
+ LauncherAppWidgetProviderInfo info = addWidgetToScreen(true, false,
+ item -> item.restoreStatus = FLAG_ID_NOT_VALID);
verifyPendingWidgetPresent();
- // Item deleted from db
- mCursor = mResolver.query(LauncherSettings.Favorites.getContentUri(item.id),
- null, null, null, null, null);
+ mCursor = queryItem();
mCursor.moveToNext();
// Widget has a valid Id now.
assertEquals(0, mCursor.getInt(mCursor.getColumnIndex(LauncherSettings.Favorites.RESTORED))
- & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID);
+ & FLAG_ID_NOT_VALID);
assertNotNull(AppWidgetManager.getInstance(mTargetContext)
.getAppWidgetInfo(mCursor.getInt(mCursor.getColumnIndex(
LauncherSettings.Favorites.APPWIDGET_ID))));
@@ -185,7 +167,6 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
appWidgetManager.updateAppWidgetOptions(appWidgetId, b);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
-
// verify changes are reflected
waitForLauncherCondition("App widget options did not update",
l -> appWidgetManager.getAppWidgetOptions(appWidgetId).getBoolean(
@@ -197,17 +178,12 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
@Test
public void testPendingWidget_notRestored_removed() {
- LauncherAppWidgetInfo item = getInvalidWidgetInfo();
- item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID
- | LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY;
-
- addItemToScreen(item);
+ addPendingItemToScreen(getInvalidWidgetInfo(), FLAG_ID_NOT_VALID | FLAG_PROVIDER_NOT_READY);
assertTrue("Pending widget exists",
mLauncher.getWorkspace().tryGetPendingWidget(0) == null);
// Item deleted from db
- mCursor = mResolver.query(LauncherSettings.Favorites.getContentUri(item.id),
- null, null, null, null, null);
+ mCursor = queryItem();
assertEquals(0, mCursor.getCount());
}
@@ -215,32 +191,25 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
public void testPendingWidget_notRestored_brokenInstall() {
// A widget which is was being installed once, even if its not being
// installed at the moment is not removed.
- LauncherAppWidgetInfo item = getInvalidWidgetInfo();
- item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID
- | LauncherAppWidgetInfo.FLAG_RESTORE_STARTED
- | LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY;
-
- addItemToScreen(item);
+ addPendingItemToScreen(getInvalidWidgetInfo(),
+ FLAG_ID_NOT_VALID | FLAG_RESTORE_STARTED | FLAG_PROVIDER_NOT_READY);
verifyPendingWidgetPresent();
// Verify item still exists in db
- mCursor = mResolver.query(LauncherSettings.Favorites.getContentUri(item.id),
- null, null, null, null, null);
+ mCursor = queryItem();
assertEquals(1, mCursor.getCount());
// Widget still has an invalid id.
mCursor.moveToNext();
- assertEquals(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID,
+ assertEquals(FLAG_ID_NOT_VALID,
mCursor.getInt(mCursor.getColumnIndex(LauncherSettings.Favorites.RESTORED))
- & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID);
+ & FLAG_ID_NOT_VALID);
}
@Test
public void testPendingWidget_notRestored_activeInstall() throws Exception {
// A widget which is being installed is not removed
LauncherAppWidgetInfo item = getInvalidWidgetInfo();
- item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID
- | LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY;
// Create an active installer session
SessionParams params = new SessionParams(SessionParams.MODE_FULL_INSTALL);
@@ -248,19 +217,18 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
PackageInstaller installer = mTargetContext.getPackageManager().getPackageInstaller();
mSessionId = installer.createSession(params);
- addItemToScreen(item);
+ addPendingItemToScreen(item, FLAG_ID_NOT_VALID | FLAG_PROVIDER_NOT_READY);
verifyPendingWidgetPresent();
// Verify item still exists in db
- mCursor = mResolver.query(LauncherSettings.Favorites.getContentUri(item.id),
- null, null, null, null, null);
+ mCursor = queryItem();
assertEquals(1, mCursor.getCount());
// Widget still has an invalid id.
mCursor.moveToNext();
- assertEquals(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID,
+ assertEquals(FLAG_ID_NOT_VALID,
mCursor.getInt(mCursor.getColumnIndex(LauncherSettings.Favorites.RESTORED))
- & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID);
+ & FLAG_ID_NOT_VALID);
}
private void verifyWidgetPresent(LauncherAppWidgetProviderInfo info) {
@@ -275,6 +243,28 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
widget != null);
}
+ private void addPendingItemToScreen(LauncherAppWidgetInfo item, int restoreStatus) {
+ item.restoreStatus = restoreStatus;
+ item.screenId = FIRST_SCREEN_ID;
+ new FavoriteItemsTransaction(mTargetContext)
+ .addItem(() -> item)
+ .commitAndLoadHome(mLauncher);
+ }
+
+ private LauncherAppWidgetProviderInfo addWidgetToScreen(boolean hasConfigureScreen,
+ boolean bindWidget, Consumer<LauncherAppWidgetInfo> itemOverride) {
+ LauncherAppWidgetProviderInfo info = TestViewHelpers.findWidgetProvider(hasConfigureScreen);
+ new FavoriteItemsTransaction(mTargetContext)
+ .addItem(() -> {
+ LauncherAppWidgetInfo item = createWidgetInfo(info, mTargetContext, bindWidget);
+ item.screenId = FIRST_SCREEN_ID;
+ itemOverride.accept(item);
+ return item;
+ })
+ .commitAndLoadHome(mLauncher);
+ return info;
+ }
+
/**
* Returns a LauncherAppWidgetInfo with package name which is not present on the device
*/
@@ -312,4 +302,14 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
item.container = LauncherSettings.Favorites.CONTAINER_DESKTOP;
return item;
}
+
+ private Cursor queryItem() {
+ try {
+ return MODEL_EXECUTOR.submit(() ->
+ mModel.getModelDbController().query(
+ TABLE_NAME, null, itemIdMatch(0), null, null)).get();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
}
diff --git a/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java b/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java
index bf9eb5acd6..a6b53692f6 100644
--- a/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java
@@ -32,7 +32,9 @@ import android.view.View;
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
+import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherSettings.Favorites;
+import com.android.launcher3.celllayout.FavoriteItemsTransaction;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
@@ -134,8 +136,7 @@ public class RequestPinItemTest extends AbstractLauncherUiTest {
private void runTest(String activityMethod, boolean isWidget, ItemOperator itemMatcher,
Intent... commandIntents) throws Throwable {
- clearHomescreen();
- mDevice.pressHome();
+ new FavoriteItemsTransaction(mTargetContext).commitAndLoadHome(mLauncher);
// Open Pin item activity
BlockingBroadcastReceiver openMonitor = new BlockingBroadcastReceiver(
@@ -193,7 +194,10 @@ public class RequestPinItemTest extends AbstractLauncherUiTest {
@Override
public boolean isTrue() throws Throwable {
- return mMainThreadExecutor.submit(mActivityMonitor.itemExists(mOp)).get();
+ return mMainThreadExecutor.submit(() -> {
+ Launcher l = Launcher.ACTIVITY_TRACKER.getCreatedActivity();
+ return l != null && l.getWorkspace().getFirstMatch(mOp) != null;
+ }).get();
}
}
}