Merge "Conference event package performance improvement." into lmp-mr1-dev
Tyler Gunn [Fri, 7 Nov 2014 20:43:07 +0000 (20:43 +0000)]
1  2 
src/java/com/android/ims/ImsCall.java

@@@ -1634,61 -1608,16 +1630,69 @@@ public class ImsCall implements ICall 
                  loge("notifyConferenceStateUpdated :: ", t);
              }
          }
+         if (!conferenceParticipants.isEmpty() && mListener != null) {
+             try {
+                 mListener.onConferenceParticipantsStateChanged(this, conferenceParticipants);
+             } catch (Throwable t) {
+                 loge("notifyConferenceStateUpdated :: ", t);
+             }
+         }
      }
  
 +    /**
 +     * Perform all cleanup and notification around the termination of a session.
 +     * Note that there are 2 distinct modes of operation.  The first is when
 +     * we receive a session termination on the primary session when we are
 +     * in the processing of merging.  The second is when we are not merging anything
 +     * and the call is terminated.
 +     *
 +     * @param reasonInfo The reason for the session termination
 +     */
 +    private void processCallTerminated(ImsReasonInfo reasonInfo) {
 +        if (DBG) {
 +            String sessionString = mSession != null ? mSession.toString() : "null";
 +            String transientSessionString = mTransientConferenceSession != null ?
 +                    mTransientConferenceSession.toString() : "null";
 +            String reasonString = reasonInfo != null ? reasonInfo.toString() : "null";
 +            log("processCallTerminated :: session=" + sessionString + " transientSession=" +
 +                    transientSessionString + " reason=" + reasonString);
 +        }
 +
 +        ImsCall.Listener listener = null;
 +
 +        synchronized(ImsCall.this) {
 +            if (mUpdateRequest == UPDATE_MERGE) {
 +                // Since we are in the process of a merge, this trigger means something
 +                // else because it is probably due to the merge happening vs. the
 +                // session is really terminated. Let's flag this and revisit if
 +                // the merge() ends up failing because we will need to take action on the
 +                // mSession in that case since the termination was not due to the merge
 +                // succeeding.
 +                if (DBG) {
 +                    log("processCallTerminated :: burying termination during ongoing merge.");
 +                }
 +                mSessionEndDuringMerge = true;
 +                mSessionEndDuringMergeReasonInfo = reasonInfo;
 +                return;
 +            }
 +
 +            if (mCallGroup != null) {
 +                notifyConferenceSessionTerminated(reasonInfo);
 +            } else {
 +                listener = mListener;
 +                clear(reasonInfo);
 +            }
 +        }
 +
 +        if (listener != null) {
 +            try {
 +                listener.onCallTerminated(ImsCall.this, reasonInfo);
 +            } catch (Throwable t) {
 +                loge("callSessionTerminated :: ", t);
 +            }
 +        }
 +    }
  
      /**
       * This function determines if the ImsCallSession is our actual ImsCallSession or if is