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 ;
@@ -103,6 +104,8 @@ public class BuzzBeepBlinkTest extends UiServiceTestCase {
103104 NotificationUsageStats mUsageStats ;
104105 @ Mock
105106 IAccessibilityManager mAccessibilityService ;
107+ @ Mock
108+ KeyguardManager mKeyguardManager ;
106109 NotificationRecordLoggerFake mNotificationRecordLogger = new NotificationRecordLoggerFake ();
107110 private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake (
108111 1 << 30 );
@@ -147,6 +150,7 @@ public void setUp() throws Exception {
147150 when (mAudioManager .getStreamVolume (anyInt ())).thenReturn (10 );
148151 when (mAudioManager .getRingerModeInternal ()).thenReturn (AudioManager .RINGER_MODE_NORMAL );
149152 when (mUsageStats .isAlertRateLimited (any ())).thenReturn (false );
153+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (false );
150154
151155 long serviceReturnValue = IntPair .of (
152156 AccessibilityManager .STATE_FLAG_ACCESSIBILITY_ENABLED ,
@@ -168,6 +172,7 @@ public void setUp() throws Exception {
168172 mService .setFallbackVibrationPattern (FALLBACK_VIBRATION_PATTERN );
169173 mService .setUsageStats (mUsageStats );
170174 mService .setAccessibilityManager (accessibilityManager );
175+ mService .setKeyguardManager (mKeyguardManager );
171176 mService .mScreenOn = false ;
172177 mService .mInCallStateOffHook = false ;
173178 mService .mNotificationPulseEnabled = true ;
@@ -483,6 +488,94 @@ public void testBeep() throws Exception {
483488 assertNotEquals (-1 , r .getLastAudiblyAlertedMs ());
484489 }
485490
491+ @ Test
492+ public void testLockedPrivateA11yRedaction () throws Exception {
493+ NotificationRecord r = getBeepyNotification ();
494+ r .setPackageVisibilityOverride (NotificationManager .VISIBILITY_NO_OVERRIDE );
495+ r .getNotification ().visibility = Notification .VISIBILITY_PRIVATE ;
496+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (true );
497+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
498+ when (accessibilityManager .isEnabled ()).thenReturn (true );
499+ mService .setAccessibilityManager (accessibilityManager );
500+
501+ mService .buzzBeepBlinkLocked (r );
502+
503+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
504+ ArgumentCaptor .forClass (AccessibilityEvent .class );
505+
506+ verify (accessibilityManager , times (1 ))
507+ .sendAccessibilityEvent (eventCaptor .capture ());
508+
509+ AccessibilityEvent event = eventCaptor .getValue ();
510+ assertEquals (r .getNotification ().publicVersion , event .getParcelableData ());
511+ }
512+
513+ @ Test
514+ public void testLockedOverridePrivateA11yRedaction () throws Exception {
515+ NotificationRecord r = getBeepyNotification ();
516+ r .setPackageVisibilityOverride (Notification .VISIBILITY_PRIVATE );
517+ r .getNotification ().visibility = Notification .VISIBILITY_PUBLIC ;
518+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (true );
519+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
520+ when (accessibilityManager .isEnabled ()).thenReturn (true );
521+ mService .setAccessibilityManager (accessibilityManager );
522+
523+ mService .buzzBeepBlinkLocked (r );
524+
525+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
526+ ArgumentCaptor .forClass (AccessibilityEvent .class );
527+
528+ verify (accessibilityManager , times (1 ))
529+ .sendAccessibilityEvent (eventCaptor .capture ());
530+
531+ AccessibilityEvent event = eventCaptor .getValue ();
532+ assertEquals (r .getNotification ().publicVersion , event .getParcelableData ());
533+ }
534+
535+ @ Test
536+ public void testLockedPublicA11yNoRedaction () throws Exception {
537+ NotificationRecord r = getBeepyNotification ();
538+ r .setPackageVisibilityOverride (NotificationManager .VISIBILITY_NO_OVERRIDE );
539+ r .getNotification ().visibility = Notification .VISIBILITY_PUBLIC ;
540+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (true );
541+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
542+ when (accessibilityManager .isEnabled ()).thenReturn (true );
543+ mService .setAccessibilityManager (accessibilityManager );
544+
545+ mService .buzzBeepBlinkLocked (r );
546+
547+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
548+ ArgumentCaptor .forClass (AccessibilityEvent .class );
549+
550+ verify (accessibilityManager , times (1 ))
551+ .sendAccessibilityEvent (eventCaptor .capture ());
552+
553+ AccessibilityEvent event = eventCaptor .getValue ();
554+ assertEquals (r .getNotification (), event .getParcelableData ());
555+ }
556+
557+ @ Test
558+ public void testUnlockedPrivateA11yNoRedaction () throws Exception {
559+ NotificationRecord r = getBeepyNotification ();
560+ r .setPackageVisibilityOverride (NotificationManager .VISIBILITY_NO_OVERRIDE );
561+ r .getNotification ().visibility = Notification .VISIBILITY_PRIVATE ;
562+ when (mKeyguardManager .isDeviceLocked (anyInt ())).thenReturn (false );
563+ AccessibilityManager accessibilityManager = Mockito .mock (AccessibilityManager .class );
564+ when (accessibilityManager .isEnabled ()).thenReturn (true );
565+ mService .setAccessibilityManager (accessibilityManager );
566+
567+ mService .buzzBeepBlinkLocked (r );
568+
569+ ArgumentCaptor <AccessibilityEvent > eventCaptor =
570+ ArgumentCaptor .forClass (AccessibilityEvent .class );
571+
572+ verify (accessibilityManager , times (1 ))
573+ .sendAccessibilityEvent (eventCaptor .capture ());
574+
575+ AccessibilityEvent event = eventCaptor .getValue ();
576+ assertEquals (r .getNotification (), event .getParcelableData ());
577+ }
578+
486579 @ Test
487580 public void testBeepInsistently () throws Exception {
488581 NotificationRecord r = getInsistentBeepyNotification ();
0 commit comments