Merge "Add optional flag to clear old preloaded workspace" into klp-dev
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 4133b1e..71da90c 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1275,7 +1275,7 @@
             final boolean isSafeMode = manager.isSafeMode();
 
             // Make sure the default workspace is loaded, if needed
-            mApp.getLauncherProvider().loadDefaultFavoritesIfNecessary(0);
+            mApp.getLauncherProvider().loadDefaultFavoritesIfNecessary(0, false);
 
             synchronized (sBgLock) {
                 sBgWorkspaceItems.clear();
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 8097ac9..2a48573 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -55,6 +55,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import java.io.File;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -208,10 +209,13 @@
     /**
      * @param workspaceResId that can be 0 to use default or non-zero for specific resource
      */
-    synchronized public void loadDefaultFavoritesIfNecessary(int origWorkspaceResId) {
+    synchronized public void loadDefaultFavoritesIfNecessary(int origWorkspaceResId,
+            boolean overridePrevious) {
         String spKey = LauncherApplication.getSharedPreferencesKey();
         SharedPreferences sp = getContext().getSharedPreferences(spKey, Context.MODE_PRIVATE);
-        if (sp.getBoolean(DB_CREATED_BUT_DEFAULT_WORKSPACE_NOT_LOADED, false)) {
+        boolean dbCreatedNoWorkspace =
+                sp.getBoolean(DB_CREATED_BUT_DEFAULT_WORKSPACE_NOT_LOADED, false);
+        if (dbCreatedNoWorkspace || overridePrevious) {
             int workspaceResId = origWorkspaceResId;
 
             // Use default workspace resource if none provided
@@ -225,11 +229,27 @@
             if (origWorkspaceResId != 0) {
                 editor.putInt(DEFAULT_WORKSPACE_RESOURCE_ID, origWorkspaceResId);
             }
+            if (!dbCreatedNoWorkspace && overridePrevious) {
+                if (LOGD) Log.d(TAG, "Clearing old launcher database");
+                // Workspace has already been loaded, clear the database.
+                deleteDatabase();
+            }
             mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), workspaceResId);
             editor.commit();
         }
     }
 
+    public void deleteDatabase() {
+        // Are you sure? (y/n)
+        final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+        final File dbFile = new File(db.getPath());
+        mOpenHelper.close();
+        if (dbFile.exists()) {
+            SQLiteDatabase.deleteDatabase(dbFile);
+        }
+        mOpenHelper = new DatabaseHelper(getContext());
+    }
+
     private static class DatabaseHelper extends SQLiteOpenHelper {
         private static final String TAG_FAVORITES = "favorites";
         private static final String TAG_FAVORITE = "favorite";
diff --git a/src/com/android/launcher2/PreloadReceiver.java b/src/com/android/launcher2/PreloadReceiver.java
index 08350b6..c28c55d 100644
--- a/src/com/android/launcher2/PreloadReceiver.java
+++ b/src/com/android/launcher2/PreloadReceiver.java
@@ -28,6 +28,8 @@
 
     public static final String EXTRA_WORKSPACE_NAME =
             "com.android.launcher.action.EXTRA_WORKSPACE_NAME";
+    public static final String EXTRA_OVERRIDE_PREVIOUS =
+            "com.android.launcher.action.EXTRA_OVERRIDE_PREVIOUS";
 
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -37,13 +39,16 @@
             String name = intent.getStringExtra(EXTRA_WORKSPACE_NAME);
             final int workspaceResId = !TextUtils.isEmpty(name)
                     ? context.getResources().getIdentifier(name, "xml", "com.android.launcher") : 0;
+
+            final boolean overridePrevious =
+                    intent.getBooleanExtra(EXTRA_OVERRIDE_PREVIOUS, false);
             if (LOGD) {
                 Log.d(TAG, "workspace name: " + name + " id: " + workspaceResId);
             }
             new Thread(new Runnable() {
                 @Override
                 public void run() {
-                    provider.loadDefaultFavoritesIfNecessary(workspaceResId);
+                    provider.loadDefaultFavoritesIfNecessary(workspaceResId, overridePrevious);
                 }
             }).start();
         }