diff options
3 files changed, 50 insertions, 7 deletions
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index 6c775852fcee..71f90fd28e3f 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -83,11 +83,11 @@ import java.util.Objects; * </intent-filter> * <meta-data * android:name="android.service.notification.default_filter_types" - * android:value="1,2"> + * android:value="conversations,alerting"> * </meta-data> * <meta-data * android:name="android.service.notification.disabled_filter_types" - * android:value="2"> + * android:value="ongoing,silent"> * </meta-data> * </service></pre> * diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 53e3a0e21e23..67fd09b3e15e 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -10273,13 +10273,24 @@ public class NotificationManagerService extends SystemService { if (typeList != null) { String[] typeStrings = typeList.split(XML_SEPARATOR); for (int i = 0; i < typeStrings.length; i++) { - if (TextUtils.isEmpty(typeStrings[i])) { + final String typeString = typeStrings[i]; + if (TextUtils.isEmpty(typeString)) { continue; } - try { - types |= Integer.parseInt(typeStrings[i]); - } catch (NumberFormatException e) { - // skip + if (typeString.equalsIgnoreCase("ONGOING")) { + types |= FLAG_FILTER_TYPE_ONGOING; + } else if (typeString.equalsIgnoreCase("CONVERSATIONS")) { + types |= FLAG_FILTER_TYPE_CONVERSATIONS; + } else if (typeString.equalsIgnoreCase("SILENT")) { + types |= FLAG_FILTER_TYPE_SILENT; + } else if (typeString.equalsIgnoreCase("ALERTING")) { + types |= FLAG_FILTER_TYPE_ALERTING; + } else { + try { + types |= Integer.parseInt(typeString); + } catch (NumberFormatException e) { + // skip + } } } } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java index 9ac755f78a06..ab545266466e 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java @@ -207,6 +207,22 @@ public class NotificationListenersTest extends UiServiceTestCase { } @Test + public void testEnsureFilters_newServiceWithMetadata_namesNotNumbers() { + ServiceInfo si = new ServiceInfo(); + si.packageName = "new"; + si.name = "comp"; + si.metaData = new Bundle(); + si.metaData.putString(NotificationListenerService.META_DATA_DEFAULT_FILTER_TYPES, + "conversations,ALERTING"); + + mListeners.ensureFilters(si, 0); + + assertThat(mListeners.getNotificationListenerFilter( + Pair.create(si.getComponentName(), 0)).getTypes()) + .isEqualTo(FLAG_FILTER_TYPE_CONVERSATIONS | FLAG_FILTER_TYPE_ALERTING); + } + + @Test public void testEnsureFilters_newServiceWithMetadata_onlyOneListed() { ServiceInfo si = new ServiceInfo(); si.packageName = "new"; @@ -237,6 +253,22 @@ public class NotificationListenersTest extends UiServiceTestCase { } @Test + public void testEnsureFilters_newServiceWithMetadata_disabledTypes_mixedText() { + ServiceInfo si = new ServiceInfo(); + si.packageName = "new"; + si.name = "comp"; + si.metaData = new Bundle(); + si.metaData.putString(NotificationListenerService.META_DATA_DISABLED_FILTER_TYPES, + "1,alerting"); + + mListeners.ensureFilters(si, 0); + + assertThat(mListeners.getNotificationListenerFilter( + Pair.create(si.getComponentName(), 0)).getTypes()) + .isEqualTo(FLAG_FILTER_TYPE_SILENT | FLAG_FILTER_TYPE_ONGOING); + } + + @Test public void testEnsureFilters_newServiceWithMetadata_metaDataDisagrees() { ServiceInfo si = new ServiceInfo(); si.packageName = "new"; |