Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2377dc99 authored by Android (Google) Code Review's avatar Android (Google) Code Review Committed by The Android Open Source Project
Browse files

am 6184a2ad: Merge change 5339 into donut

Merge commit '6184a2ad'

* commit '6184a2ad':
  Fix intermittent crash related to call waiting
parents b3222875 6184a2ad
Loading
Loading
Loading
Loading
+7 −11
Original line number Diff line number Diff line
@@ -253,11 +253,7 @@ public final class CdmaCallTracker extends CallTracker {
            // Always unmute when answering a new call
            setMute(false);
            cm.acceptCall(obtainCompleteMessage());
        } else if ((foregroundCall.connections.size() > 0) &&
                   (ringingCall.getState() == CdmaCall.State.WAITING)) {
            // TODO(Moto): jsh asks, "Is this check necessary? I don't think it should be
            // possible to have no fg connection and a WAITING call, but if we should hit
            // this situation, is a CallStateExcetion appropriate?"
        } else if (ringingCall.getState() == CdmaCall.State.WAITING) {
            CdmaConnection cwConn = (CdmaConnection)(ringingCall.getLatestConnection());

            // Since there is no network response for supplimentary
@@ -530,10 +526,6 @@ public final class CdmaCallTracker extends CallTracker {
                        CdmaConnection cn = (CdmaConnection)foregroundCall.connections.get(n);
                        droppedDuringPoll.add(cn);
                    }
                    // TODO(Moto): jsh asks, "Are we sure we don't need to do this for
                    // ringingCall as well? What if there's a WAITING call (ie, UI timer
                    // hasn't expired, moving it to DISCONNECTED)? How/when will it
                    // transition to DISCONNECTED?"
                }
                foregroundCall.setGeneric(false);
                // Dropped connections are removed from the CallTracker
@@ -681,8 +673,12 @@ public final class CdmaCallTracker extends CallTracker {
            // set the ringing call state to IDLE here to avoid a race condition
            // where a new call waiting could get a hang up from an old call
            // waiting ringingCall.
            // TODO(Moto): jsh asks, "Should we call conn.ondisconnect() here or Somewhere?"
            ringingCall.detach(conn);
            //
            // PhoneApp does the call log itself since only PhoneApp knows
            // the hangup reason is user ignoring or timing out. So conn.onDisconnect()
            // is not called here. Instead, conn.onLocalDisconnect() is called.
            conn.onLocalDisconnect();
            phone.notifyCallStateChanged();
            return;
        } else {
            try {
+24 −6
Original line number Diff line number Diff line
@@ -452,12 +452,7 @@ public class CdmaConnection extends Connection {
        this.cause = cause;

        if (!disconnected) {
            index = -1;

            disconnectTime = System.currentTimeMillis();
            duration = SystemClock.elapsedRealtime() - connectTimeReal;
            disconnected = true;

            doDisconnect();
            if (Config.LOGD) Log.d(LOG_TAG,
                    "[CDMAConn] onDisconnect: cause=" + cause);

@@ -470,6 +465,21 @@ public class CdmaConnection extends Connection {
        releaseWakeLock();
    }

    /** Called when the call waiting connection has been hung up */
    /*package*/ void
    onLocalDisconnect() {
        if (!disconnected) {
            doDisconnect();
            if (Config.LOGD) Log.d(LOG_TAG,
                    "[CDMAConn] onLoalDisconnect" );

            if (parent != null) {
                parent.detach(this);
            }
        }
        releaseWakeLock();
    }

    // Returns true if state has changed, false if nothing changed
    /*package*/ boolean
    update (DriverCall dc) {
@@ -586,6 +596,14 @@ public class CdmaConnection extends Connection {
        releaseWakeLock();
    }

    private void
    doDisconnect() {
       index = -1;
       disconnectTime = System.currentTimeMillis();
       duration = SystemClock.elapsedRealtime() - connectTimeReal;
       disconnected = true;
    }

    private void
    onStartedHolding() {
        holdingStartTime = SystemClock.elapsedRealtime();