Merge "Fix issues associated with hold failure"
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 0a6ed7b..5cb0429 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -2447,6 +2447,9 @@
// disconnected while processing hold
if (mPendingMO != null) {
dialPendingMO();
+ } else if (mRingingCall.getState() == ImsPhoneCall.State.WAITING
+ && mHoldSwitchingState == HoldSwapState.HOLDING_TO_ANSWER_INCOMING) {
+ sendEmptyMessage(EVENT_ANSWER_WAITING_CALL);
}
mHoldSwitchingState = HoldSwapState.INACTIVE;
} else if (mPendingMO != null && mPendingMO.isEmergency()) {
@@ -2469,6 +2472,16 @@
mCallExpectedToResume = null;
}
mHoldSwitchingState = HoldSwapState.INACTIVE;
+ } else if (mRingingCall.getState() == ImsPhoneCall.State.WAITING
+ && mHoldSwitchingState == HoldSwapState.HOLDING_TO_ANSWER_INCOMING) {
+ // If we issued a hold request in order to answer an incoming call, we need
+ // to tell Telecom that we can't actually answer the incoming call.
+ mHoldSwitchingState = HoldSwapState.INACTIVE;
+ logHoldSwapState("onCallHoldFailed unable to answer waiting call");
+ }
+ ImsPhoneConnection conn = findConnection(imsCall);
+ if (conn != null) {
+ conn.onConnectionEvent(android.telecom.Connection.EVENT_CALL_HOLD_FAILED, null);
}
mPhone.notifySuppServiceFailed(Phone.SuppService.HOLD);
}