Snap for 12406339 from 3d5a63c5fec1369e1bf461398795e45f164c5888 to 24Q4-release
Change-Id: Ic61b3670be47a20892a2404282a74fb7410e258c
diff --git a/src/com/android/server/telecom/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
index fafd87f..8c2f631 100644
--- a/src/com/android/server/telecom/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -144,6 +144,12 @@
updateForegroundCall();
if (shouldPlayDisconnectTone(oldState, newState)) {
playToneForDisconnectedCall(call);
+ } else {
+ if (newState == CallState.DISCONNECTED) {
+ // This call is not disconnected, but it won't generate a disconnect tone, so
+ // complete the future to ensure we unbind from BT promptly.
+ completeDisconnectToneFuture(call);
+ }
}
onCallLeavingState(call, oldState);
@@ -1089,6 +1095,10 @@
CompletableFuture<Void> disconnectedToneFuture = mCallsManager.getInCallController()
.getDisconnectedToneBtFutures().get(call.getId());
if (disconnectedToneFuture != null) {
+ Log.i(this,
+ "completeDisconnectToneFuture: completing deferred disconnect tone future for"
+ + " call %s",
+ call.getId());
disconnectedToneFuture.complete(null);
}
}
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioManagerTest.java b/tests/src/com/android/server/telecom/tests/CallAudioManagerTest.java
index 1d641ba..d1a3eb6 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioManagerTest.java
@@ -53,6 +53,7 @@
import com.android.server.telecom.CallState;
import com.android.server.telecom.CallsManager;
import com.android.server.telecom.DtmfLocalTonePlayer;
+import com.android.server.telecom.InCallController;
import com.android.server.telecom.InCallTonePlayer;
import com.android.server.telecom.RingbackPlayer;
import com.android.server.telecom.Ringer;
@@ -77,6 +78,7 @@
@RunWith(JUnit4.class)
public class CallAudioManagerTest extends TelecomTestCase {
@Mock private CallAudioRouteStateMachine mCallAudioRouteStateMachine;
+ @Mock private InCallController mInCallController;
@Mock private CallsManager mCallsManager;
@Mock private CallAudioModeStateMachine mCallAudioModeStateMachine;
@Mock private InCallTonePlayer.Factory mPlayerFactory;
@@ -103,6 +105,8 @@
return mockInCallTonePlayer;
}).when(mPlayerFactory).createPlayer(any(Call.class), anyInt());
when(mCallsManager.getLock()).thenReturn(mLock);
+ when(mCallsManager.getInCallController()).thenReturn(mInCallController);
+ when(mInCallController.getBtBindingFuture(any(Call.class))).thenReturn(null);
when(mFlags.ensureAudioModeUpdatesOnForegroundCallChange()).thenReturn(true);
mCallAudioManager = new CallAudioManager(
mCallAudioRouteStateMachine,