Merge "Delay sending notif block state broadcast"

This commit is contained in:
Julia Reynolds
2022-01-15 02:52:46 +00:00
committed by Android (Google) Code Review
3 changed files with 22 additions and 10 deletions

View File

@@ -2657,16 +2657,20 @@ public class NotificationManagerService extends SystemService {
}
private void sendAppBlockStateChangedBroadcast(String pkg, int uid, boolean blocked) {
try {
getContext().sendBroadcastAsUser(
new Intent(ACTION_APP_BLOCK_STATE_CHANGED)
.putExtra(NotificationManager.EXTRA_BLOCKED_STATE, blocked)
.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
.setPackage(pkg),
UserHandle.of(UserHandle.getUserId(uid)), null);
} catch (SecurityException e) {
Slog.w(TAG, "Can't notify app about app block change", e);
}
// From Android T, revoking the notification permission will cause the app to be killed.
// delay this broadcast so it doesn't race with that process death
mHandler.postDelayed(() -> {
try {
getContext().sendBroadcastAsUser(
new Intent(ACTION_APP_BLOCK_STATE_CHANGED)
.putExtra(NotificationManager.EXTRA_BLOCKED_STATE, blocked)
.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
.setPackage(pkg),
UserHandle.of(UserHandle.getUserId(uid)), null);
} catch (SecurityException e) {
Slog.w(TAG, "Can't notify app about app block change", e);
}
}, 500);
}
@Override

View File

@@ -2701,6 +2701,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
// should trigger a broadcast
mBinderService.setNotificationsEnabledForPackage(PKG, 0, true);
Thread.sleep(500);
waitForIdle();
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
verify(mContext, times(1)).sendBroadcastAsUser(captor.capture(), any(), eq(null));
@@ -2728,6 +2730,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
// should trigger a broadcast
mBinderService.setNotificationsEnabledForPackage(PKG, 0, true);
Thread.sleep(500);
waitForIdle();
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
verify(mContext, times(1)).sendBroadcastAsUser(captor.capture(), any(), eq(null));

View File

@@ -601,6 +601,8 @@ public class NotificationPermissionMigrationTest extends UiServiceTestCase {
when(mAppOpsManager.checkOpNoThrow(anyInt(), eq(mUid), eq(PKG))).thenReturn(MODE_IGNORED);
mService.mAppOpsCallback.opChanged(0, mUid, PKG);
Thread.sleep(500);
waitForIdle();
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
verify(mContext, times(1)).sendBroadcastAsUser(captor.capture(), any(), eq(null));
@@ -616,6 +618,8 @@ public class NotificationPermissionMigrationTest extends UiServiceTestCase {
when(mAppOpsManager.checkOpNoThrow(anyInt(), eq(mUid), eq(PKG))).thenReturn(MODE_ALLOWED);
mService.mAppOpsCallback.opChanged(0, mUid, PKG);
Thread.sleep(500);
waitForIdle();
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
verify(mContext, times(1)).sendBroadcastAsUser(captor.capture(), any(), eq(null));