Merge "Fix vibration issue in DND mode." into tm-qpr-dev am: 8d58aad03a am: e298b2845e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/19970778
Change-Id: I00e8961a4f9779aaaf5364079d7e158cd295092b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/server/telecom/Ringer.java b/src/com/android/server/telecom/Ringer.java
index c9bb742..bf678d2 100644
--- a/src/com/android/server/telecom/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -275,7 +275,7 @@
VibrationEffect effect;
CompletableFuture<Boolean> hapticsFuture = null;
// Determine if the settings and DND mode indicate that the vibrator can be used right now.
- boolean isVibratorEnabled = isVibratorEnabled(mContext);
+ boolean isVibratorEnabled = isVibratorEnabled(mContext, attributes.shouldRingForContact());
boolean shouldApplyRampingRinger =
isVibratorEnabled && mSystemSettingsUtil.isRampingRingerEnabled(mContext);
if (attributes.isRingerAudible()) {
@@ -367,7 +367,7 @@
"hasVibrator=%b, userRequestsVibrate=%b, ringerMode=%d, isVibrating=%b",
mVibrator.hasVibrator(),
mSystemSettingsUtil.isRingVibrationEnabled(mContext),
- mAudioManager.getRingerModeInternal(), mIsVibrating);
+ mAudioManager.getRingerMode(), mIsVibrating);
if (mSystemSettingsUtil.isRampingRingerEnabled(mContext) && isRingerAudible) {
Log.i(this, "start vibration for ramping ringer.");
} else {
@@ -381,7 +381,7 @@
"hasVibrator=%b, userRequestsVibrate=%b, ringerMode=%d, isVibrating=%b",
mVibrator.hasVibrator(),
mSystemSettingsUtil.isRingVibrationEnabled(mContext),
- mAudioManager.getRingerModeInternal(), mIsVibrating);
+ mAudioManager.getRingerMode(), mIsVibrating);
}
}
}
@@ -503,13 +503,14 @@
}
}
- private boolean isVibratorEnabled(Context context) {
+ private boolean isVibratorEnabled(Context context, boolean shouldRingForContact) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
// Use AudioManager#getRingerMode for more accurate result, instead of
// AudioManager#getRingerModeInternal which only useful for volume controllers
return mVibrator.hasVibrator()
&& mSystemSettingsUtil.isRingVibrationEnabled(context)
- && audioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT;
+ && (audioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT
+ || shouldRingForContact);
}
private RingerAttributes getRingerAttributes(Call call, boolean isHfpDeviceAttached) {
diff --git a/tests/src/com/android/server/telecom/tests/RingerTest.java b/tests/src/com/android/server/telecom/tests/RingerTest.java
index 2094fab..fbc08ba 100644
--- a/tests/src/com/android/server/telecom/tests/RingerTest.java
+++ b/tests/src/com/android/server/telecom/tests/RingerTest.java
@@ -455,6 +455,23 @@
.vibrate(any(VibrationEffect.class), any(VibrationAttributes.class));
}
+ @SmallTest
+ @Test
+ public void testRingAndVibrateForAllowedCallInDndMode() throws Exception {
+ mRingerUnderTest.startCallWaiting(mockCall1);
+ Ringtone mockRingtone = mock(Ringtone.class);
+ when(mockRingtoneFactory.getRingtone(any(Call.class))).thenReturn(mockRingtone);
+ when(mockAudioManager.getRingerMode()).thenReturn(AudioManager.RINGER_MODE_SILENT);
+ when(mockAudioManager.getStreamVolume(AudioManager.STREAM_RING)).thenReturn(100);
+ mFuture.complete(true); // using audio coupled haptics
+ enableVibrationWhenRinging();
+ assertTrue(mRingerUnderTest.startRinging(mockCall2, true));
+ mRingCompletionFuture.get();
+ verify(mockTonePlayer).stopTone();
+ verify(mockRingtonePlayer).play(any(RingtoneFactory.class), any(Call.class), eq(null),
+ eq(true) /* isRingerAudible */, eq(true) /* isVibrationEnabled */);
+ }
+
private void ensureRingerIsAudible() {
Ringtone mockRingtone = mock(Ringtone.class);
when(mockRingtoneFactory.getRingtone(any(Call.class))).thenReturn(mockRingtone);