[RESTRICT AUTOMERGE] Add BubbleMetadata detection to block FSI am: c60e264a55

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22312942

Change-Id: I27f47ec403bb7465736a61353727e23ed3b833e6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jeff DeCew
2023-03-31 15:22:52 +00:00
committed by Automerger Merge Worker
2 changed files with 33 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.interruption;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.ContentResolver;
import android.database.ContentObserver;
@@ -209,6 +210,20 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
return false;
}
// If the notification has suppressive BubbleMetadata, block FSI and warn.
Notification.BubbleMetadata bubbleMetadata = sbn.getNotification().getBubbleMetadata();
if (bubbleMetadata != null && bubbleMetadata.isNotificationSuppressed()) {
// b/274759612: Detect and report an event when a notification has both an FSI and a
// suppressive BubbleMetadata, and now correctly block the FSI from firing.
final int uid = entry.getSbn().getUid();
android.util.EventLog.writeEvent(0x534e4554, "274759612", uid, "bubbleMetadata");
if (DEBUG) {
Log.w(TAG, "No FullScreenIntent: WARNING: BubbleMetadata may prevent HUN: "
+ entry.getKey());
}
return false;
}
// If the screen is off, then launch the FullScreenIntent
if (!mPowerManager.isInteractive()) {
if (DEBUG) {

View File

@@ -435,9 +435,27 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
.isFalse();
}
@Test
public void testShouldNotFullScreen_isSuppressedByBubbleMetadata() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
Notification.BubbleMetadata bubbleMetadata = new Notification.BubbleMetadata.Builder("foo")
.setSuppressNotification(true).build();
entry.getSbn().getNotification().setBubbleMetadata(bubbleMetadata);
when(mPowerManager.isInteractive()).thenReturn(false);
when(mDreamManager.isDreaming()).thenReturn(true);
when(mStatusBarStateController.getState()).thenReturn(KEYGUARD);
assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
.isFalse();
}
@Test
public void testShouldFullScreen_notInteractive() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
Notification.BubbleMetadata bubbleMetadata = new Notification.BubbleMetadata.Builder("foo")
.setSuppressNotification(false).build();
entry.getSbn().getNotification().setBubbleMetadata(bubbleMetadata);
when(mPowerManager.isInteractive()).thenReturn(false);
when(mDreamManager.isDreaming()).thenReturn(false);
when(mStatusBarStateController.getState()).thenReturn(SHADE);