OSDN Git Service

Fix rollbacks in multi-user case.
authorRichard Uhler <ruhler@google.com>
Mon, 1 Apr 2019 12:02:31 +0000 (13:02 +0100)
committerRichard Uhler <ruhler@google.com>
Wed, 3 Apr 2019 15:15:42 +0000 (16:15 +0100)
commitd81ff978667a776884362ef2461b3015c56117d1
tree9888e5888b780fb7001c7a4267d010a5b26541a8
parent94fda28a6b995c0f143f3e920eea07370eb2e0bc
Fix rollbacks in multi-user case.

There are a few assumptions in the rollback manager that fail in the
multi-user case that need to be fixed:
* getAllSessions only returns sessions for the specific user.
* Session callbacks are only called on sessions associated with the
  registered user.
* getPackageInfo only returns info for the specific user.

Fix these issues so that rollbacks will work properly, in particular
when the initial install session is owned by a non-system user.

Bug: 129809507
Bug: 129397974

Test: On single user device: atest RollbackTest StagedRollbackTest
Test: On primary user of multi-user device: atest RollbackTest StagedRollbackTest
Test: On multi user device manually:
    adb install RollbackTestAppAv1.apk
    adb install --user 10 --enable-rollback RollbackTestAppAv2.apk
    -- verify the install succeeded --
    adb shell pm rollback-app com.android.tests.rollback.testapp.A
    -- verify the rollback succeeded --

Test: On multi user device manually:
    adb install RollbackTestAppAv1.apk
    adb install --staged --user 10 --enable-rollback RollbackTestAppAv2.apk
    adb reboot
    -- verify the install succeeded --
    adb shell pm rollback-app com.android.tests.rollback.testapp.A
    adb reboot
    -- verify the rollback succeeded --

Change-Id: I1a7cf101b3bc3575421629c4bf0ff63418eb8731
core/java/android/content/pm/PackageManagerInternal.java
services/core/java/com/android/server/pm/PackageManagerService.java
services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java