Always check roles for non-blockability

Test: NotificationBackendTest
Fixes: 194833441
Change-Id: I72af524c56178077caef8fedfac592f8b5df3371
This commit is contained in:
Julia Reynolds
2022-01-10 13:40:45 -05:00
parent 928cb9006e
commit 6689b81b82
2 changed files with 31 additions and 0 deletions

View File

@@ -123,6 +123,13 @@ public class NotificationBackend {
} catch (RemoteException e) { } catch (RemoteException e) {
Log.w(TAG, "Error calling NMS", 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 { } else {
row.systemApp = Utils.isSystemPackage(context.getResources(), pm, app); row.systemApp = Utils.isSystemPackage(context.getResources(), pm, app);
List<String> roles = rm.getHeldRolesFromController(app.packageName); List<String> roles = rm.getHeldRolesFromController(app.packageName);

View File

@@ -113,6 +113,30 @@ public class NotificationBackendTest {
assertTrue(appRow.systemApp); assertTrue(appRow.systemApp);
} }
@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 @Test
public void testMarkAppRow_fixedPermission() throws Exception { public void testMarkAppRow_fixedPermission() throws Exception {
Secure.putIntForUser(RuntimeEnvironment.application.getContentResolver(), Secure.putIntForUser(RuntimeEnvironment.application.getContentResolver(),