summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gavin Corkery <gavincorkery@google.com> 2019-09-02 09:48:01 +0100
committer Gavin Corkery <gavincorkery@google.com> 2019-09-02 10:02:56 +0100
commitfd42d3c967736683c1ea1df4101b5dc0e2bc4d9c (patch)
tree134ae1e434d4bafe287a1d43915e1949696ec404
parent2c833c2b0f7131d8490e29c42d7da88c62673341 (diff)
Check eligibility before calling snapshotAndRestoreUserData
In cases where a rollback is not being enabled or a downgrade is not taking place, PackageManagerService needlessly calls into RollbackManagerService, giving the impression that a userdata backup/restore is taking place. Performing this eligibility check should make the post-install flow clearer. Test: atest RollbackTest Bug: 139920268 Change-Id: I7ccea264aefa24df52751647f45f38df4ae15cf4
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java10
1 files changed, 7 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 41403fdeeeef..e6c1c769c502 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -13853,7 +13853,7 @@ public class PackageManagerService extends IPackageManager.Stub
// If this is an update to a package that might be potentially downgraded, then we
// need to check with the rollback manager whether there's any userdata that might
- // need to be restored for the package.
+ // need to be snapshotted or restored for the package.
//
// TODO(narayan): Get this working for cases where userId == UserHandle.USER_ALL.
if (res.returnCode == PackageManager.INSTALL_SUCCEEDED && !doRestore && update) {
@@ -13880,12 +13880,16 @@ public class PackageManagerService extends IPackageManager.Stub
installedUsers = ps.queryInstalledUsers(allUsers, true);
}
- if (ps != null) {
+ boolean doSnapshotOrRestore = data != null && data.args != null
+ && ((data.args.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0
+ || (data.args.installFlags & PackageManager.INSTALL_REQUEST_DOWNGRADE) != 0);
+
+ if (ps != null && doSnapshotOrRestore) {
try {
rm.snapshotAndRestoreUserData(packageName, installedUsers, appId, ceDataInode,
seInfo, token);
} catch (RemoteException re) {
- // Cannot happen, the RollbackManager is hosted in the same process.
+ Log.e(TAG, "Error snapshotting/restoring user data: " + re);
}
doRestore = true;
}