4646import static org .mockito .Mockito .when ;
4747
4848import android .app .ActivityManager ;
49+ import android .app .KeyguardManager ;
4950import android .app .Notification ;
5051import android .app .Notification .Builder ;
5152import android .app .NotificationChannel ;
8182import org .junit .Before ;
8283import org .junit .Test ;
8384import org .junit .runner .RunWith ;
85+ import org .mockito .ArgumentCaptor ;
8486import org .mockito .ArgumentMatcher ;
8587import org .mockito .Mock ;
8688import org .mockito .Mockito ;
@@ -100,6 +102,8 @@ public class BuzzBeepBlinkTest extends UiServiceTestCase {
100102 NotificationUsageStats mUsageStats ;
101103 @ Mock
102104 IAccessibilityManager mAccessibilityService ;
105+ @ Mock
106+ KeyguardManager mKeyguardManager ;
103107 NotificationRecordLoggerFake mNotificationRecordLogger = new NotificationRecordLoggerFake ();
104108 private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake (
105109 1 << 30 );
@@ -144,6 +148,7 @@ public void setUp() throws Exception {
144148 when (mAudioManager .getStreamVolume (anyInt ())).thenReturn (10 );
145149 when (mAudioManager .getRingerModeInternal ()).thenReturn (AudioManager .RINGER_MODE_NORMAL );
146150 when (mUsageStats .isAlertRateLimited (any ())).thenReturn (false );
151+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (false );
147152
148153 long serviceReturnValue = IntPair .of (
149154 AccessibilityManager .STATE_FLAG_ACCESSIBILITY_ENABLED ,
@@ -165,6 +170,7 @@ public void setUp() throws Exception {
165170 mService .setFallbackVibrationPattern (FALLBACK_VIBRATION_PATTERN );
166171 mService .setUsageStats (mUsageStats );
167172 mService .setAccessibilityManager (accessibilityManager );
173+ mService .setKeyguardManager (mKeyguardManager );
168174 mService .mScreenOn = false ;
169175 mService .mInCallStateOffHook = false ;
170176 mService .mNotificationPulseEnabled = true ;
@@ -475,6 +481,94 @@ public void testBeep() throws Exception {
475481 assertNotEquals (-1 , r .getLastAudiblyAlertedMs ());
476482 }
477483
484+ @ Test
485+ public void testLockedPrivateA11yRedaction () throws Exception {
486+ NotificationRecord r = getBeepyNotification ();
487+ r .setPackageVisibilityOverride (NotificationManager .VISIBILITY_NO_OVERRIDE );
488+ r .getNotification ().visibility = Notification .VISIBILITY_PRIVATE ;
489+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (true );
490+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
491+ when (accessibilityManager .isEnabled ()).thenReturn (true );
492+ mService .setAccessibilityManager (accessibilityManager );
493+
494+ mService .buzzBeepBlinkLocked (r );
495+
496+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
497+ ArgumentCaptor .forClass (AccessibilityEvent .class );
498+
499+ verify (accessibilityManager , times (1 ))
500+ .sendAccessibilityEvent (eventCaptor .capture ());
501+
502+ AccessibilityEvent event = eventCaptor .getValue ();
503+ assertEquals (r .getNotification ().publicVersion , event .getParcelableData ());
504+ }
505+
506+ @ Test
507+ public void testLockedOverridePrivateA11yRedaction () throws Exception {
508+ NotificationRecord r = getBeepyNotification ();
509+ r .setPackageVisibilityOverride (Notification .VISIBILITY_PRIVATE );
510+ r .getNotification ().visibility = Notification .VISIBILITY_PUBLIC ;
511+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (true );
512+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
513+ when (accessibilityManager .isEnabled ()).thenReturn (true );
514+ mService .setAccessibilityManager (accessibilityManager );
515+
516+ mService .buzzBeepBlinkLocked (r );
517+
518+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
519+ ArgumentCaptor .forClass (AccessibilityEvent .class );
520+
521+ verify (accessibilityManager , times (1 ))
522+ .sendAccessibilityEvent (eventCaptor .capture ());
523+
524+ AccessibilityEvent event = eventCaptor .getValue ();
525+ assertEquals (r .getNotification ().publicVersion , event .getParcelableData ());
526+ }
527+
528+ @ Test
529+ public void testLockedPublicA11yNoRedaction () throws Exception {
530+ NotificationRecord r = getBeepyNotification ();
531+ r .setPackageVisibilityOverride (NotificationManager .VISIBILITY_NO_OVERRIDE );
532+ r .getNotification ().visibility = Notification .VISIBILITY_PUBLIC ;
533+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (true );
534+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
535+ when (accessibilityManager .isEnabled ()).thenReturn (true );
536+ mService .setAccessibilityManager (accessibilityManager );
537+
538+ mService .buzzBeepBlinkLocked (r );
539+
540+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
541+ ArgumentCaptor .forClass (AccessibilityEvent .class );
542+
543+ verify (accessibilityManager , times (1 ))
544+ .sendAccessibilityEvent (eventCaptor .capture ());
545+
546+ AccessibilityEvent event = eventCaptor .getValue ();
547+ assertEquals (r .getNotification (), event .getParcelableData ());
548+ }
549+
550+ @ Test
551+ public void testUnlockedPrivateA11yNoRedaction () throws Exception {
552+ NotificationRecord r = getBeepyNotification ();
553+ r .setPackageVisibilityOverride (NotificationManager .VISIBILITY_NO_OVERRIDE );
554+ r .getNotification ().visibility = Notification .VISIBILITY_PRIVATE ;
555+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (false );
556+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
557+ when (accessibilityManager .isEnabled ()).thenReturn (true );
558+ mService .setAccessibilityManager (accessibilityManager );
559+
560+ mService .buzzBeepBlinkLocked (r );
561+
562+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
563+ ArgumentCaptor .forClass (AccessibilityEvent .class );
564+
565+ verify (accessibilityManager , times (1 ))
566+ .sendAccessibilityEvent (eventCaptor .capture ());
567+
568+ AccessibilityEvent event = eventCaptor .getValue ();
569+ assertEquals (r .getNotification (), event .getParcelableData ());
570+ }
571+
478572 @ Test
479573 public void testBeepInsistently () throws Exception {
480574 NotificationRecord r = getInsistentBeepyNotification ();
0 commit comments