New Pipeline: hide VISIBILITY_SECRET notifications on lock screen

We forgot to check the visibility of the notification itself when
deciding whether to filter out a notification on the lock screen.

This change fixes that and adds relevant test cases.

Bug: 241611867
Test: atest KeyguardNotificationVisibilityProviderTest
Change-Id: Ifa4e9ddd5e55c4518d8d6674186df3fed622945d
This commit is contained in:
Julia Tuttle
2022-08-12 14:29:31 -04:00
parent 1836acc980
commit 848597858b
2 changed files with 52 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package com.android.systemui.statusbar.notification.interruption
import android.app.Notification
import android.app.Notification.VISIBILITY_SECRET
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@@ -172,6 +173,8 @@ private class KeyguardNotificationVisibilityProviderImpl @Inject constructor(
!lockscreenUserManager.shouldShowLockscreenNotifications() -> true
// User settings do not allow this notification on the lockscreen, so hide it.
userSettingsDisallowNotification(entry) -> true
// Entry is explicitly marked SECRET, so hide it.
entry.sbn.notification.visibility == VISIBILITY_SECRET -> true
// if entry is silent, apply custom logic to see if should hide
shouldHideIfEntrySilent(entry) -> true
else -> false

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.interruption;
import static android.app.Notification.VISIBILITY_PRIVATE;
import static android.app.Notification.VISIBILITY_PUBLIC;
import static android.app.Notification.VISIBILITY_SECRET;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
@@ -448,6 +449,54 @@ public class KeyguardNotificationVisibilityProviderTest extends SysuiTestCase {
assertFalse(mKeyguardNotificationVisibilityProvider.shouldHideNotification(mEntry));
}
@Test
public void notificationVisibilityPublic() {
// GIVEN a VISIBILITY_PUBLIC notification
NotificationEntryBuilder entryBuilder = new NotificationEntryBuilder()
.setUser(new UserHandle(NOTIF_USER_ID));
entryBuilder.modifyNotification(mContext)
.setVisibility(VISIBILITY_PUBLIC);
mEntry = entryBuilder.build();
// WHEN we're in an 'unfiltered-keyguard-showing' state
setupUnfilteredState(mEntry);
// THEN don't hide the entry based on visibility.
assertFalse(mKeyguardNotificationVisibilityProvider.shouldHideNotification(mEntry));
}
@Test
public void notificationVisibilityPrivate() {
// GIVEN a VISIBILITY_PRIVATE notification
NotificationEntryBuilder entryBuilder = new NotificationEntryBuilder()
.setUser(new UserHandle(NOTIF_USER_ID));
entryBuilder.modifyNotification(mContext)
.setVisibility(VISIBILITY_PRIVATE);
mEntry = entryBuilder.build();
// WHEN we're in an 'unfiltered-keyguard-showing' state
setupUnfilteredState(mEntry);
// THEN don't hide the entry based on visibility. (Redaction is handled elsewhere.)
assertFalse(mKeyguardNotificationVisibilityProvider.shouldHideNotification(mEntry));
}
@Test
public void notificationVisibilitySecret() {
// GIVEN a VISIBILITY_SECRET notification
NotificationEntryBuilder entryBuilder = new NotificationEntryBuilder()
.setUser(new UserHandle(NOTIF_USER_ID));
entryBuilder.modifyNotification(mContext)
.setVisibility(VISIBILITY_SECRET);
mEntry = entryBuilder.build();
// WHEN we're in an 'unfiltered-keyguard-showing' state
setupUnfilteredState(mEntry);
// THEN hide the entry based on visibility.
assertTrue(mKeyguardNotificationVisibilityProvider.shouldHideNotification(mEntry));
}
@Test
public void summaryExceedsThresholdToShow() {
// GIVEN the notification doesn't exceed the threshold to show on the lockscreen