Snap for 4680594 from e8809de08a72465554f07d67f370c0b7eb32e499 to pi-release
Change-Id: I09cfffdc0482d66c671c16430614fdd35591989e
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index d8f3fbc..f3adb3f 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -1433,6 +1433,10 @@
if ((mConnectionProperties & Connection.PROPERTY_IS_RTT) ==
Connection.PROPERTY_IS_RTT) {
createRttStreams();
+ if (isEmergencyCall()) {
+ mCallsManager.setAudioRoute(CallAudioState.ROUTE_SPEAKER, null);
+ mCallsManager.mute(false);
+ }
}
mWasHighDefAudio = (connectionProperties & Connection.PROPERTY_HIGH_DEF_AUDIO) ==
Connection.PROPERTY_HIGH_DEF_AUDIO;
diff --git a/src/com/android/server/telecom/CallAudioRouteStateMachine.java b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
index dfa6042..a1581f1 100644
--- a/src/com/android/server/telecom/CallAudioRouteStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioRouteStateMachine.java
@@ -179,6 +179,7 @@
put(MUTE_ON, "MUTE_ON");
put(MUTE_OFF, "MUTE_OFF");
put(TOGGLE_MUTE, "TOGGLE_MUTE");
+ put(MUTE_EXTERNALLY_CHANGED, "MUTE_EXTERNALLY_CHANGED");
put(SWITCH_FOCUS, "SWITCH_FOCUS");
@@ -1236,7 +1237,13 @@
public void onReceive(Context context, Intent intent) {
Log.startSession("CARSM.mCR");
if (AudioManager.ACTION_MICROPHONE_MUTE_CHANGED.equals(intent.getAction())) {
- sendInternalMessage(MUTE_EXTERNALLY_CHANGED);
+ if (mCallsManager.hasEmergencyCall()) {
+ Log.i(this, "Mute was externally changed when there's an emergency call. " +
+ "Forcing mute back off.");
+ sendInternalMessage(MUTE_OFF);
+ } else {
+ sendInternalMessage(MUTE_EXTERNALLY_CHANGED);
+ }
} else {
Log.w(this, "Received non-mute-change intent");
}
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 72443b4..ac3500e 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -835,6 +835,15 @@
return false;
}
+ public boolean hasEmergencyRttCall() {
+ for (Call call : mCalls) {
+ if (call.isEmergencyCall() && call.isRttCall()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@VisibleForTesting
public boolean hasOnlyDisconnectedCalls() {
if (mCalls.size() == 0) {
@@ -1796,6 +1805,10 @@
/** Called by the in-call UI to change the mute state. */
void mute(boolean shouldMute) {
+ if (hasEmergencyCall() && shouldMute) {
+ Log.i(this, "Refusing to turn on mute because we're in an emergency call");
+ shouldMute = false;
+ }
mCallAudioManager.mute(shouldMute);
}
@@ -1804,6 +1817,11 @@
* speaker phone.
*/
void setAudioRoute(int route, String bluetoothAddress) {
+ if (hasEmergencyRttCall() && route != CallAudioState.ROUTE_SPEAKER) {
+ Log.i(this, "In an emergency RTT call. Forcing route to speaker.");
+ route = CallAudioState.ROUTE_SPEAKER;
+ bluetoothAddress = null;
+ }
mCallAudioManager.setAudioRoute(route, bluetoothAddress);
}