Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0e97ae68 authored by Seungho Lee's avatar Seungho Lee Committed by Julia Reynolds
Browse files

Check if notification is valid before it finally vibrates because it can be...


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
Merged-In: Ia21f45c165f863ed4143da3707b492c89e58387c
Signed-off-by: default avatarSeungho Lee <shiny.lee@samsung.com>
parent 15152e7d
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -4992,8 +4992,17 @@ public class NotificationManagerService extends SystemService {
                    try {
                        Thread.sleep(waitMs);
                    } catch (InterruptedException e) { }

                    // 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(),
+16 −0
Original line number Diff line number Diff line
@@ -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);