From afae723b2376b76b4984d29f6c4a38e4dfe9d963 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Thu, 8 Jul 2021 10:47:12 -0400 Subject: [PATCH] Fix NPE during restore Test: atest, manual restore Fixes: 192325449 Change-Id: Id406726e7e8093d8be88dcfd540f739c5f936621 --- .../server/notification/ManagedServices.java | 10 ++-- .../notification/ManagedServicesTest.java | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index a3daae4d854b1..bccc52fe350a6 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -570,10 +570,12 @@ abstract public class ManagedServices { protected final void migrateToXml() { for (UserInfo user : mUm.getUsers()) { final ContentResolver cr = mContext.getContentResolver(); - addApprovedList(Settings.Secure.getStringForUser( - cr, - getConfig().secureSettingName, - user.id), user.id, true); + if (!TextUtils.isEmpty(getConfig().secureSettingName)) { + addApprovedList(Settings.Secure.getStringForUser( + cr, + getConfig().secureSettingName, + user.id), user.id, true); + } if (!TextUtils.isEmpty(getConfig().secondarySettingName)) { addApprovedList(Settings.Secure.getStringForUser( cr, 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 825e53e15ea85..f9663f200b56d 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java @@ -278,6 +278,36 @@ public class ManagedServicesTest extends UiServiceTestCase { } } + @Test + public void testReadXml_noLongerMigrateFromSettings() throws Exception { + for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) { + ManagedServices service = new TestManagedServicesNoSettings(getContext(), mLock, + mUserProfiles, mIpm, approvalLevel); + + // approved services aren't in xml + TypedXmlPullParser parser = Xml.newFastPullParser(); + parser.setInput(new BufferedInputStream(new ByteArrayInputStream(new byte[]{})), + null); + writeExpectedValuesToSettings(approvalLevel); + + service.migrateToXml(); + // No crash? success + + ArrayMap verifyMap = approvalLevel == APPROVAL_BY_COMPONENT + ? mExpectedPrimary.get(service.mApprovalLevel) + : mExpectedSecondary.get(service.mApprovalLevel); + for (int userId : verifyMap.keySet()) { + for (String verifyValue : verifyMap.get(userId).split(":")) { + if (!TextUtils.isEmpty(verifyValue)) { + assertFalse("service type " + service.mApprovalLevel + ":" + + verifyValue + " is allowed for user " + userId, + service.isPackageOrComponentAllowed(verifyValue, userId)); + } + } + } + } + } + @Test public void testReadXml() throws Exception { for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) { @@ -1766,4 +1796,25 @@ public class ManagedServicesTest extends UiServiceTestCase { return true; } } + + class TestManagedServicesNoSettings extends TestManagedServices { + + public TestManagedServicesNoSettings(Context context, Object mutex, UserProfiles userProfiles, + IPackageManager pm, int approvedServiceType) { + super(context, mutex, userProfiles, pm, approvedServiceType); + } + + @Override + protected Config getConfig() { + Config c = super.getConfig(); + c.secureSettingName = null; + c.secondarySettingName = null; + return c; + } + + @Override + public boolean shouldReflectToSettings() { + return false; + } + } }