diff options
Diffstat (limited to 'src/com/android/launcher3/LauncherBackupAgentHelper.java')
-rw-r--r-- | src/com/android/launcher3/LauncherBackupAgentHelper.java | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java index c20c6939d..3868a57f1 100644 --- a/src/com/android/launcher3/LauncherBackupAgentHelper.java +++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java @@ -22,7 +22,6 @@ import android.app.backup.BackupManager; 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 @@ import java.io.IOException; 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,42 +51,46 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper { 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 public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException { - super.onRestore(data, appVersionCode, newState); + if (!Utilities.isLmpOrAbove()) { + // No restore for old devices. + Log.i(TAG, "You shall not pass!!!"); + Log.d(TAG, "Restore is only supported on devices running Lollipop and above."); + return; + } - // 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) { + if (hasData && mHelper.restoreSuccessful) { + LauncherAppState.getLauncherProvider().clearFlagEmptyDbCreated(); + LauncherClings.synchonouslyMarkFirstRunClingDismissed(this); + } else { if (VERBOSE) Log.v(TAG, "Nothing was restored, clearing DB"); LauncherAppState.getLauncherProvider().createEmptyDB(); } |