From 516b41eee1abfc1b4bed00479443a6ef1b29a94c Mon Sep 17 00:00:00 2001 From: Ivan Chiang Date: Mon, 18 Mar 2024 02:46:56 +0000 Subject: [PM] Send ACTION_PACKAGE_CHANGED when mimeGroups are changed Test: atest CtsPackageManagerTestCases:PackageManagerShellCommandMultiUserTest Test: atest CtsPackageManagerTestCases:PackageManagerTest Bug: 297517712 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:81eb9f8294645684ce1fad39d5d4a00ef11736e4) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c160424ef22bffd25a9cc9bc7b901ae1b9721a72) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:4217415dbe8e83ba4c8bf56ac6ff21523187f59f) Merged-In: I271a3526ea4555249e3a2797605269257330e0e9 Change-Id: I271a3526ea4555249e3a2797605269257330e0e9 --- .../android/server/pm/PackageManagerService.java | 23 +++++++++++++++++++--- 1 file changed, 20 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 f2b62eaf25f8..cac96e544432 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6160,9 +6160,26 @@ public class PackageManagerService implements PackageSender, TestUtilityService packageStateWrite.setMimeGroup(mimeGroup, mimeTypesSet); }); if (mComponentResolver.updateMimeGroup(snapshotComputer(), packageName, mimeGroup)) { - Binder.withCleanCallingIdentity(() -> - mPreferredActivityHelper.clearPackagePreferredActivities(packageName, - UserHandle.USER_ALL)); + Binder.withCleanCallingIdentity(() -> { + mPreferredActivityHelper.clearPackagePreferredActivities(packageName, + UserHandle.USER_ALL); + // Send the ACTION_PACKAGE_CHANGED when the mimeGroup has changes + final Computer snapShot = snapshotComputer(); + final ArrayList components = new ArrayList<>( + Collections.singletonList(packageName)); + final int appId = packageState.getAppId(); + final int[] userIds = resolveUserIds(UserHandle.USER_ALL); + final String reason = "The mimeGroup is changed"; + for (int i = 0; i < userIds.length; i++) { + final PackageUserStateInternal pkgUserState = + packageState.getUserStates().get(userIds[i]); + if (pkgUserState != null && pkgUserState.isInstalled()) { + final int packageUid = UserHandle.getUid(userIds[i], appId); + sendPackageChangedBroadcast(snapShot, packageName, + true /* dontKillApp */, components, packageUid, reason); + } + } + }); } scheduleWriteSettings(); -- cgit v1.2.3