Ensure CDMA emergency tone/vibration respects ringer mode.
Where the CDMA emergency setting is set to "tone" mode, suppress the tone
when the ringer mode is VIBRATE or SILENT.
Where the CDMA emergency setting is set to "vibrate" mode, suppress the
vibration when the ringer mode is SILENT.
Test: Set emergency tone mode to "tone". Ensure tone is heard when phone
is in normal mode.
Test: Set emergency tone more to "vibrate". Ensure vibration happens
when phone is in normal or vibrate mode.
Bug: 79122864
Change-Id: I8f3b844f0f438e815201562991737d068d463aa7
diff --git a/src/com/android/services/telephony/EmergencyTonePlayer.java b/src/com/android/services/telephony/EmergencyTonePlayer.java
index a21489d..8e26349 100644
--- a/src/com/android/services/telephony/EmergencyTonePlayer.java
+++ b/src/com/android/services/telephony/EmergencyTonePlayer.java
@@ -16,6 +16,9 @@
package com.android.services.telephony;
+import static android.media.AudioManager.RINGER_MODE_NORMAL;
+import static android.media.AudioManager.RINGER_MODE_SILENT;
+
import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioManager;
@@ -81,6 +84,12 @@
}
private void startVibrate() {
+ int ringerMode = mAudioManager.getRingerMode();
+ if (ringerMode == RINGER_MODE_SILENT) {
+ Log.i(this, "startVibrate: skipping vibrate tone due to ringer mode %d", ringerMode);
+ return;
+ }
+
if (!mIsVibrating) {
mVibrator.vibrate(VIBRATE_PATTERN, 0, VIBRATION_ATTRIBUTES);
mIsVibrating = true;
@@ -95,6 +104,12 @@
}
private void startAlert() {
+ int ringerMode = mAudioManager.getRingerMode();
+ if (ringerMode != RINGER_MODE_NORMAL) {
+ Log.i(this, "startAlert: skipping emergency tone due to ringer mode %d", ringerMode);
+ return;
+ }
+
if (mToneGenerator == null) {
mToneGenerator = new ToneGenerator(
AudioManager.STREAM_VOICE_CALL, ALERT_RELATIVE_VOLUME_PERCENT);
@@ -106,8 +121,6 @@
mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),
0);
mToneGenerator.startTone(ToneGenerator.TONE_CDMA_EMERGENCY_RINGBACK);
- } else {
- Log.d(this, "An alert is already running.");
}
}