Stay in MODE_CALL_SCREENING during SIMULATED_RINGING
When Telecom goes into SIMULATED_RINGING after coming out of the audio
processing state, don't change the audio mode to MODE_RINGTONE.
Test: manual
Test: atest CallAudioModeTransitionTests
Bug: 156315959
Change-Id: Ifcb6045ae5e198dea8f9b5d6741fb8d3a9dab9d3
diff --git a/src/com/android/server/telecom/CallAudioModeStateMachine.java b/src/com/android/server/telecom/CallAudioModeStateMachine.java
index 9e1b5c7..2c435d7 100644
--- a/src/com/android/server/telecom/CallAudioModeStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioModeStateMachine.java
@@ -357,7 +357,11 @@
if (mCallAudioManager.startRinging()) {
mAudioManager.requestAudioFocusForCall(AudioManager.STREAM_RING,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
- mAudioManager.setMode(AudioManager.MODE_RINGTONE);
+ // Do not set MODE_RINGTONE if we were previously in the CALL_SCREENING mode -- this
+ // trips up the audio system.
+ if (mAudioManager.getMode() != AudioManager.MODE_CALL_SCREENING) {
+ mAudioManager.setMode(AudioManager.MODE_RINGTONE);
+ }
mCallAudioManager.setCallAudioRouteFocusState(
CallAudioRouteStateMachine.RINGING_FOCUS);
} else {
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioModeTransitionTests.java b/tests/src/com/android/server/telecom/tests/CallAudioModeTransitionTests.java
index 5ab204e..c7e5aa9 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioModeTransitionTests.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioModeTransitionTests.java
@@ -137,6 +137,11 @@
resetMocks();
when(mCallAudioManager.startRinging()).thenReturn(true);
+ if (mParams.initialAudioState
+ == CallAudioModeStateMachine.ENTER_AUDIO_PROCESSING_FOCUS_FOR_TESTING) {
+ when(mAudioManager.getMode())
+ .thenReturn(CallAudioModeStateMachine.NEW_AUDIO_MODE_FOR_AUDIO_PROCESSING);
+ }
sm.sendMessage(mParams.messageType, mParams.externalState);
waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);
@@ -815,7 +820,7 @@
.build(),
CallAudioModeStateMachine.RING_STATE_NAME, // expectedFinalStateName
FOCUS_RING, // expectedFocus
- AudioManager.MODE_RINGTONE, // expectedMode
+ NO_CHANGE, // expectedMode
ON, // expectedRingingInteraction
// We expect a call to stopCallWaiting because it happens whenever the ringer starts
OFF // expectedCallWaitingInteraction
@@ -836,7 +841,7 @@
.build(),
CallAudioModeStateMachine.RING_STATE_NAME, // expectedFinalStateName
FOCUS_RING, // expectedFocus
- AudioManager.MODE_RINGTONE, // expectedMode
+ NO_CHANGE, // expectedMode
ON, // expectedRingingInteraction
// We expect a call to stopCallWaiting because it happens whenever the ringer starts
OFF // expectedCallWaitingInteraction