Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c0dff90 authored by Ivan Chiang's avatar Ivan Chiang
Browse files

[RESTRICT AUTOMERGE][PM] Send ACTION_PACKAGE_CHANGED when mimeGroups are changed

Test: atest CtsPackageManagerTestCases:PackageManagerShellCommandMultiUserTest
Test: atest CtsPackageManagerTestCases:PackageManagerTest
Bug: 297517712
Merged-In: I271a3526ea4555249e3a2797605269257330e0e9
Change-Id: I271a3526ea4555249e3a2797605269257330e0e9
parent 5b695073
Loading
Loading
Loading
Loading
+27 −5
Original line number Diff line number Diff line
@@ -28719,10 +28719,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);
@@ -28732,11 +28742,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);
        }
    }