diff options
| author | 2022-08-12 14:29:31 -0400 | |
|---|---|---|
| committer | 2022-08-29 15:34:43 +0000 | |
| commit | 3ce74461e94b479b3712079475d7eff458337e7b (patch) | |
| tree | ca693de8f818cfe47859636e0a3824c21c0e4fe7 | |
| parent | 96d92cfeda5ca01c8d12d6267d301fdcf66f727f (diff) | |
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
(cherry picked from commit 848597858b35cf36ab73d96130265d776a7a418c)
2 files changed, 52 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt index 0b6b929cd93c..c956a2ea1836 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt @@ -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 diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProviderTest.java index 541749b49474..d59cc54dfe98 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProviderTest.java @@ -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; @@ -449,6 +450,54 @@ public class KeyguardNotificationVisibilityProviderTest extends SysuiTestCase { } @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 // but it's part of a group (has a parent) |