diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 581042fcf5bcc..1810fa4b7bc47 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 ef4391507c5b5..fd42df220136e 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(); }