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

Test: Build and run StatusBarTest/_NotifyBuilder
Test: Set notification sound and vibration
Test: Make notification with + button, and cancel it with - button quickly
TEst: Check notification not vibrating

Change-Id: Ia21f45c165f863ed4143da3707b492c89e58387c
Signed-off-by: Seungho Lee <shiny.lee@samsung.com>
This commit is contained in:
Seungho Lee
2018-10-31 21:49:09 +09:00
committed by Julia Reynolds
parent 55102a8ebd
commit de93388430
2 changed files with 27 additions and 2 deletions

View File

@@ -5457,8 +5457,17 @@ public class NotificationManagerService extends SystemService {
try {
Thread.sleep(waitMs);
} catch (InterruptedException e) { }
mVibrator.vibrate(record.sbn.getUid(), record.sbn.getPackageName(),
effect, "Notification (delayed)", 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, "Notification (delayed)", record.getAudioAttributes());
} else {
Slog.e(TAG, "No vibration for canceled notification : " + record.getKey());
}
}
}).start();
} else {
mVibrator.vibrate(record.sbn.getUid(), record.sbn.getPackageName(),

View File

@@ -1014,6 +1014,22 @@ public class BuzzBeepBlinkTest extends UiServiceTestCase {
assertEquals(-1, s.getLastAudiblyAlertedMs());
}
@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);