Add check for Vibration RingerMode in VibratorService
Add a check for whether or not the Phone is in the Vibrate RingerMode
when deciding whether or not to vibrate for an incoming call.
Bug: 28569078
Change-Id: Ib2e6243fd0b18c5426b5572c0806d67111a80a57
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index 5ba07cf..4db60d5 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -24,6 +24,7 @@
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.hardware.input.InputManager;
+import android.media.AudioManager;
import android.os.BatteryStats;
import android.os.Handler;
import android.os.IVibratorService;
@@ -454,9 +455,8 @@
return;
}
- if (vib.mUsageHint == AudioAttributes.USAGE_NOTIFICATION_RINGTONE
- && Settings.System.getInt(
- mContext.getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 0) == 0) {
+ if (vib.mUsageHint == AudioAttributes.USAGE_NOTIFICATION_RINGTONE &&
+ !shouldVibrateForRingtone()) {
return;
}
@@ -486,6 +486,18 @@
}
}
+ private boolean shouldVibrateForRingtone() {
+ AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ int ringerMode = audioManager.getRingerMode();
+ // "Also vibrate for calls" Setting in Sound
+ if (Settings.System.getInt(
+ mContext.getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 0) != 0) {
+ return ringerMode != AudioManager.RINGER_MODE_SILENT;
+ } else {
+ return ringerMode == AudioManager.RINGER_MODE_VIBRATE;
+ }
+ }
+
private void reportFinishVibrationLocked() {
if (mCurrentVibration != null) {
try {