Simplify haptic-only ringtone logic
The RingtoneFactory.getHapticOnlyRingtone() method used
config_defaultRingtoneVibrationSound config to parse
the haptic-only ringtone Uri and load Ringtone.
Since that config is not used for any devices. Remove
the getHapticOnlyRingtone method, use null for Uri and
ringtone for haptic-only case.
Flag: EXEMPT refactor
Bug: 354882163
Test: atest RingerTest
Change-Id: Ifdb684f7d0af4bc7fb6819df6414508c09057d26
diff --git a/src/com/android/server/telecom/Ringer.java b/src/com/android/server/telecom/Ringer.java
index 3d08256..7e7194c 100644
--- a/src/com/android/server/telecom/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -415,17 +415,9 @@
isVibratorEnabled, mIsHapticPlaybackSupportedByDevice);
}
// Defer ringtone creation to the async player thread.
- Supplier<Pair<Uri, Ringtone>> ringtoneInfoSupplier;
+ Supplier<Pair<Uri, Ringtone>> ringtoneInfoSupplier = null;
final boolean finalHapticChannelsMuted = hapticChannelsMuted;
- if (isHapticOnly) {
- if (hapticChannelsMuted) {
- Log.i(this,
- "want haptic only ringtone but haptics are muted, skip ringtone play");
- ringtoneInfoSupplier = null;
- } else {
- ringtoneInfoSupplier = mRingtoneFactory::getHapticOnlyRingtone;
- }
- } else {
+ if (!isHapticOnly) {
ringtoneInfoSupplier = () -> mRingtoneFactory.getRingtone(
foregroundCall, mVolumeShaperConfig, finalHapticChannelsMuted);
}
diff --git a/src/com/android/server/telecom/RingtoneFactory.java b/src/com/android/server/telecom/RingtoneFactory.java
index 16fa0c4..c740c24 100644
--- a/src/com/android/server/telecom/RingtoneFactory.java
+++ b/src/com/android/server/telecom/RingtoneFactory.java
@@ -127,24 +127,6 @@
.build();
}
- /** Returns a ringtone to be used when ringer is not audible for the incoming call. */
- @Nullable
- public Pair<Uri, Ringtone> getHapticOnlyRingtone() {
- // Initializing ringtones on the main thread can deadlock
- ThreadUtil.checkNotOnMainThread();
- Uri ringtoneUri = Uri.parse("file://" + mContext.getString(
- com.android.internal.R.string.config_defaultRingtoneVibrationSound));
- AudioAttributes audioAttrs = getDefaultRingtoneAudioAttributes(
- /* hapticChannelsMuted */ false);
- Ringtone ringtone = RingtoneManager.getRingtone(
- mContext, ringtoneUri, /* volumeShaperConfig */ null, audioAttrs);
- if (ringtone != null) {
- // Make sure the sound is muted.
- ringtone.setVolume(0);
- }
- return new Pair(ringtoneUri, ringtone);
- }
-
private Context getWorkProfileContextForUser(UserHandle userHandle) {
// UserManager.getUserProfiles returns the enabled profiles along with the context user's
// handle itself (so we must filter out the user).
diff --git a/tests/src/com/android/server/telecom/tests/RingerTest.java b/tests/src/com/android/server/telecom/tests/RingerTest.java
index f615f7e..20099ec 100644
--- a/tests/src/com/android/server/telecom/tests/RingerTest.java
+++ b/tests/src/com/android/server/telecom/tests/RingerTest.java
@@ -488,10 +488,6 @@
// Ensure no audible ringtone is played:
assertFalse(startRingingAndWaitForAsync(mockCall2, false));
verify(mockTonePlayer).stopTone();
- // Ensure a silent haptics only ringtone is played:
- verify(mockRingtoneFactory, atLeastOnce()).getHapticOnlyRingtone();
- verifyNoMoreInteractions(mockRingtoneFactory);
- verify(mockRingtone).play();
// Ensure a vibration plays:
verify(mockVibrator).vibrate(any(VibrationEffect.class), any(VibrationAttributes.class));
@@ -536,10 +532,6 @@
enableVibrationWhenRinging();
assertFalse(startRingingAndWaitForAsync(mockCall2, false));
verify(mockTonePlayer).stopTone();
- // Try to play a silent haptics ringtone
- verify(mockRingtoneFactory, atLeastOnce()).getHapticOnlyRingtone();
- verifyNoMoreInteractions(mockRingtoneFactory);
- verify(mockRingtone).play();
// Play default vibration when future completes with no audio coupled haptics
verify(mockVibrator).vibrate(eq(mRingerUnderTest.mDefaultVibrationEffect),
@@ -566,28 +558,6 @@
@SmallTest
@Test
- public void testAudioCoupledHapticsForSilentRingtone() throws Exception {
- Ringtone mockRingtone = ensureRingtoneMocked();
-
- mRingerUnderTest.startCallWaiting(mockCall1);
- when(mockAudioManager.getRingerMode()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
- when(mockAudioManager.getStreamVolume(AudioManager.STREAM_RING)).thenReturn(0);
- setIsUsingHaptics(mockRingtone, true);
- enableVibrationWhenRinging();
- assertFalse(startRingingAndWaitForAsync(mockCall2, false));
-
- verify(mockRingtoneFactory, atLeastOnce()).getHapticOnlyRingtone();
- verifyNoMoreInteractions(mockRingtoneFactory);
- verify(mockTonePlayer).stopTone();
- // Try to play a silent haptics ringtone
- verify(mockRingtone).play();
- // Skip vibration for audio coupled haptics
- verify(mockVibrator, never()).vibrate(any(VibrationEffect.class),
- any(VibrationAttributes.class));
- }
-
- @SmallTest
- @Test
public void testCustomVibrationForRingtone() throws Exception {
mRingerUnderTest.startCallWaiting(mockCall1);
Ringtone mockRingtone = ensureRingtoneMocked();
@@ -899,7 +869,6 @@
when(mockRingtoneFactory.getRingtone(
any(Call.class), nullable(VolumeShaper.Configuration.class), anyBoolean()))
.thenReturn(ringtoneInfo);
- when(mockRingtoneFactory.getHapticOnlyRingtone()).thenReturn(ringtoneInfo);
return mockRingtone;
}