Merge "User cannot reject a waiting call after a switch call fails"
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index b4623f7..a923d66 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -139,6 +139,7 @@
boolean onCanceledViaNewOutgoingCallBroadcast(Call call, long disconnectionTimeout);
void onHoldToneRequested(Call call);
void onCallHoldFailed(Call call);
+ void onCallSwitchFailed(Call call);
void onConnectionEvent(Call call, String event, Bundle extras);
void onExternalCallChanged(Call call, boolean isExternalCall);
void onRttInitiationFailure(Call call, int reason);
@@ -215,6 +216,8 @@
@Override
public void onCallHoldFailed(Call call) {}
@Override
+ public void onCallSwitchFailed(Call call) {}
+ @Override
public void onConnectionEvent(Call call, String event, Bundle extras) {}
@Override
public void onExternalCallChanged(Call call, boolean isExternalCall) {}
@@ -3222,6 +3225,10 @@
for (Listener l : mListeners) {
l.onCallHoldFailed(this);
}
+ } else if (Connection.EVENT_CALL_SWITCH_FAILED.equals(event)) {
+ for (Listener l : mListeners) {
+ l.onCallSwitchFailed(this);
+ }
} else {
for (Listener l : mListeners) {
l.onConnectionEvent(this, event, extras);
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index ffe1ee7..5d51149 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -1030,12 +1030,22 @@
@Override
public void onCallHoldFailed(Call call) {
- // Normally, we don't care whether a call hold has failed. However, if a call was held in
- // order to answer an incoming call, that incoming call needs to be brought out of the
- // ANSWERED state so that the user can try the operation again.
+ markAllAnsweredCallAsRinging(call, "hold");
+ }
+
+ @Override
+ public void onCallSwitchFailed(Call call) {
+ markAllAnsweredCallAsRinging(call, "switch");
+ }
+
+ private void markAllAnsweredCallAsRinging(Call call, String actionName) {
+ // Normally, we don't care whether a call hold or switch has failed.
+ // However, if a call was held or switched in order to answer an incoming call, that
+ // incoming call needs to be brought out of the ANSWERED state so that the user can
+ // try the operation again.
for (Call call1 : mCalls) {
if (call1 != call && call1.getState() == CallState.ANSWERED) {
- setCallState(call1, CallState.RINGING, "hold failed on other call");
+ setCallState(call1, CallState.RINGING, actionName + " failed on other call");
}
}
}