diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9f5b4a695467..e747a6265e1a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -28848,10 +28848,20 @@ public class PackageManagerService extends IPackageManager.Stub } } - private void applyMimeGroupChanges(String packageName, String mimeGroup) { + private void applyMimeGroupChanges(String packageName, String mimeGroup, + List<Integer> packageUids) { if (mComponentResolver.updateMimeGroup(packageName, mimeGroup)) { - Binder.withCleanCallingIdentity(() -> - clearPackagePreferredActivities(packageName, UserHandle.USER_ALL)); + Binder.withCleanCallingIdentity(() -> { + clearPackagePreferredActivities(packageName, UserHandle.USER_ALL); + // Send the ACTION_PACKAGE_CHANGED when the mimeGroup has changes + final ArrayList<String> components = new ArrayList<>( + Collections.singletonList(packageName)); + final String reason = "The mimeGroup is changed"; + for (int i = 0; i < packageUids.size(); i++) { + sendPackageChangedBroadcast(packageName, true /* dontKillApp */, + components, packageUids.get(i), reason); + } + }); } mPmInternal.writeSettings(false); @@ -28861,11 +28871,23 @@ public class PackageManagerService extends IPackageManager.Stub public void setMimeGroup(String packageName, String mimeGroup, List<String> mimeTypes) { enforceOwnerRights(packageName, Binder.getCallingUid()); final boolean changed; + final List<Integer> packageUids = new ArrayList<Integer>(); synchronized (mLock) { - changed = mSettings.getPackageLPr(packageName).setMimeGroup(mimeGroup, mimeTypes); + final PackageSetting ps = mSettings.getPackageLPr(packageName); + changed = ps.setMimeGroup(mimeGroup, mimeTypes); + if (changed) { + final int appId = ps.appId; + final int[] userIds = resolveUserIds(UserHandle.USER_ALL); + for (int i = 0; i < userIds.length; i++) { + final int userId = userIds[i]; + if (ps.getInstalled(userId)) { + packageUids.add(UserHandle.getUid(userId, appId)); + } + } + } } if (changed) { - applyMimeGroupChanges(packageName, mimeGroup); + applyMimeGroupChanges(packageName, mimeGroup, packageUids); } } |