From 22be1a47f4b0ca67e115670e7005750aef5a52e8 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Thu, 14 Oct 2021 14:43:55 +0100 Subject: [PATCH] Clear only workspace shortcut / widget related tests - This ensure hotseat to be populated with default items, so it won't result in an empty taskbar which get stashed in apps - Workspace needs to be cleared because shortcut / widget dragging won't always work if there are items in workspace. It only happens in test due to the way we drag items. Fix: 202546679 Test: NexusLauncherTests:com.android.launcher3.ui.widget.RequestPinItemTest Change-Id: Ib3ded6a685eaa1b169b75fd179c9e29ca4be1e72 --- .../android/launcher3/LauncherProvider.java | 31 +++++++++++++++++++ .../android/launcher3/LauncherSettings.java | 2 ++ .../launcher3/ui/AbstractLauncherUiTest.java | 11 ++++--- .../ui/widget/AddConfigWidgetTest.java | 2 +- .../launcher3/ui/widget/AddWidgetTest.java | 4 +-- .../ui/widget/RequestPinItemTest.java | 2 +- 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index df09f29241..7ba9935b13 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -461,6 +461,13 @@ public class LauncherProvider extends ContentProvider { app.getModel().forceReload(); return null; } + case LauncherSettings.Settings.METHOD_CLEAR_WORKSPACE: + { + Bundle result = new Bundle(); + result.putIntArray(LauncherSettings.Settings.EXTRA_VALUE, clearWorkspace() + .toArray()); + return result; + } } return null; } @@ -497,6 +504,30 @@ public class LauncherProvider extends ContentProvider { } } + /** + * Deletes any items from the DB apart from hotseat. + * @return Ids of deleted items. + */ + private IntArray clearWorkspace() { + SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + try (SQLiteTransaction t = new SQLiteTransaction(db)) { + String selection = LauncherSettings.Favorites.CONTAINER + " <> " + + LauncherSettings.Favorites.CONTAINER_HOTSEAT; + + IntArray itemIds = LauncherDbUtils.queryIntArray(db, Favorites.TABLE_NAME, + Favorites._ID, selection, null, null); + if (!itemIds.isEmpty()) { + db.delete(Favorites.TABLE_NAME, Utilities.createDbSelectionQuery( + LauncherSettings.Favorites._ID, itemIds), null); + } + t.commit(); + return itemIds; + } catch (SQLException ex) { + Log.e(TAG, ex.getMessage(), ex); + return new IntArray(); + } + } + @Thunk static void addModifiedTime(ContentValues values) { values.put(LauncherSettings.Favorites.MODIFIED, System.currentTimeMillis()); } diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index 048aaaa3bf..bf9cd92b24 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -392,6 +392,8 @@ public class LauncherSettings { public static final String METHOD_SWITCH_DATABASE = "switch_database"; + public static final String METHOD_CLEAR_WORKSPACE = "clear_workspace"; + public static final String EXTRA_VALUE = "value"; public static final String EXTRA_DB_NAME = "db_name"; diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java index 0ffbeeb95e..da6551cce0 100644 --- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java @@ -288,13 +288,14 @@ public abstract class AbstractLauncherUiTest { } /** - * Removes all icons from homescreen and hotseat. + * Removes all items from workspace and populate default hotseat. */ - public void clearHomescreen() throws Throwable { + public void clearWorkspace() { + // First clear data to ensure hotseat is populated. + clearLauncherData(); + // Next make provider call to clear everything apart from hotseat. LauncherSettings.Settings.call(mTargetContext.getContentResolver(), - LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB); - LauncherSettings.Settings.call(mTargetContext.getContentResolver(), - LauncherSettings.Settings.METHOD_CLEAR_EMPTY_DB_FLAG); + LauncherSettings.Settings.METHOD_CLEAR_WORKSPACE); resetLoaderState(); } diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index 5ea5d6588a..34dddf5c11 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -85,7 +85,7 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { * @param acceptConfig accept the config activity */ private void runTest(boolean acceptConfig) throws Throwable { - clearHomescreen(); + clearWorkspace(); mDevice.pressHome(); final Widgets widgets = mLauncher.getWorkspace().openAllWidgets(); diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java index dad4f2b045..3696755eb4 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java @@ -47,7 +47,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape public void testDragIcon() throws Throwable { - clearHomescreen(); + clearWorkspace(); mDevice.pressHome(); final LauncherAppWidgetProviderInfo widgetInfo = @@ -81,7 +81,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape public void testDragCustomShortcut() throws Throwable { - clearHomescreen(); + clearWorkspace(); mDevice.pressHome(); mLauncher.getWorkspace().openAllWidgets() .getWidget("com.android.launcher3.testcomponent.CustomShortcutConfigActivity") diff --git a/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java b/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java index ccbb662055..270c2ec432 100644 --- a/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java +++ b/tests/src/com/android/launcher3/ui/widget/RequestPinItemTest.java @@ -125,7 +125,7 @@ public class RequestPinItemTest extends AbstractLauncherUiTest { private void runTest(String activityMethod, boolean isWidget, ItemOperator itemMatcher, Intent... commandIntents) throws Throwable { - clearHomescreen(); + clearWorkspace(); mDevice.pressHome(); // Open Pin item activity