summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherBackupHelper.java
diff options
context:
space:
mode:
authorChris Wren <cwren@android.com>2014-02-27 15:49:39 -0500
committerChris Wren <cwren@android.com>2014-02-27 15:49:39 -0500
commit7114426665c21a11464147a8bb5e094b7949db42 (patch)
tree94840f638c202b0c0afb15cc1a284dc64bad751c /src/com/android/launcher3/LauncherBackupHelper.java
parent3de6ea8647882c507aaa8578a9fada88eadd0be9 (diff)
downloadandroid_packages_apps_Trebuchet-7114426665c21a11464147a8bb5e094b7949db42.tar.gz
android_packages_apps_Trebuchet-7114426665c21a11464147a8bb5e094b7949db42.tar.bz2
android_packages_apps_Trebuchet-7114426665c21a11464147a8bb5e094b7949db42.zip
skip backup if launcher is in a bad state
Bug: 13153542 Change-Id: I4312ebd200e8e652ef841f54301981c2a486b726
Diffstat (limited to 'src/com/android/launcher3/LauncherBackupHelper.java')
-rw-r--r--src/com/android/launcher3/LauncherBackupHelper.java42
1 files changed, 32 insertions, 10 deletions
diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java
index c706cf174..62e6f3102 100644
--- a/src/com/android/launcher3/LauncherBackupHelper.java
+++ b/src/com/android/launcher3/LauncherBackupHelper.java
@@ -50,9 +50,7 @@ import android.util.Base64;
import android.util.Log;
import java.io.ByteArrayOutputStream;
-import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
@@ -188,16 +186,20 @@ public class LauncherBackupHelper implements BackupHelper {
Log.v(TAG, "lastBackupTime = " + lastBackupTime);
ArrayList<Key> keys = new ArrayList<Key>();
- try {
- backupFavorites(in, data, out, keys);
- backupScreens(in, data, out, keys);
- backupIcons(in, data, out, keys);
- backupWidgets(in, data, out, keys);
- } catch (IOException e) {
- Log.e(TAG, "launcher backup has failed", e);
+ if (launcherIsReady()) {
+ try {
+ backupFavorites(in, data, out, keys);
+ backupScreens(in, data, out, keys);
+ backupIcons(in, data, out, keys);
+ backupWidgets(in, data, out, keys);
+ } catch (IOException e) {
+ Log.e(TAG, "launcher backup has failed", e);
+ }
+ out.key = keys.toArray(new BackupProtos.Key[keys.size()]);
+ } else {
+ out = in;
}
- out.key = keys.toArray(new BackupProtos.Key[keys.size()]);
writeJournal(newState, out);
Log.v(TAG, "onBackup: wrote " + out.bytes + "b in " + out.rows + " rows.");
}
@@ -1129,6 +1131,26 @@ public class LauncherBackupHelper implements BackupHelper {
return mIconCache != null;
}
+
+ // check if the launcher is in a state to support backup
+ private boolean launcherIsReady() {
+ ContentResolver cr = mContext.getContentResolver();
+ Cursor cursor = cr.query(Favorites.CONTENT_URI, FAVORITE_PROJECTION, null, null, null);
+ if (cursor == null) {
+ // launcher data has been wiped, do nothing
+ return false;
+ }
+ cursor.close();
+
+ if (!initializeIconCache()) {
+ // launcher services are unavailable, try again later
+ dataChanged();
+ return false;
+ }
+
+ return true;
+ }
+
private class KeyParsingException extends Throwable {
private KeyParsingException(Throwable cause) {
super(cause);