diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index ab53b4c2b3e28..28f18a4124ded 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3971,6 +3971,9 @@ /product/media/audio/ui/InCallNotification.ogg + + /product/media/audio/ui/AttentionalHaptics.ogg + 4 diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 552898bff1ed8..ef5cfe33c6615 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -3236,6 +3236,8 @@ + + diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java index 79d505ebbde88..f8297bc93b727 100644 --- a/media/java/android/media/Ringtone.java +++ b/media/java/android/media/Ringtone.java @@ -405,9 +405,11 @@ public class Ringtone { */ public void play() { if (mLocalPlayer != null) { - // do not play ringtones if stream volume is 0 - // (typically because ringer mode is silent). - if (mAudioManager.getStreamVolume( + // Play ringtones if stream volume is over 0 or if it is a haptic-only ringtone + // (typically because ringer mode is vibrate). + boolean isHapticOnly = AudioManager.hasHapticChannels(mUri) + && !mAudioAttributes.areHapticChannelsMuted() && mVolume == 0; + if (isHapticOnly || mAudioManager.getStreamVolume( AudioAttributes.toLegacyStreamType(mAudioAttributes)) != 0) { startLocalPlayer(); }