summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherBackupAgentHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/LauncherBackupAgentHelper.java')
-rw-r--r--src/com/android/launcher3/LauncherBackupAgentHelper.java62
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();
}