diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index 477b062ac90ff..269a0dac41ab4 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -71,9 +71,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; /** * Manages the lifecycle of application-provided services bound by system server. @@ -401,15 +399,20 @@ abstract public class ManagedServices { approvedByType = new ArrayMap<>(); mApproved.put(userId, approvedByType); } + + ArraySet approvedList = approvedByType.get(isPrimary); + if (approvedList == null) { + approvedList = new ArraySet<>(); + approvedByType.put(isPrimary, approvedList); + } + String[] approvedArray = approved.split(ENABLED_SERVICES_SEPARATOR); - final ArraySet approvedList = new ArraySet<>(); for (String pkgOrComponent : approvedArray) { String approvedItem = getApprovedValue(pkgOrComponent); if (approvedItem != null) { approvedList.add(approvedItem); } } - approvedByType.put(isPrimary, approvedList); } protected boolean isComponentEnabledForPackage(String pkg) { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java index 9ef0ec7ac99bd..4668ed42b11ed 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java @@ -266,6 +266,32 @@ public class ManagedServicesTest extends UiServiceTestCase { } } + @Test + public void testReadXml_appendsListOfApprovedComponents() throws Exception { + for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) { + ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles, + mIpm, approvalLevel); + + String preApprovedPackage = "some.random.package"; + String preApprovedComponent = "some.random.package/C1"; + + List packages = new ArrayList<>(); + packages.add(preApprovedPackage); + addExpectedServices(service, packages, 0); + + service.setPackageOrComponentEnabled(preApprovedComponent, 0, true, true); + + loadXml(service); + + verifyExpectedApprovedEntries(service); + + String verifyValue = (approvalLevel == APPROVAL_BY_COMPONENT) + ? preApprovedComponent + : preApprovedPackage; + assertTrue(service.isPackageOrComponentAllowed(verifyValue, 0)); + } + } + @Test public void testWriteXml_trimsMissingServices() throws Exception { for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {