From a4a15f12c161af76d25855abb6fc5f6916b5d083 Mon Sep 17 00:00:00 2001 From: Jackal Guo Date: Tue, 16 Nov 2021 13:44:59 +0800 Subject: Keep install reason unchanged when package is uninstalled The install reason of the package should be only updated for the users that are having the package newly installed. The install reason should remain UNKNOWN for the users that package actually remains uninstalled. Bug: 152629990 Test: atest PackageManagerServiceTest Change-Id: Ie1c61620b278dde5707be6124b62257f745a81a0 --- .../android/server/pm/InstallPackageHelper.java | 5 +- services/tests/servicestests/Android.bp | 1 + services/tests/servicestests/AndroidTest.xml | 11 ++ .../server/pm/PackageManagerServiceTest.java | 129 +++++++++++++++++++++ .../servicestests/test-apps/StubApp/Android.bp | 37 ++++++ .../test-apps/StubApp/AndroidManifest.xml | 25 ++++ .../servicestests/apps/stubapp/TestActivity.java | 22 ++++ 7 files changed, 227 insertions(+), 3 deletions(-) create mode 100644 services/tests/servicestests/test-apps/StubApp/Android.bp create mode 100644 services/tests/servicestests/test-apps/StubApp/AndroidManifest.xml create mode 100644 services/tests/servicestests/test-apps/StubApp/src/com/android/servicestests/apps/stubapp/TestActivity.java diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 39ed9c2d51d3..861fec7cc236 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -2349,10 +2349,9 @@ final class InstallPackageHelper { // Set install reason for users that are having the package newly installed. final int[] allUsersList = mPm.mUserManager.getUserIds(); if (userId == UserHandle.USER_ALL) { - // TODO(b/152629990): It appears that the package doesn't actually get newly - // installed in this case, so the installReason shouldn't get modified? for (int currentUserId : allUsersList) { - if (!previousUserIds.contains(currentUserId)) { + if (!previousUserIds.contains(currentUserId) + && ps.getInstalled(currentUserId)) { ps.setInstallReason(installReason, currentUserId); } } diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index ba580ecaad16..e3c60fdfc697 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -108,6 +108,7 @@ android_test { data: [ ":JobTestApp", + ":StubTestApp", ], java_resources: [ diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml index 5a0f1ee963a2..4c638d669019 100644 --- a/services/tests/servicestests/AndroidTest.xml +++ b/services/tests/servicestests/AndroidTest.xml @@ -28,6 +28,17 @@