Revert "Terminate ICS (for BT) after the disconnect tone finishe..."
Revert submission 20919444-btDisconnectTelecom Reason for revert: Causes regression in Telecom CTS tests (b/266021486, b/266041214) Reverted changes: /q/submissionid:20919444-btDisconnectTelecom Change-Id: Ie6c471c4d1f11b11a721ac610a98784b8c854953
This commit is contained in:
@@ -32,10 +32,8 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* A unified virtual device providing a means of voice (and other) communication on a device.
|
||||
@@ -150,14 +148,6 @@ public final class Phone {
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
// Future used to delay terminating the InCallService before the call disconnect tone
|
||||
// finishes playing.
|
||||
private static Map<String, CompletableFuture<Void>> sDisconnectedToneFutures = new ArrayMap<>();
|
||||
|
||||
// Timeout value to be used to ensure future completion for sDisconnectedToneFutures. This is
|
||||
// set to 4 seconds to account for the exceptional case (TONE_CONGESTION).
|
||||
private static final int DISCONNECTED_TONE_TIMEOUT = 4000;
|
||||
|
||||
Phone(InCallAdapter adapter, String callingPackage, int targetSdkVersion) {
|
||||
mInCallAdapter = adapter;
|
||||
mCallingPackage = callingPackage;
|
||||
@@ -466,45 +456,9 @@ public final class Phone {
|
||||
}
|
||||
|
||||
private void fireCallRemoved(Call call) {
|
||||
String callId = call.internalGetCallId();
|
||||
CompletableFuture<Void> disconnectedToneFuture = initializeDisconnectedToneFuture(callId);
|
||||
// delay the InCallService termination until after the disconnect tone finishes playing
|
||||
disconnectedToneFuture.thenRunAsync(() -> {
|
||||
for (Listener listener : mListeners) {
|
||||
listener.onCallRemoved(this, call);
|
||||
}
|
||||
// clean up the future after
|
||||
sDisconnectedToneFutures.remove(callId);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize disconnect tone future to be used in delaying ICS termination.
|
||||
*
|
||||
* @return CompletableFuture to delay InCallService termination until after the disconnect tone
|
||||
* finishes playing. A timeout of 4s is used to handle the use case when we play
|
||||
* TONE_CONGESTION and to ensure completion so that we don't block the removal of the service.
|
||||
*/
|
||||
private CompletableFuture<Void> initializeDisconnectedToneFuture(String callId) {
|
||||
// create the future and map (sDisconnectedToneFutures) it to the corresponding call id
|
||||
CompletableFuture<Void> disconnectedToneFuture = new CompletableFuture<Void>()
|
||||
.completeOnTimeout(null, DISCONNECTED_TONE_TIMEOUT, TimeUnit.MILLISECONDS);
|
||||
// we should not encounter duplicate insertions since call ids are unique
|
||||
sDisconnectedToneFutures.put(callId, disconnectedToneFuture);
|
||||
return disconnectedToneFuture;
|
||||
}
|
||||
|
||||
/**
|
||||
* Completes disconnected tone future with passed in result.
|
||||
* @hide
|
||||
* @return true if future was completed, false otherwise
|
||||
*/
|
||||
public static boolean completeDisconnectedToneFuture(String callId) {
|
||||
if (sDisconnectedToneFutures.containsKey(callId)) {
|
||||
sDisconnectedToneFutures.get(callId).complete(null);
|
||||
return true;
|
||||
for (Listener listener : mListeners) {
|
||||
listener.onCallRemoved(this, call);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void fireCallAudioStateChanged(CallAudioState audioState) {
|
||||
|
||||
Reference in New Issue
Block a user