Allow notification listeners full DND access.
Bug: 27976092
Change-Id: I15da87f4b6a17e43ced80ea473288b43d20195d8
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index c19b51f..62fe70c 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -16,7 +16,7 @@
package com.android.server.notification;
-import android.app.AutomaticZenRule;
+import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -29,7 +29,6 @@
import android.provider.Settings;
import android.service.notification.Condition;
import android.service.notification.ConditionProviderService;
-import android.service.notification.IConditionListener;
import android.service.notification.IConditionProvider;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -82,6 +81,7 @@
c.caption = "condition provider";
c.serviceInterface = ConditionProviderService.SERVICE_INTERFACE;
c.secureSettingName = Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES;
+ c.secondarySettingName = Settings.Secure.ENABLED_NOTIFICATION_LISTENERS;
c.bindPermission = android.Manifest.permission.BIND_CONDITION_PROVIDER_SERVICE;
c.settingsAction = Settings.ACTION_CONDITION_PROVIDER_SETTINGS;
c.clientLabel = R.string.condition_provider_service_binding_label;
@@ -257,7 +257,7 @@
}
@Override
- protected ArraySet<ComponentName> loadComponentNamesFromSetting(String settingName,
+ protected @NonNull ArraySet<ComponentName> loadComponentNamesFromSetting(String settingName,
int userId) {
final ContentResolver cr = mContext.getContentResolver();
String settingValue = Settings.Secure.getStringForUser(
@@ -265,12 +265,17 @@
settingName,
userId);
if (TextUtils.isEmpty(settingValue))
- return null;
+ return new ArraySet<>();
String[] packages = settingValue.split(ENABLED_SERVICES_SEPARATOR);
ArraySet<ComponentName> result = new ArraySet<>(packages.length);
for (int i = 0; i < packages.length; i++) {
if (!TextUtils.isEmpty(packages[i])) {
- result.addAll(queryPackageForServices(packages[i], userId));
+ final ComponentName component = ComponentName.unflattenFromString(packages[i]);
+ if (component != null) {
+ result.addAll(queryPackageForServices(component.getPackageName(), userId));
+ } else {
+ result.addAll(queryPackageForServices(packages[i], userId));
+ }
}
}
return result;