diff options
| author | 2019-09-02 09:48:01 +0100 | |
|---|---|---|
| committer | 2019-09-02 10:02:56 +0100 | |
| commit | fd42d3c967736683c1ea1df4101b5dc0e2bc4d9c (patch) | |
| tree | 134ae1e434d4bafe287a1d43915e1949696ec404 | |
| parent | 2c833c2b0f7131d8490e29c42d7da88c62673341 (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.java | 10 |
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; } |