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

Commit dc812184 authored by Matías Hernández's avatar Matías Hernández Committed by Michael Bestas
Browse files

Limit the number of services (NLSes, etc) that can be approved per user

Trying to activate additional packages/components will be silently rejected.

Bug: 428701593
Test: atest ManagedServicesTest NotificationManagerServiceTest
Flag: com.android.server.notification.limit_managed_services_count
(cherry picked from commit a132684a)
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:182548fd95b0f245385e5dc45efd2cbd4cd35b57
Merged-In: Iddd8044997c41f97369b768f4da5e49efc43ad06
Change-Id: Iddd8044997c41f97369b768f4da5e49efc43ad06
parent 92958c1f
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -978,8 +978,7 @@ abstract public class ManagedServices {
            if (approvedItem != null) {
                int uid = getUidForPackageOrComponent(pkgOrComponent, userId);
                if (enabled) {
                    if (!Flags.limitManagedServicesCount()
                            || approved.size() < MAX_SERVICE_ENTRIES) {
                    if (approved.size() < MAX_SERVICE_ENTRIES) {
                        approved.add(approvedItem);
                        if (uid != Process.INVALID_UID) {
                            approvedUids.add(uid);
@@ -1006,8 +1005,7 @@ abstract public class ManagedServices {
                    mUserSetServices.put(userId, userSetServices);
                }
                if (userSet) {
                    if (!Flags.limitManagedServicesCount()
                            || userSetServices.size() < MAX_SERVICE_ENTRIES) {
                    if (userSetServices.size() < MAX_SERVICE_ENTRIES) {
                        userSetServices.add(pkgOrComponent);
                    }
                } else {
@@ -1016,7 +1014,7 @@ abstract public class ManagedServices {
            }
        }

        if (!Flags.limitManagedServicesCount() || changed) {
        if (changed) {
            rebindServices(false, userId);
        }

+3 −3
Original line number Diff line number Diff line
@@ -7006,7 +7006,7 @@ public class NotificationManagerService extends SystemService {
                        pkg, userId, mConditionProviders.getRequiredPermission())) {
                    boolean changed = mConditionProviders.setPackageOrComponentEnabled(pkg, userId,
                            /* isPrimary= */ true, granted);
                    if (Flags.limitManagedServicesCount() && !changed) {
                    if (!changed) {
                        return;
                    }
@@ -7276,7 +7276,7 @@ public class NotificationManagerService extends SystemService {
                    boolean changed = mListeners.setPackageOrComponentEnabled(
                            listener.flattenToString(), userId, /* isPrimary= */ true, granted,
                            userSet);
                    if (Flags.limitManagedServicesCount() && !changed) {
                    if (!changed) {
                        return;
                    }
@@ -13809,7 +13809,7 @@ public class NotificationManagerService extends SystemService {
                boolean isPrimary, boolean enabled, boolean userSet) {
            boolean changed = super.setPackageOrComponentEnabled(pkgOrComponent, userId, isPrimary,
                    enabled, userSet);
            if (Flags.limitManagedServicesCount() && !changed) {
            if (!changed) {
                return false;
            }
+0 −2
Original line number Diff line number Diff line
@@ -2586,7 +2586,6 @@ public class ManagedServicesTest extends UiServiceTestCase {
    }

    @Test
    @EnableFlags(Flags.FLAG_LIMIT_MANAGED_SERVICES_COUNT)
    public void setPackageOrComponentEnabled_tooManyPackages_stopsAdding() {
        ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
                mIpm, APPROVAL_BY_PACKAGE);
@@ -2614,7 +2613,6 @@ public class ManagedServicesTest extends UiServiceTestCase {
    }

    @Test
    @EnableFlags(Flags.FLAG_LIMIT_MANAGED_SERVICES_COUNT)
    public void setPackageOrComponentEnabled_tooManyChanges_stopsAddingToUserSet() {
        ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
                mIpm, APPROVAL_BY_PACKAGE);
+0 −1
Original line number Diff line number Diff line
@@ -6478,7 +6478,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
    }
    @Test
    @EnableFlags(Flags.FLAG_LIMIT_MANAGED_SERVICES_COUNT)
    public void testSetListenerAccessForUser_tooManyListeners_skipsFollowups() throws Exception {
        UserHandle user = UserHandle.of(mContext.getUserId() + 10);
        ComponentName c = ComponentName.unflattenFromString("package/Component");