IMS: Clean peer & host during conference failure
Send terminate for both host & peer when they get
dropped by network before receiving the conference
response
Change-Id: I676a070f98857df12d208e8732cba2177c07823d
Bug=23819253
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index a4583ba..e1d050a 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -1718,16 +1718,21 @@
}
}
- private void maybeMarkPeerAsMerged() {
- if (!isSessionAlive(mMergePeer.mSession)) {
+ private void markCallAsMerged(boolean playDisconnectTone) {
+ if (!isSessionAlive(mSession)) {
// If the peer is dead, let's not play a disconnect sound for it when we
// unbury the termination callback.
- logi("maybeMarkPeerAsMerged");
- mMergePeer.setIsMerged(true);
- mMergePeer.mSessionEndDuringMerge = true;
- mMergePeer.mSessionEndDuringMergeReasonInfo = new ImsReasonInfo(
- ImsReasonInfo.CODE_UNSPECIFIED, 0,
- "Call ended during conference merge process.");
+ logi("markCallAsMerged");
+ setIsMerged(playDisconnectTone);
+ mSessionEndDuringMerge = true;
+ String reasonInfo;
+ if (playDisconnectTone) {
+ reasonInfo = "Call ended by network";
+ } else {
+ reasonInfo = "Call ended during conference merge process.";
+ }
+ mSessionEndDuringMergeReasonInfo = new ImsReasonInfo(
+ ImsReasonInfo.CODE_UNSPECIFIED, 0, reasonInfo);
}
}
@@ -1796,7 +1801,7 @@
this.mHold = false;
swapRequired = true;
}
- maybeMarkPeerAsMerged();
+ mMergePeer.markCallAsMerged(false);
finalHostCall = this;
finalPeerCall = mMergePeer;
} else {
@@ -1871,7 +1876,7 @@
// only disconnected to be added to the conference.
finalHostCall = this;
finalPeerCall = mMergePeer;
- maybeMarkPeerAsMerged();
+ mMergePeer.markCallAsMerged(false);
swapRequired = false;
setIsMerged(false);
mMergePeer.setIsMerged(true);
@@ -1996,12 +2001,14 @@
// Ensure the calls being conferenced into the conference has isMerged = false.
// Ensure any terminations are surfaced from this session.
- setIsMerged(false);
+ markCallAsMerged(true);
+ setCallSessionMergePending(false);
notifySessionTerminatedDuringMerge();
+ // Perform the same cleanup on the merge peer if it exists.
if (mMergePeer != null) {
- // Perform the same cleanup on the merge peer if it exists.
- mMergePeer.setIsMerged(false);
+ mMergePeer.markCallAsMerged(true);
+ mMergePeer.setCallSessionMergePending(false);
mMergePeer.notifySessionTerminatedDuringMerge();
} else {
loge("processMergeFailed :: No merge peer!");