Merge "Ensure call log pending intent on missed call notification is immutable." into rvc-dev
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/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 2f336b3..0cdb8bc 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -855,7 +855,7 @@
                     // current state as tracked by PhoneStateBroadcaster, any failure to properly
                     // track the current call state there could result in the wrong ringing state
                     // being reported by this API.
-                    return mCallsManager.hasRingingCall();
+                    return mCallsManager.hasRingingOrSimulatedRingingCall();
                 }
             } finally {
                 Log.endSession();
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