diff options
author | Joe Onorato <joeo@android.com> | 2009-06-17 21:49:50 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-06-17 21:49:50 -0700 |
commit | 72dcea1eed882123c3f9285f2ab908f530993609 (patch) | |
tree | a5f26a16fa18bd9d5c5f897ccb4b8c89e7393b58 /core | |
parent | d206fb4fea2c5d9d02177a03503dc03c94c9b412 (diff) | |
parent | 83248c432ffe2e2a17abbc8e4960c26574b46bca (diff) | |
download | frameworks_base-72dcea1eed882123c3f9285f2ab908f530993609.zip frameworks_base-72dcea1eed882123c3f9285f2ab908f530993609.tar.gz frameworks_base-72dcea1eed882123c3f9285f2ab908f530993609.tar.bz2 |
am 83248c43: backup fixes:
Merge commit '83248c432ffe2e2a17abbc8e4960c26574b46bca'
* commit '83248c432ffe2e2a17abbc8e4960c26574b46bca':
backup fixes:
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/app/BackupAgent.java | 26 | ||||
-rw-r--r-- | core/java/android/app/FullBackupAgent.java | 3 | ||||
-rw-r--r-- | core/java/android/backup/BackupDataOutput.java | 4 | ||||
-rw-r--r-- | core/java/android/backup/RestoreHelperDispatcher.java | 17 | ||||
-rw-r--r-- | core/java/com/android/internal/backup/LocalTransport.java | 2 |
5 files changed, 40 insertions, 12 deletions
diff --git a/core/java/android/app/BackupAgent.java b/core/java/android/app/BackupAgent.java index 997bfdc..85c001c 100644 --- a/core/java/android/app/BackupAgent.java +++ b/core/java/android/app/BackupAgent.java @@ -17,6 +17,7 @@ package android.app; import android.app.IBackupAgent; +import android.backup.BackupDataInput; import android.backup.BackupDataOutput; import android.content.Context; import android.content.ContextWrapper; @@ -25,6 +26,8 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.util.Log; +import java.io.IOException; + /** * This is the central interface between an application and Android's * settings backup mechanism. @@ -32,6 +35,8 @@ import android.util.Log; * @hide pending API solidification */ public abstract class BackupAgent extends ContextWrapper { + private static final String TAG = "BackupAgent"; + public BackupAgent() { super(null); } @@ -77,8 +82,8 @@ public abstract class BackupAgent extends ContextWrapper { * file. The application should record the final backup state * here after restoring its data from dataFd. */ - public abstract void onRestore(ParcelFileDescriptor /* TODO: BackupDataInput */ data, - ParcelFileDescriptor newState); + public abstract void onRestore(BackupDataInput data, ParcelFileDescriptor newState) + throws IOException; // ----- Core implementation ----- @@ -107,13 +112,11 @@ public abstract class BackupAgent extends ContextWrapper { ParcelFileDescriptor newState) throws RemoteException { // !!! TODO - real implementation; for now just invoke the callbacks directly Log.v(TAG, "doBackup() invoked"); - BackupDataOutput output = new BackupDataOutput(BackupAgent.this, - data.getFileDescriptor()); + BackupDataOutput output = new BackupDataOutput(data.getFileDescriptor()); try { BackupAgent.this.onBackup(oldState, output, newState); } catch (RuntimeException ex) { - Log.d("BackupAgent", "onBackup (" - + BackupAgent.this.getClass().getName() + ") threw", ex); + Log.d(TAG, "onBackup (" + BackupAgent.this.getClass().getName() + ") threw", ex); throw ex; } } @@ -122,7 +125,16 @@ public abstract class BackupAgent extends ContextWrapper { ParcelFileDescriptor newState) throws RemoteException { // !!! TODO - real implementation; for now just invoke the callbacks directly Log.v(TAG, "doRestore() invoked"); - BackupAgent.this.onRestore(data, newState); + BackupDataInput input = new BackupDataInput(data.getFileDescriptor()); + try { + BackupAgent.this.onRestore(input, newState); + } catch (IOException ex) { + Log.d(TAG, "onRestore (" + BackupAgent.this.getClass().getName() + ") threw", ex); + throw new RuntimeException(ex); + } catch (RuntimeException ex) { + Log.d(TAG, "onRestore (" + BackupAgent.this.getClass().getName() + ") threw", ex); + throw ex; + } } } } diff --git a/core/java/android/app/FullBackupAgent.java b/core/java/android/app/FullBackupAgent.java index bf5cb5d..89becf4 100644 --- a/core/java/android/app/FullBackupAgent.java +++ b/core/java/android/app/FullBackupAgent.java @@ -1,5 +1,6 @@ package android.app; +import android.backup.BackupDataInput; import android.backup.BackupDataOutput; import android.backup.FileBackupHelper; import android.os.ParcelFileDescriptor; @@ -52,6 +53,6 @@ public class FullBackupAgent extends BackupAgent { } @Override - public void onRestore(ParcelFileDescriptor data, ParcelFileDescriptor newState) { + public void onRestore(BackupDataInput data, ParcelFileDescriptor newState) { } } diff --git a/core/java/android/backup/BackupDataOutput.java b/core/java/android/backup/BackupDataOutput.java index 1348d81..a6d5bec 100644 --- a/core/java/android/backup/BackupDataOutput.java +++ b/core/java/android/backup/BackupDataOutput.java @@ -24,13 +24,11 @@ import java.io.IOException; /** @hide */ public class BackupDataOutput { int mBackupWriter; - private Context mContext; public static final int OP_UPDATE = 1; public static final int OP_DELETE = 2; - public BackupDataOutput(Context context, FileDescriptor fd) { - mContext = context; + public BackupDataOutput(FileDescriptor fd) { if (fd == null) throw new NullPointerException(); mBackupWriter = ctor(fd); if (mBackupWriter == 0) { diff --git a/core/java/android/backup/RestoreHelperDispatcher.java b/core/java/android/backup/RestoreHelperDispatcher.java index 8fcade4..5928914 100644 --- a/core/java/android/backup/RestoreHelperDispatcher.java +++ b/core/java/android/backup/RestoreHelperDispatcher.java @@ -16,11 +16,15 @@ package android.backup; +import android.util.Log; + import java.io.IOException; import java.util.HashMap; /** @hide */ public class RestoreHelperDispatcher { + private static final String TAG = "RestoreHelperDispatcher"; + HashMap<String,RestoreHelper> mHelpers = new HashMap<String,RestoreHelper>(); public void addHelper(String keyPrefix, RestoreHelper helper) { @@ -28,8 +32,11 @@ public class RestoreHelperDispatcher { } public void dispatch(BackupDataInput input) throws IOException { + boolean alreadyComplained = false; + BackupDataInputStream stream = new BackupDataInputStream(input); while (input.readNextHeader()) { + String rawKey = input.getKey(); int pos = rawKey.indexOf(':'); if (pos > 0) { @@ -39,6 +46,16 @@ public class RestoreHelperDispatcher { stream.dataSize = input.getDataSize(); stream.key = rawKey.substring(pos+1); helper.restoreEntity(stream); + } else { + if (!alreadyComplained) { + Log.w(TAG, "Couldn't find helper for: '" + rawKey + "'"); + alreadyComplained = true; + } + } + } else { + if (!alreadyComplained) { + Log.w(TAG, "Entity with no prefix: '" + rawKey + "'"); + alreadyComplained = true; } } input.skipEntityData(); // In case they didn't consume the data. diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java index 123c072..577ecb4 100644 --- a/core/java/com/android/internal/backup/LocalTransport.java +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -160,7 +160,7 @@ public class LocalTransport extends IBackupTransport.Stub { File[] blobs = packageDir.listFiles(); int err = 0; if (blobs != null && blobs.length > 0) { - BackupDataOutput out = new BackupDataOutput(mContext, outFd.getFileDescriptor()); + BackupDataOutput out = new BackupDataOutput(outFd.getFileDescriptor()); try { for (File f : blobs) { FileInputStream in = new FileInputStream(f); |