Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4228dd1b authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Delay sending notif block state broadcast

Now that blocking notifications results in the
app being killed, we need to delay before notifying the
app to give the app time to respond to the block change

Bug: 194833441
Test: NotificationManagerServiceTest/NotificationPermissionMigrationTest
Change-Id: I5e9441135590fa271d30957a02bfe0da925d4c7a
parent 877da241
Loading
Loading
Loading
Loading
+14 −10
Original line number Diff line number Diff line
@@ -2657,6 +2657,9 @@ public class NotificationManagerService extends SystemService {
    }

    private void sendAppBlockStateChangedBroadcast(String pkg, int uid, boolean blocked) {
        // 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)
@@ -2667,6 +2670,7 @@ public class NotificationManagerService extends SystemService {
            } catch (SecurityException e) {
                Slog.w(TAG, "Can't notify app about app block change", e);
            }
        }, 500);
    }

    @Override
+4 −0
Original line number Diff line number Diff line
@@ -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));

+4 −0
Original line number Diff line number Diff line
@@ -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));