diff options
author | Christopher Tate <ctate@google.com> | 2014-08-07 23:16:27 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-07 18:39:40 +0000 |
commit | 54f089416925c164f3b5353a6fa09359d959cf7e (patch) | |
tree | 27544042d8bfe51ef01cec6d9299f28db944d722 | |
parent | dbf45c14af8200234ef3d47adc0cce96745f882c (diff) | |
parent | e079264b981d87c648921185528b553a86ae353d (diff) | |
download | frameworks_base-54f089416925c164f3b5353a6fa09359d959cf7e.zip frameworks_base-54f089416925c164f3b5353a6fa09359d959cf7e.tar.gz frameworks_base-54f089416925c164f3b5353a6fa09359d959cf7e.tar.bz2 |
Merge "API to tell the transport to cancel a full backup in progress" into lmp-dev
-rw-r--r-- | core/java/android/app/backup/BackupTransport.java | 19 | ||||
-rw-r--r-- | core/java/com/android/internal/backup/LocalTransport.java | 34 |
2 files changed, 45 insertions, 8 deletions
diff --git a/core/java/android/app/backup/BackupTransport.java b/core/java/android/app/backup/BackupTransport.java index dc3bbc0..6adc2e0 100644 --- a/core/java/android/app/backup/BackupTransport.java +++ b/core/java/android/app/backup/BackupTransport.java @@ -405,6 +405,25 @@ public class BackupTransport { return BackupTransport.TRANSPORT_ERROR; } + /** + * Tells the transport to cancel the currently-ongoing full backup operation. This + * will happen between {@link #performFullBackup()} and {@link #finishBackup()} + * if the OS needs to abort the backup operation for any reason, such as a crash in + * the application undergoing backup. + * + * <p>When it receives this call, the transport should discard any partial archive + * that it has stored so far. If possible it should also roll back to the previous + * known-good archive in its datastore. + * + * <p>If the transport receives this callback, it will <em>not</em> receive a + * call to {@link #finishBackup()}. It needs to tear down any ongoing backup state + * here. + */ + public void cancelFullBackup() { + throw new UnsupportedOperationException( + "Transport cancelFullBackup() not implemented"); + } + // ------------------------------------------------------------------------------------ // Full restore interfaces diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java index 97e1102..d8dffe0 100644 --- a/core/java/com/android/internal/backup/LocalTransport.java +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -273,11 +273,15 @@ public class LocalTransport extends BackupTransport { @Override public int finishBackup() { - if (DEBUG) Log.v(TAG, "finishBackup()"); + if (DEBUG) Log.v(TAG, "finishBackup() of " + mFullTargetPackage); + return tearDownFullBackup(); + } + + // ------------------------------------------------------------------------------------ + // Full backup handling + + private int tearDownFullBackup() { if (mSocket != null) { - if (DEBUG) { - Log.v(TAG, "Concluding full backup of " + mFullTargetPackage); - } try { mFullBackupOutputStream.flush(); mFullBackupOutputStream.close(); @@ -286,7 +290,7 @@ public class LocalTransport extends BackupTransport { mSocket.close(); } catch (IOException e) { if (DEBUG) { - Log.w(TAG, "Exception caught in finishBackup()", e); + Log.w(TAG, "Exception caught in tearDownFullBackup()", e); } return TRANSPORT_ERROR; } finally { @@ -296,8 +300,9 @@ public class LocalTransport extends BackupTransport { return TRANSPORT_OK; } - // ------------------------------------------------------------------------------------ - // Full backup handling + private File tarballFile(String pkgName) { + return new File(mCurrentSetFullDir, pkgName); + } @Override public long requestFullBackupTime() { @@ -329,7 +334,7 @@ public class LocalTransport extends BackupTransport { mFullTargetPackage = targetPackage.packageName; FileOutputStream tarstream; try { - File tarball = new File(mCurrentSetFullDir, mFullTargetPackage); + File tarball = tarballFile(mFullTargetPackage); tarstream = new FileOutputStream(tarball); } catch (FileNotFoundException e) { return TRANSPORT_ERROR; @@ -368,6 +373,19 @@ public class LocalTransport extends BackupTransport { return TRANSPORT_OK; } + // For now we can't roll back, so just tear everything down. + @Override + public void cancelFullBackup() { + if (DEBUG) { + Log.i(TAG, "Canceling full backup of " + mFullTargetPackage); + } + File archive = tarballFile(mFullTargetPackage); + tearDownFullBackup(); + if (archive.exists()) { + archive.delete(); + } + } + // ------------------------------------------------------------------------------------ // Restore handling static final long[] POSSIBLE_SETS = { 2, 3, 4, 5, 6, 7, 8, 9 }; |