diff --git a/core/java/com/android/internal/backup/IBackupTransport.aidl b/core/java/com/android/internal/backup/IBackupTransport.aidl index 9daabca6db3fa..84ed729cb7ae9 100644 --- a/core/java/com/android/internal/backup/IBackupTransport.aidl +++ b/core/java/com/android/internal/backup/IBackupTransport.aidl @@ -42,11 +42,14 @@ interface IBackupTransport { */ /** * Verify that this is a suitable time for a backup pass. This should return zero - * if a backup is reasonable right now, false otherwise. This method will be called - * outside of the {@link #startSession}/{@link #endSession} pair. + * if a backup is reasonable right now, some positive value otherwise. This method + * will be called outside of the {@link #startSession}/{@link #endSession} pair. * - *
If this is not a suitable time for a backup, the transport should suggest a + *
If this is not a suitable time for a backup, the transport should return a
* backoff delay, in milliseconds, after which the Backup Manager should try again.
+ *
+ * @return Zero if this is a suitable time for a backup pass, or a positive time delay
+ * in milliseconds to suggest deferring the backup pass for a while.
*/
long requestBackupTime();
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 0d2590c58e128..d842d341fa353 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -68,7 +68,7 @@ import java.util.List;
class BackupManagerService extends IBackupManager.Stub {
private static final String TAG = "BackupManagerService";
private static final boolean DEBUG = true;
-
+
private static final long COLLECTION_INTERVAL = 1000;
//private static final long COLLECTION_INTERVAL = 3 * 60 * 1000;
@@ -90,7 +90,7 @@ class BackupManagerService extends IBackupManager.Stub {
private class BackupRequest {
public ApplicationInfo appInfo;
public boolean fullBackup;
-
+
BackupRequest(ApplicationInfo app, boolean isFull) {
appInfo = app;
fullBackup = isFull;
@@ -120,7 +120,9 @@ class BackupManagerService extends IBackupManager.Stub {
private final Object mClearDataLock = new Object();
private volatile boolean mClearingData;
+ // Current active transport & restore session
private int mTransportId;
+ private IBackupTransport mTransport;
private RestoreSession mActiveRestoreSession;
private File mStateDir;
@@ -128,7 +130,7 @@ class BackupManagerService extends IBackupManager.Stub {
private File mJournalDir;
private File mJournal;
private RandomAccessFile mJournalStream;
-
+
public BackupManagerService(Context context) {
mContext = context;
mPackageManager = context.getPackageManager();
@@ -144,14 +146,16 @@ class BackupManagerService extends IBackupManager.Stub {
mJournalDir.mkdirs();
makeJournalLocked(); // okay because no other threads are running yet
- //!!! TODO: default to cloud transport, not local
- mTransportId = BackupManager.TRANSPORT_LOCAL;
-
// Build our mapping of uid to backup client services
synchronized (mBackupParticipants) {
addPackageParticipantsLocked(null);
}
+ // Stand up our default transport
+ //!!! TODO: default to cloud transport, not local
+ mTransportId = BackupManager.TRANSPORT_LOCAL;
+ mTransport = createTransport(mTransportId);
+
// Now that we know about valid backup participants, parse any
// leftover journal files and schedule a new backup pass
parseLeftoverJournals();
@@ -284,7 +288,7 @@ class BackupManagerService extends IBackupManager.Stub {
// deleted. If we crash prior to that, the old journal is parsed
// at next boot and the journaled requests fulfilled.
}
- (new PerformBackupThread(mTransportId, mBackupQueue, oldJournal)).run();
+ (new PerformBackupThread(mTransport, mBackupQueue, oldJournal)).run();
break;
case MSG_RUN_FULL_BACKUP:
@@ -396,7 +400,7 @@ class BackupManagerService extends IBackupManager.Stub {
}
return allApps;
}
-
+
// Reset the given package's known backup participants. Unlike add/remove, the update
// action cannot be passed a null package name.
void updatePackageParticipantsLocked(String packageName) {
@@ -505,13 +509,13 @@ class BackupManagerService extends IBackupManager.Stub {
class PerformBackupThread extends Thread {
private static final String TAG = "PerformBackupThread";
- int mTransport;
+ IBackupTransport mTransport;
ArrayList