From 2fe3273f3a93fe9337b9022a66cd30a087822425 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 7 May 2021 14:30:59 -0400 Subject: [PATCH] Handle NLS metadata when provided as strings Test: atest Bug: 181175697 Change-Id: I40d935ffb7c1fb9f978160d28297da84412501fb --- .../TypeFilterPreferenceController.java | 26 +++++++++++++++---- .../TypeFilterPreferenceControllerTest.java | 4 +-- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java b/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java index 68c342bb6f5..635d2ddaaff 100644 --- a/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceController.java @@ -16,6 +16,11 @@ package com.android.settings.applications.specialaccess.notificationaccess; +import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING; +import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_CONVERSATIONS; +import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ONGOING; +import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_SILENT; + import android.content.ComponentName; import android.content.Context; import android.content.pm.ServiceInfo; @@ -129,13 +134,24 @@ public abstract class TypeFilterPreferenceController extends BasePreferenceContr int types = 0; 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 + } } } if (hasFlag(types, getType())) { diff --git a/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java index 1aa829272fc..3f6103a81a9 100644 --- a/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/TypeFilterPreferenceControllerTest.java @@ -152,7 +152,7 @@ public class TypeFilterPreferenceControllerTest { public void updateState_enabled_metaData_disableFilter_notThisField() { mSi.metaData = new Bundle(); mSi.metaData.putCharSequence(NotificationListenerService.META_DATA_DISABLED_FILTER_TYPES, - "1,2"); + "1,alerting"); when(mNm.isNotificationListenerAccessGranted(mCn)).thenReturn(true); when(mNm.getListenerFilter(mCn, 0)).thenReturn(new NotificationListenerFilter()); CheckBoxPreference pref = new CheckBoxPreference(mContext); @@ -165,7 +165,7 @@ public class TypeFilterPreferenceControllerTest { public void updateState_enabled_metaData_disableFilter_thisField_stateIsChecked() { mSi.metaData = new Bundle(); mSi.metaData.putCharSequence(NotificationListenerService.META_DATA_DISABLED_FILTER_TYPES, - "1,2,32"); + "conversations,2,32"); when(mNm.isNotificationListenerAccessGranted(mCn)).thenReturn(true); when(mNm.getListenerFilter(mCn, 0)).thenReturn( new NotificationListenerFilter(32, new ArraySet<>()));