Merge "Check if notification is valid before it finally vibrates because it can be canceled as soon as enqeued"

am: 172458e014

Change-Id: I7832387ba4294b68865cc725e5d1e474370e8e54
This commit is contained in:
Julia Reynolds
2019-01-03 11:57:40 -08:00
committed by android-build-merger
2 changed files with 27 additions and 2 deletions

View File

@@ -5000,8 +5000,17 @@ public class NotificationManagerService extends SystemService {
try {
Thread.sleep(waitMs);
} catch (InterruptedException e) { }
mVibrator.vibrate(record.sbn.getUid(), record.sbn.getOpPkg(),
effect, record.getAudioAttributes());
// Notifications might be canceled before it actually vibrates due to waitMs,
// so need to check the notification still valide for vibrate.
synchronized (mNotificationLock) {
if (mNotificationsByKey.get(record.getKey()) != null) {
mVibrator.vibrate(record.sbn.getUid(), record.sbn.getOpPkg(),
effect, record.getAudioAttributes());
} else {
Slog.e(TAG, "No vibration for canceled notification : " + record.getKey());
}
}
}).start();
} else {
mVibrator.vibrate(record.sbn.getUid(), record.sbn.getOpPkg(),

View File

@@ -917,6 +917,22 @@ public class BuzzBeepBlinkTest extends UiServiceTestCase {
assertFalse(s.isInterruptive());
}
@Test
public void testCanceledNoisyNeverVibrate() throws Exception {
NotificationRecord r = getBuzzyBeepyNotification();
final int waitMs = mAudioManager.getFocusRampTimeMs(
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
r.getAudioAttributes());
mService.buzzBeepBlinkLocked(r);
mService.clearNotifications();
verifyNeverVibrate();
Thread.sleep(waitMs);
verifyNeverVibrate();
}
@Test
public void testEmptyUriSoundTreatedAsNoSound() throws Exception {
NotificationChannel channel = new NotificationChannel("test", "test", IMPORTANCE_HIGH);