Always check roles for non-blockability

Test: NotificationBackendTest
Fixes: 194833441
Change-Id: I72af524c56178077caef8fedfac592f8b5df3371
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index cae3cae..4ef882c 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -123,6 +123,13 @@
             } catch (RemoteException e) {
                 Log.w(TAG, "Error calling NMS", e);
             }
+            // The permission system cannot make role permissions 'fixed', so check for these
+            // roles explicitly
+            List<String> roles = rm.getHeldRolesFromController(app.packageName);
+            if (roles.contains(RoleManager.ROLE_DIALER)
+                    || roles.contains(RoleManager.ROLE_EMERGENCY)) {
+                row.systemApp = row.lockedImportance = true;
+            }
         } else {
             row.systemApp = Utils.isSystemPackage(context.getResources(), pm, app);
             List<String> roles = rm.getHeldRolesFromController(app.packageName);
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
index 71fab42..64cde5a 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
@@ -114,6 +114,30 @@
     }
 
     @Test
+    public void testMarkAppRow_fixedPermission_withRole() throws Exception {
+        Secure.putIntForUser(RuntimeEnvironment.application.getContentResolver(),
+                Settings.Secure.NOTIFICATION_PERMISSION_ENABLED, 1, USER_SYSTEM);
+
+        PackageInfo pi = new PackageInfo();
+        pi.packageName = "test";
+        pi.applicationInfo = new ApplicationInfo();
+        pi.applicationInfo.packageName = "test";
+        pi.applicationInfo.uid = 123;
+
+        List<String> roles = new ArrayList<>();
+        roles.add(RoleManager.ROLE_DIALER);
+        RoleManager rm = mock(RoleManager.class);
+        when(rm.getHeldRolesFromController(anyString())).thenReturn(roles);
+        when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false);
+
+        AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
+                mock(PackageManager.class), rm, pi);
+
+        assertTrue(appRow.systemApp);
+        assertTrue(appRow.lockedImportance);
+    }
+
+    @Test
     public void testMarkAppRow_fixedPermission() throws Exception {
         Secure.putIntForUser(RuntimeEnvironment.application.getContentResolver(),
                 Settings.Secure.NOTIFICATION_PERMISSION_ENABLED, 1, USER_SYSTEM);