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

Commit 85896573 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Don't convert all sounds to vibrations in vibrate mode

Only those that are on the notification/ringer stream.

Change-Id: Id99c613a6de42ac8ed1d674b4c6e05067d9cf52c
Fixes: 65815310
Test: runtest systemui-notification
parent d3293ab4
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -3996,19 +3996,19 @@ public class NotificationManagerService extends SystemService {
            if (mSystemReady && mAudioManager != null) {
                Uri soundUri = record.getSound();
                hasValidSound = soundUri != null && !Uri.EMPTY.equals(soundUri);

                long[] vibration = record.getVibration();
                // Demote sound to vibration if vibration missing & phone in vibration mode.
                if (vibration == null
                        && hasValidSound
                        && (mAudioManager.getRingerModeInternal()
                        == AudioManager.RINGER_MODE_VIBRATE)) {
                        == AudioManager.RINGER_MODE_VIBRATE)
                        && mAudioManager.getStreamVolume(
                        AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) == 0) {
                    vibration = mFallbackVibrationPattern;
                }
                hasValidVibrate = vibration != null;

                boolean hasAudibleAlert = hasValidSound || hasValidVibrate;

                if (hasAudibleAlert && !shouldMuteNotificationLocked(record)) {
                    if (DBG) Slog.v(TAG, "Interrupting!");
                    if (hasValidSound) {
@@ -4105,8 +4105,9 @@ public class NotificationManagerService extends SystemService {
        boolean looping = (record.getNotification().flags & Notification.FLAG_INSISTENT) != 0;
        // do not play notifications if there is a user of exclusive audio focus
        // or the device is in vibrate mode
        if (!mAudioManager.isAudioFocusExclusive() && mAudioManager.getRingerModeInternal()
                != AudioManager.RINGER_MODE_VIBRATE) {
        if (!mAudioManager.isAudioFocusExclusive() && (mAudioManager.getRingerModeInternal()
                != AudioManager.RINGER_MODE_VIBRATE || mAudioManager.getStreamVolume(
                AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) != 0)) {
            final long identity = Binder.clearCallingIdentity();
            try {
                final IRingtonePlayer player = mAudioManager.getRingtonePlayer();
+18 −0
Original line number Diff line number Diff line
@@ -558,6 +558,7 @@ public class BuzzBeepBlinkTest extends NotificationTestCase {

        // the phone is quiet
        when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0);

        mService.buzzBeepBlinkLocked(r);

@@ -567,6 +568,22 @@ public class BuzzBeepBlinkTest extends NotificationTestCase {
                eq(effect), (AudioAttributes) anyObject());
    }

    @Test
    public void testNoDemoteSoundToVibrateIfNonNotificationStream() throws Exception {
        NotificationRecord r = getBeepyNotification();
        assertTrue(r.getSound() != null);
        assertNull(r.getVibration());

        // the phone is quiet
        when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(1);

        mService.buzzBeepBlinkLocked(r);

        verifyNeverVibrate();
        verifyBeepLooped();
    }

    @Test
    public void testDemoteSoundToVibrate() throws Exception {
        NotificationRecord r = getBeepyNotification();
@@ -575,6 +592,7 @@ public class BuzzBeepBlinkTest extends NotificationTestCase {

        // the phone is quiet
        when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0);

        mService.buzzBeepBlinkLocked(r);