Merge "Binding on-demand #4: PerformClearTask usage"

This commit is contained in:
Bernardo Rufino
2017-12-07 11:15:29 +00:00
committed by Android (Google) Code Review
5 changed files with 58 additions and 36 deletions

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}