aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/ims
diff options
context:
space:
mode:
authorAnju Mathapati <anjucm@codeaurora.org>2015-07-17 14:54:10 -0700
committerAnthony Lee <anthonylee@google.com>2015-07-22 12:00:01 -0700
commitd9ed874439293ed6c34ce27a3689711c986f977b (patch)
tree3cdbce43fd2979178c82ba3dbdd12dc124be8a1e /src/java/com/android/ims
parent6c0b0d0e83b8d06f40ec814573adc69f362704a9 (diff)
downloadims-d9ed874439293ed6c34ce27a3689711c986f977b.tar.gz
Handle hangup for 4 way conference scenario
Pass the session only during 3-way conference scenario. For all other cases pass it as null, so as to avoid the listenerproxy getting over-written Bug: 22173672 Change-Id: I10a223aaabe731a3a7d3c24da123dae660ed5bb3
Diffstat (limited to 'src/java/com/android/ims')
-rw-r--r--src/java/com/android/ims/ImsCall.java65
-rw-r--r--src/java/com/android/ims/internal/ImsCallSession.java27
2 files changed, 33 insertions, 59 deletions
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index ec546dab..1f6d3526 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -2299,40 +2299,6 @@ public class ImsCall implements ICall {
logi("callSessionMergeStarted :: session=" + session + " newSession=" + newSession +
", profile=" + profile);
- if (!isCallSessionMergePending()) {
- // Odd, we are not in the midst of merging anything.
- logi("callSessionMergeStarted :: no merge in progress.");
- return;
- }
-
- // There are 2 ways that we can go here. If the session that supplied the params
- // is not null, then it is the new session that represents the new conference
- // if the merge succeeds. If it is null, the merge is happening on our current
- // ImsCallSession.
- if (session == null) {
- // Everything is already set up and we just need to make sure
- // that we properly respond to all the future callbacks about
- // this merge.
- if (CONF_DBG) {
- logi("callSessionMergeStarted :: merging into existing ImsCallSession");
- }
- return;
- }
-
- if (CONF_DBG) {
- logi("callSessionMergeStarted :: setting our transient ImsCallSession");
- }
-
- // If we are here, this means that we are creating a new conference and
- // we need to do some extra work around managing a new ImsCallSession that
- // could represent our new ImsCallSession if the merge succeeds.
- synchronized(ImsCall.this) {
- // Keep track of this session for future callbacks to indicate success
- // or failure of this merge.
- mTransientConferenceSession = newSession;
- mTransientConferenceSession.setListener(createCallSessionListener());
- }
-
return;
}
@@ -2349,7 +2315,7 @@ public class ImsCall implements ICall {
/**
* We received a callback from ImsCallSession that merge completed.
- * @param session - this session can have 2 values based on the below scenarios
+ * @param newSession - this session can have 2 values based on the below scenarios
*
* Conference Scenarios :
* Case 1 - 3 way success case
@@ -2361,24 +2327,29 @@ public class ImsCall implements ICall {
* call (mergeHost) and the single party call is in the background.
*
* Conference Result:
- * session : active session after conference
- * session = new session for case 1, 2, 3. Should be considered as mTransientConferencession
- * session = Active conference session for case 5, same as current session,
- * mergehost was foreground call
- * mTransientConferencession will be null
- * session = Active conference session for case 4, mergeHost was background call
- * mTransientConferencession will be null
+ * session : new session after conference
+ * newSession = new session for case 1, 2, 3.
+ * Should be considered as mTransientConferencession
+ * newSession = Active conference session for case 5 will be null
+ * mergehost was foreground call
+ * mTransientConferencession will be null
+ * newSession = Active conference session for case 4 will be null
+ * mergeHost was background call
+ * mTransientConferencession will be null
*/
@Override
- public void callSessionMergeComplete(ImsCallSession session) {
- logi("callSessionMergeComplete :: session=" + session);
+ public void callSessionMergeComplete(ImsCallSession newSession) {
+ logi("callSessionMergeComplete :: newSession =" + newSession);
if (!isMergeHost()) {
// Handles case 4
mMergeHost.processMergeComplete();
} else {
- // Handles case 1, 2, 3, 5
- mTransientConferenceSession = doesCallSessionExistsInMerge(session) ?
- null: session;
+ // Handles case 1, 2, 3
+ if (newSession != null) {
+ mTransientConferenceSession = doesCallSessionExistsInMerge(newSession) ?
+ null: newSession;
+ }
+ // Handles case 5
processMergeComplete();
}
}
diff --git a/src/java/com/android/ims/internal/ImsCallSession.java b/src/java/com/android/ims/internal/ImsCallSession.java
index d7b0392f..b89323d6 100644
--- a/src/java/com/android/ims/internal/ImsCallSession.java
+++ b/src/java/com/android/ims/internal/ImsCallSession.java
@@ -1034,10 +1034,9 @@ public class ImsCallSession {
@Override
public void callSessionMergeStarted(IImsCallSession session,
IImsCallSession newSession, ImsCallProfile profile) {
- if (mListener != null) {
- mListener.callSessionMergeStarted(ImsCallSession.this,
- new ImsCallSession(newSession), profile);
- }
+ // This callback can be used for future use to add additional
+ // functionality that may be needed between conference start and complete
+ Log.d(TAG, "callSessionMergeStarted");
}
/**
@@ -1046,21 +1045,25 @@ public class ImsCallSession {
* @param session The call session.
*/
@Override
- public void callSessionMergeComplete(IImsCallSession activeCallSession) {
+ public void callSessionMergeComplete(IImsCallSession newSession) {
if (mListener != null) {
- // Check if the active session is the same session that was
- // active before the merge request was sent.
- ImsCallSession validActiveSession = ImsCallSession.this;
+ if (newSession != null) {
+ // Check if the active session is the same session that was
+ // active before the merge request was sent.
+ ImsCallSession validActiveSession = ImsCallSession.this;
try {
- if (!Objects.equals(miSession.getCallId(), activeCallSession.getCallId())) {
+ if (!Objects.equals(miSession.getCallId(), newSession.getCallId())) {
// New session created after conference
- validActiveSession = new ImsCallSession(activeCallSession);
+ validActiveSession = new ImsCallSession(newSession);
}
} catch (RemoteException rex) {
Log.e(TAG, "callSessionMergeComplete: exception for getCallId!");
}
-
- mListener.callSessionMergeComplete(validActiveSession);
+ mListener.callSessionMergeComplete(validActiveSession);
+ } else {
+ // Session already exists. Hence no need to pass
+ mListener.callSessionMergeComplete(null);
+ }
}
}