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 {