diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 7ba9935..df09f29 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -461,13 +461,6 @@
                 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;
     }
@@ -504,30 +497,6 @@
         }
     }
 
-    /**
-     * 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 bf9cd92..048aaaa 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -392,8 +392,6 @@
 
         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 da6551c..0ffbeeb 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -288,14 +288,13 @@
     }
 
     /**
-     * Removes all items from workspace and populate default hotseat.
+     * Removes all icons from homescreen and hotseat.
      */
-    public void clearWorkspace() {
-        // First clear data to ensure hotseat is populated.
-        clearLauncherData();
-        // Next make provider call to clear everything apart from hotseat.
+    public void clearHomescreen() throws Throwable {
         LauncherSettings.Settings.call(mTargetContext.getContentResolver(),
-                LauncherSettings.Settings.METHOD_CLEAR_WORKSPACE);
+                LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB);
+        LauncherSettings.Settings.call(mTargetContext.getContentResolver(),
+                LauncherSettings.Settings.METHOD_CLEAR_EMPTY_DB_FLAG);
         resetLoaderState();
     }
 
diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
index 34dddf5..5ea5d65 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 {
-        clearWorkspace();
+        clearHomescreen();
         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 3696755..dad4f2b 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 {
-        clearWorkspace();
+        clearHomescreen();
         mDevice.pressHome();
 
         final LauncherAppWidgetProviderInfo widgetInfo =
@@ -81,7 +81,7 @@
     @Test
     @PortraitLandscape
     public void testDragCustomShortcut() throws Throwable {
-        clearWorkspace();
+        clearHomescreen();
         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 270c2ec..ccbb662 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 {
-        clearWorkspace();
+        clearHomescreen();
         mDevice.pressHome();
 
         // Open Pin item activity
