Merge "requesting the current active endpoint as new should call onResult" into udc-dev
diff --git a/src/com/android/server/telecom/CallEndpointController.java b/src/com/android/server/telecom/CallEndpointController.java
index 60827e2..82164b3 100644
--- a/src/com/android/server/telecom/CallEndpointController.java
+++ b/src/com/android/server/telecom/CallEndpointController.java
@@ -25,7 +25,9 @@
import android.telecom.CallEndpoint;
import android.telecom.CallEndpointException;
import android.telecom.Log;
+
import com.android.internal.annotations.VisibleForTesting;
+
import java.util.HashMap;
import java.util.Map;
import java.util.HashSet;
@@ -96,6 +98,12 @@
return;
}
+ if (isCurrentEndpointRequestedEndpoint(route, bluetoothAddress)) {
+ Log.d(this, "requestCallEndpointChange: requested endpoint is already active");
+ callback.send(CallEndpoint.ENDPOINT_OPERATION_SUCCESS, new Bundle());
+ return;
+ }
+
if (mPendingChangeRequest != null && !mPendingChangeRequest.isDone()) {
mPendingChangeRequest.complete(RESULT_ANOTHER_REQUEST);
mPendingChangeRequest = null;
@@ -116,6 +124,27 @@
mCallsManager.getCallAudioManager().setAudioRoute(route, bluetoothAddress);
}
+ public boolean isCurrentEndpointRequestedEndpoint(int requestedRoute, String requestedAddress) {
+ if (mCallsManager.getCallAudioManager() == null
+ || mCallsManager.getCallAudioManager().getCallAudioState() == null) {
+ return false;
+ }
+ CallAudioState currentAudioState = mCallsManager.getCallAudioManager().getCallAudioState();
+ // requested non-bt endpoint is already active
+ if (requestedRoute != CallAudioState.ROUTE_BLUETOOTH &&
+ requestedRoute == currentAudioState.getRoute()) {
+ return true;
+ }
+ // requested bt endpoint is already active
+ if (requestedRoute == CallAudioState.ROUTE_BLUETOOTH &&
+ currentAudioState.getActiveBluetoothDevice() != null &&
+ requestedAddress.equals(
+ currentAudioState.getActiveBluetoothDevice().getAddress())) {
+ return true;
+ }
+ return false;
+ }
+
private Bundle getErrorResult(int result) {
String message;
int resultCode;
@@ -165,8 +194,7 @@
for (Call call : calls) {
if (call != null && call.getConnectionService() != null) {
call.getConnectionService().onCallEndpointChanged(call, mActiveCallEndpoint);
- }
- else if (call != null && call.getTransactionServiceWrapper() != null) {
+ } else if (call != null && call.getTransactionServiceWrapper() != null) {
call.getTransactionServiceWrapper()
.onCallEndpointChanged(call, mActiveCallEndpoint);
}
@@ -181,8 +209,7 @@
if (call != null && call.getConnectionService() != null) {
call.getConnectionService().onAvailableCallEndpointsChanged(call,
mAvailableCallEndpoints);
- }
- else if (call != null && call.getTransactionServiceWrapper() != null) {
+ } else if (call != null && call.getTransactionServiceWrapper() != null) {
call.getTransactionServiceWrapper()
.onAvailableCallEndpointsChanged(call, mAvailableCallEndpoints);
}
@@ -196,8 +223,7 @@
for (Call call : calls) {
if (call != null && call.getConnectionService() != null) {
call.getConnectionService().onMuteStateChanged(call, isMuted);
- }
- else if (call != null && call.getTransactionServiceWrapper() != null) {
+ } else if (call != null && call.getTransactionServiceWrapper() != null) {
call.getTransactionServiceWrapper().onMuteStateChanged(call, isMuted);
}
}
@@ -207,7 +233,7 @@
Set<CallEndpoint> newAvailableEndpoints = new HashSet<>();
Map<ParcelUuid, String> newBluetoothDevices = new HashMap<>();
- mRouteToTypeMap.forEach((route, type)->{
+ mRouteToTypeMap.forEach((route, type) -> {
if ((state.getSupportedRouteMask() & route) != 0) {
if (type == CallEndpoint.TYPE_STREAMING) {
if (state.getRoute() == CallAudioState.ROUTE_STREAMING) {
diff --git a/testapps/transactionalVoipApp/src/com/android/server/telecom/transactionalVoipApp/InCallActivity.java b/testapps/transactionalVoipApp/src/com/android/server/telecom/transactionalVoipApp/InCallActivity.java
index 4c9f52d..b868b70 100644
--- a/testapps/transactionalVoipApp/src/com/android/server/telecom/transactionalVoipApp/InCallActivity.java
+++ b/testapps/transactionalVoipApp/src/com/android/server/telecom/transactionalVoipApp/InCallActivity.java
@@ -254,14 +254,14 @@
new OutcomeReceiver<Void, CallException>() {
@Override
public void onResult(Void result) {
- Log.i(TAG, String.format("success w/ %s", tag));
+ Log.i(TAG, String.format("requestEndpointChange: success w/ %s", tag));
updateCurrentEndpointWithOnResult(endpoint);
}
@Override
public void onError(CallException e) {
- Log.i(TAG, String.format("%s :failed to switch to endpoint=[%s],"
- + " due to exception=[%s]", tag, endpoint, e.toString()));
+ Log.i(TAG, String.format("requestEndpointChange: %s failed to switch to "
+ + "endpoint=[%s] due to exception=[%s]", tag, endpoint, e));
}
});
}