Fix issues associated with hold failure am: 07a279afa8 am: f2078831de
am: fa4c3bfac5
Change-Id: I5541b1526ab21daa6e8126849e5eb2f7e86f1dae
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index 84ceee6..aefc2e6 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -135,6 +135,7 @@
void onConferenceStateChanged(Call call, boolean isConference);
boolean onCanceledViaNewOutgoingCallBroadcast(Call call, long disconnectionTimeout);
void onHoldToneRequested(Call call);
+ void onCallHoldFailed(Call call);
void onConnectionEvent(Call call, String event, Bundle extras);
void onExternalCallChanged(Call call, boolean isExternalCall);
void onRttInitiationFailure(Call call, int reason);
@@ -210,6 +211,8 @@
@Override
public void onHoldToneRequested(Call call) {}
@Override
+ public void onCallHoldFailed(Call call) {}
+ @Override
public void onConnectionEvent(Call call, String event, Bundle extras) {}
@Override
public void onExternalCallChanged(Call call, boolean isExternalCall) {}
@@ -3043,6 +3046,10 @@
for (Listener l : mListeners) {
l.onHoldToneRequested(this);
}
+ } else if (Connection.EVENT_CALL_HOLD_FAILED.equals(event)) {
+ for (Listener l : mListeners) {
+ l.onCallHoldFailed(this);
+ }
} else {
for (Listener l : mListeners) {
l.onConnectionEvent(this, event, extras);
diff --git a/src/com/android/server/telecom/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
index b68a851..7e4c3ba 100644
--- a/src/com/android/server/telecom/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -534,6 +534,7 @@
onCallLeavingActiveDialingOrConnecting();
break;
case CallState.RINGING:
+ case CallState.ANSWERED:
onCallLeavingRinging();
break;
case CallState.ON_HOLD:
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 0aacd92..b16f6cd 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -928,6 +928,18 @@
}
@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.
+ for (Call call1 : mCalls) {
+ if (call1 != call && call1.getState() == CallState.ANSWERED) {
+ setCallState(call1, CallState.RINGING, "hold failed on other call");
+ }
+ }
+ }
+
+ @Override
public UserHandle getCurrentUserHandle() {
return mCurrentUserHandle;
}