Merge "Clear only workspace shortcut / widget related tests" into sc-v2-dev
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index df09f29..7ba9935 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -461,6 +461,13 @@
                 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 @@
         }
     }
 
+    /**
+     * 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 048aaaa..bf9cd92 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -392,6 +392,8 @@
 
         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 0ffbeeb..da6551c 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -288,13 +288,14 @@
     }
 
     /**
-     * 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 5ea5d65..34dddf5 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 @@
      * @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 dad4f2b..3696755 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 @@
     @Test
     @PortraitLandscape
     public void testDragIcon() throws Throwable {
-        clearHomescreen();
+        clearWorkspace();
         mDevice.pressHome();
 
         final LauncherAppWidgetProviderInfo widgetInfo =
@@ -81,7 +81,7 @@
     @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 ccbb662..270c2ec 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 @@
 
     private void runTest(String activityMethod, boolean isWidget, ItemOperator itemMatcher,
             Intent... commandIntents) throws Throwable {
-        clearHomescreen();
+        clearWorkspace();
         mDevice.pressHome();
 
         // Open Pin item activity