summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java17
-rw-r--r--services/backup/java/com/android/server/backup/internal/BackupHandler.java9
-rw-r--r--services/backup/java/com/android/server/backup/internal/PerformClearTask.java44
-rw-r--r--services/backup/java/com/android/server/backup/params/ClearParams.java17
-rw-r--r--services/backup/java/com/android/server/backup/params/ClearRetryParams.java7
5 files changed, 58 insertions, 36 deletions
diff --git a/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java b/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java
index 3eaee9a40b99..bd0d853ce698 100644
--- a/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java
@@ -2389,19 +2389,24 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
if (MORE_DEBUG) Slog.v(TAG, "Found the app - running clear process");
mBackupHandler.removeMessages(MSG_RETRY_CLEAR);
synchronized (mQueueLock) {
- final IBackupTransport transport =
- mTransportManager.getTransportBinder(transportName);
- if (transport == null) {
- // transport is currently unavailable -- make sure to retry
+ TransportClient transportClient =
+ mTransportManager
+ .getTransportClient(transportName, "BMS.clearBackupData()");
+ if (transportClient == null) {
+ // transport is currently unregistered -- make sure to retry
Message msg = mBackupHandler.obtainMessage(MSG_RETRY_CLEAR,
new ClearRetryParams(transportName, packageName));
mBackupHandler.sendMessageDelayed(msg, TRANSPORT_RETRY_INTERVAL);
return;
}
long oldId = Binder.clearCallingIdentity();
+ OnTaskFinishedListener listener =
+ caller ->
+ mTransportManager.disposeOfTransportClient(transportClient, caller);
mWakelock.acquire();
- Message msg = mBackupHandler.obtainMessage(MSG_RUN_CLEAR,
- new ClearParams(transport, info));
+ Message msg = mBackupHandler.obtainMessage(
+ MSG_RUN_CLEAR,
+ new ClearParams(transportClient, info, listener));
mBackupHandler.sendMessage(msg);
Binder.restoreCallingIdentity(oldId);
}
diff --git a/services/backup/java/com/android/server/backup/internal/BackupHandler.java b/services/backup/java/com/android/server/backup/internal/BackupHandler.java
index 9011b95cf614..477724de2c4d 100644
--- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java
+++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java
@@ -268,8 +268,13 @@ public class BackupHandler extends Handler {
case MSG_RUN_CLEAR: {
ClearParams params = (ClearParams) msg.obj;
- (new PerformClearTask(backupManagerService, params.transport,
- params.packageInfo)).run();
+ Runnable task =
+ new PerformClearTask(
+ backupManagerService,
+ params.transportClient,
+ params.packageInfo,
+ params.listener);
+ task.run();
break;
}
diff --git a/services/backup/java/com/android/server/backup/internal/PerformClearTask.java b/services/backup/java/com/android/server/backup/internal/PerformClearTask.java
index 7af01eac9683..84ca59b583e0 100644
--- a/services/backup/java/com/android/server/backup/internal/PerformClearTask.java
+++ b/services/backup/java/com/android/server/backup/internal/PerformClearTask.java
@@ -23,46 +23,54 @@ import android.util.Slog;
import com.android.internal.backup.IBackupTransport;
import com.android.server.backup.RefactoredBackupManagerService;
+import com.android.server.backup.transport.TransportClient;
import java.io.File;
public class PerformClearTask implements Runnable {
-
- private RefactoredBackupManagerService backupManagerService;
- IBackupTransport mTransport;
- PackageInfo mPackage;
+ private final RefactoredBackupManagerService mBackupManagerService;
+ private final TransportClient mTransportClient;
+ private final PackageInfo mPackage;
+ private final OnTaskFinishedListener mListener;
PerformClearTask(RefactoredBackupManagerService backupManagerService,
- IBackupTransport transport, PackageInfo packageInfo) {
- this.backupManagerService = backupManagerService;
- mTransport = transport;
+ TransportClient transportClient, PackageInfo packageInfo,
+ OnTaskFinishedListener listener) {
+ mBackupManagerService = backupManagerService;
+ mTransportClient = transportClient;
mPackage = packageInfo;
+ mListener = listener;
}
public void run() {
+ String callerLogString = "PerformClearTask.run()";
+ IBackupTransport transport = null;
try {
// Clear the on-device backup state to ensure a full backup next time
- File stateDir = new File(backupManagerService.getBaseStateDir(),
- mTransport.transportDirName());
+ File stateDir = new File(mBackupManagerService.getBaseStateDir(),
+ mTransportClient.getTransportDirName());
File stateFile = new File(stateDir, mPackage.packageName);
stateFile.delete();
+ transport = mTransportClient.connectOrThrow(callerLogString);
// Tell the transport to remove all the persistent storage for the app
// TODO - need to handle failures
- mTransport.clearBackupData(mPackage);
+ transport.clearBackupData(mPackage);
} catch (Exception e) {
Slog.e(TAG, "Transport threw clearing data for " + mPackage + ": " + e.getMessage());
} finally {
- try {
- // TODO - need to handle failures
- mTransport.finishBackup();
- } catch (Exception e) {
- // Nothing we can do here, alas
- Slog.e(TAG, "Unable to mark clear operation finished: " + e.getMessage());
+ if (transport != null) {
+ try {
+ // TODO - need to handle failures
+ transport.finishBackup();
+ } catch (Exception e) {
+ // Nothing we can do here, alas
+ Slog.e(TAG, "Unable to mark clear operation finished: " + e.getMessage());
+ }
}
-
+ mListener.onFinished(callerLogString);
// Last but not least, release the cpu
- backupManagerService.getWakelock().release();
+ mBackupManagerService.getWakelock().release();
}
}
}
diff --git a/services/backup/java/com/android/server/backup/params/ClearParams.java b/services/backup/java/com/android/server/backup/params/ClearParams.java
index d744efce521a..dc3bba007443 100644
--- a/services/backup/java/com/android/server/backup/params/ClearParams.java
+++ b/services/backup/java/com/android/server/backup/params/ClearParams.java
@@ -18,15 +18,20 @@ package com.android.server.backup.params;
import android.content.pm.PackageInfo;
-import com.android.internal.backup.IBackupTransport;
+import com.android.server.backup.internal.OnTaskFinishedListener;
+import com.android.server.backup.transport.TransportClient;
public class ClearParams {
-
- public IBackupTransport transport;
+ public TransportClient transportClient;
public PackageInfo packageInfo;
+ public OnTaskFinishedListener listener;
- public ClearParams(IBackupTransport _transport, PackageInfo _info) {
- transport = _transport;
- packageInfo = _info;
+ public ClearParams(
+ TransportClient transportClient,
+ PackageInfo packageInfo,
+ OnTaskFinishedListener listener) {
+ this.transportClient = transportClient;
+ this.packageInfo = packageInfo;
+ this.listener = listener;
}
}
diff --git a/services/backup/java/com/android/server/backup/params/ClearRetryParams.java b/services/backup/java/com/android/server/backup/params/ClearRetryParams.java
index fcf66e40162e..41b564106b55 100644
--- a/services/backup/java/com/android/server/backup/params/ClearRetryParams.java
+++ b/services/backup/java/com/android/server/backup/params/ClearRetryParams.java
@@ -17,12 +17,11 @@
package com.android.server.backup.params;
public class ClearRetryParams {
-
public String transportName;
public String packageName;
- public ClearRetryParams(String transport, String pkg) {
- transportName = transport;
- packageName = pkg;
+ public ClearRetryParams(String transportName, String packageName) {
+ this.transportName = transportName;
+ this.packageName = packageName;
}
}