Make sure to kill restore-at-install full-data targets after restore

Specifically: correctly distinguish the "I want to restore my own data"
case, in which the app is intentionally not killed, from the single-package
restore at install operation.

Bug 23357388

Change-Id: Ic50ac39fe942af1f6ec9e04a32d81a39b70a0b2b
This commit is contained in:
Christopher Tate
2015-08-20 12:30:50 -07:00
parent 54c807e713
commit ddc2536d2b

View File

@@ -401,21 +401,40 @@ public class BackupManagerService {
public boolean isSystemRestore;
public String[] filterSet;
// Restore a single package
/**
* Restore a single package; no kill after restore
*/
RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
long _token, PackageInfo _pkg, int _pmToken) {
long _token, PackageInfo _pkg) {
transport = _transport;
dirName = _dirName;
observer = _obs;
token = _token;
pkgInfo = _pkg;
pmToken = _pmToken;
pmToken = 0;
isSystemRestore = false;
filterSet = null;
}
// Restore everything possible. This is the form that Setup Wizard or similar
// restore UXes use.
/**
* Restore at install: PM token needed, kill after restore
*/
RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
long _token, String _pkgName, int _pmToken) {
transport = _transport;
dirName = _dirName;
observer = _obs;
token = _token;
pkgInfo = null;
pmToken = _pmToken;
isSystemRestore = false;
filterSet = new String[] { _pkgName };
}
/**
* Restore everything possible. This is the form that Setup Wizard or similar
* restore UXes use.
*/
RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
long _token) {
transport = _transport;
@@ -428,8 +447,10 @@ public class BackupManagerService {
filterSet = null;
}
// Restore some set of packages. Leave this one up to the caller to specify
// whether it's to be considered a system-level restore.
/**
* Restore some set of packages. Leave this one up to the caller to specify
* whether it's to be considered a system-level restore.
*/
RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
long _token, String[] _filterSet, boolean _isSystemRestore) {
transport = _transport;
@@ -9136,19 +9157,13 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
// This can throw and so *must* happen before the wakelock is acquired
String dirName = transport.transportDirName();
// We can use a synthetic PackageInfo here because:
// 1. We know it's valid, since the Package Manager supplied the name
// 2. Only the packageName field will be used by the restore code
PackageInfo pkg = new PackageInfo();
pkg.packageName = packageName;
mWakelock.acquire();
if (MORE_DEBUG) {
Slog.d(TAG, "Restore at install of " + packageName);
}
Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
msg.obj = new RestoreParams(transport, dirName, null,
restoreSet, pkg, token);
restoreSet, packageName, token);
mBackupHandler.sendMessage(msg);
} catch (RemoteException e) {
// Binding to the transport broke; back off and proceed with the installation.
@@ -9527,8 +9542,7 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
Slog.d(TAG, "restorePackage() : " + packageName);
}
Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
msg.obj = new RestoreParams(mRestoreTransport, dirName,
observer, token, app, 0);
msg.obj = new RestoreParams(mRestoreTransport, dirName, observer, token, app);
mBackupHandler.sendMessage(msg);
} finally {
Binder.restoreCallingIdentity(oldId);