Merge "Allow NLS metadata fields to use name strings" into sc-dev
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 6c77585..71f90fd2 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -83,11 +83,11 @@
  *     </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>
  * &lt;/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 53e3a0e..67fd09b3 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 @@
             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 9ac755f..ab54526 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 @@
     }
 
     @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 @@
     }
 
     @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";