Updating backup restore logic

> Adding DeviceProfile information in the backup
> Removing SharedPreference backup
> Adding helper methods to abort backup in the middle
> Comparing keys against the backup journal during restore
to avoid restoring corrupt/lost entries
> Old backups are still compatible, but lost keys verification
will be ignored in that case.

Bug: 17937935
Bug: 17951775
Bug: 17260941
Change-Id: Iad48646cfdd69abaff5c163b2055f3b8a9b39b19
diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java
index 09ad22b..b03b13c 100644
--- a/src/com/android/launcher3/LauncherBackupAgentHelper.java
+++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java
@@ -22,7 +22,6 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.os.ParcelFileDescriptor;
-import android.provider.Settings;
 import android.util.Log;
 
 import java.io.IOException;
@@ -30,13 +29,14 @@
 public class LauncherBackupAgentHelper extends BackupAgentHelper {
 
     private static final String TAG = "LauncherBackupAgentHelper";
+
+    private static final String LAUNCHER_DATA_PREFIX = "L";
+
     static final boolean VERBOSE = true;
     static final boolean DEBUG = false;
 
     private static BackupManager sBackupManager;
 
-    protected static final String SETTING_RESTORE_ENABLED = "launcher_restore_enabled";
-
     /**
      * Notify the backup manager that out database is dirty.
      *
@@ -51,28 +51,13 @@
         sBackupManager.dataChanged();
     }
 
-    @Override
-    public void onDestroy() {
-        // There is only one process accessing this preference file, but the restore
-        // modifies the file outside the normal codepaths, so it looks like another
-        // process.  This forces a reload of the file, in case this process persists.
-        String spKey = LauncherAppState.getSharedPreferencesKey();
-        getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS);
-        super.onDestroy();
-    }
+    private LauncherBackupHelper mHelper;
 
     @Override
     public void onCreate() {
-        boolean restoreEnabled = 0 != Settings.Secure.getInt(
-                getContentResolver(), SETTING_RESTORE_ENABLED, 1);
-        if (VERBOSE) Log.v(TAG, "restore is " + (restoreEnabled ? "enabled" : "disabled"));
-
-        addHelper(LauncherBackupHelper.LAUNCHER_PREFS_PREFIX,
-                new LauncherPreferencesBackupHelper(this,
-                        LauncherAppState.getSharedPreferencesKey(),
-                        restoreEnabled));
-        addHelper(LauncherBackupHelper.LAUNCHER_PREFIX,
-                new LauncherBackupHelper(this, restoreEnabled));
+        super.onCreate();
+        mHelper = new LauncherBackupHelper(this);
+        addHelper(LAUNCHER_DATA_PREFIX, mHelper);
     }
 
     @Override
@@ -92,7 +77,10 @@
         boolean hasData = c.moveToNext();
         c.close();
 
-        if (!hasData) {
+        if (hasData && mHelper.restoreSuccessful) {
+            LauncherAppState.getLauncherProvider().clearFlagEmptyDbCreated();
+            LauncherClings.synchonouslyMarkFirstRunClingDismissed(this);
+        } else {
             if (VERBOSE) Log.v(TAG, "Nothing was restored, clearing DB");
             LauncherAppState.getLauncherProvider().createEmptyDB();
         }