Ensure Notification re-post with setOnlyAlertOnce(true) silences sound.
Where a notification channel has an associated looping sound, it should be possible to re-post the notification with setOnlyAlertOnce(true) to cause the notification channel's sound to silence. When re-posting the notification, this CL fixes an issue where NotificationManagerService wouldn't call clearSoundLocked to stop playing the sound, resulting in the notification continuing to playing the sound associated with the notification channel. Test: Manual testing, updated unit test Bug: 110348674 Merged-In: I3ec26f0804bcf59f7356a2329b73ba8ed8f7ea51 Change-Id: I3ec26f0804bcf59f7356a2329b73ba8ed8f7ea51
This commit is contained in:
@@ -4081,6 +4081,8 @@ public class NotificationManagerService extends SystemService {
|
||||
|
||||
buzz = playVibration(record, vibration, hasValidSound);
|
||||
}
|
||||
} else if ((record.getFlags() & Notification.FLAG_INSISTENT) != 0) {
|
||||
hasValidSound = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +191,11 @@ public class BuzzBeepBlinkTest extends NotificationTestCase {
|
||||
true /* noisy */, false /* buzzy*/, false /* lights */);
|
||||
}
|
||||
|
||||
private NotificationRecord getInsistentBeepyOnceNotification() {
|
||||
return getNotificationRecord(mId, true /* insistent */, true /* once */,
|
||||
true /* noisy */, false /* buzzy*/, false /* lights */);
|
||||
}
|
||||
|
||||
private NotificationRecord getInsistentBeepyLeanbackNotification() {
|
||||
return getLeanbackNotificationRecord(mId, true /* insistent */, false /* once */,
|
||||
true /* noisy */, false /* buzzy*/, false /* lights */);
|
||||
@@ -498,6 +503,24 @@ public class BuzzBeepBlinkTest extends NotificationTestCase {
|
||||
verifyNeverStopAudio();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the case where the user re-posts a {@link Notification} with looping sound where
|
||||
* {@link Notification.Builder#setOnlyAlertOnce(true)} has been called. This should silence
|
||||
* the sound associated with the notification.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testNoisyOnceUpdateDoesCancelAudio() throws Exception {
|
||||
NotificationRecord r = getInsistentBeepyNotification();
|
||||
NotificationRecord s = getInsistentBeepyOnceNotification();
|
||||
s.isUpdate = true;
|
||||
|
||||
mService.buzzBeepBlinkLocked(r);
|
||||
mService.buzzBeepBlinkLocked(s);
|
||||
|
||||
verifyStopAudio();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQuietUpdateDoesNotCancelAudioFromOther() throws Exception {
|
||||
NotificationRecord r = getBeepyNotification();
|
||||
|
||||
Reference in New Issue
Block a user