Clearing DB before restore starts.

Bug: 18362052
Change-Id: Ic4faf04db2f76c0c434907f1c41c8b708283eeb7
diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java
index b03b13c..3868a57 100644
--- a/src/com/android/launcher3/LauncherBackupAgentHelper.java
+++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java
@@ -69,13 +69,23 @@
             Log.d(TAG, "Restore is only supported on devices running Lollipop and above.");
             return;
         }
-        super.onRestore(data, appVersionCode, newState);
 
-        // If no favorite was migrated, clear the data and start fresh.
-        final Cursor c = getContentResolver().query(
-                LauncherSettings.Favorites.CONTENT_URI_NO_NOTIFICATION, null, null, null, null);
-        boolean hasData = c.moveToNext();
-        c.close();
+        // Clear dB before restore
+        LauncherAppState.getLauncherProvider().createEmptyDB();
+
+        boolean hasData;
+        try {
+            super.onRestore(data, appVersionCode, newState);
+            // If no favorite was migrated, clear the data and start fresh.
+            final Cursor c = getContentResolver().query(
+                    LauncherSettings.Favorites.CONTENT_URI_NO_NOTIFICATION, null, null, null, null);
+            hasData = c.moveToNext();
+            c.close();
+        } catch (Exception e) {
+            // If the restore fails, we should do a fresh start.
+            Log.e(TAG, "Restore failed", e);
+            hasData = false;
+        }
 
         if (hasData && mHelper.restoreSuccessful) {
             LauncherAppState.getLauncherProvider().clearFlagEmptyDbCreated();