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

Commit d8f3d167 authored by Chung-yih Wang's avatar Chung-yih Wang
Browse files

Add a new phone state ANSWERING.

The state ANSWERING is set when we answer an incoming sip call, i.e.
sending a 'OK' response to the peer. The state will be set to ACTIVE
once the 'ACK' from peer is received.

Change-Id: I84ee3cc68222eb34e032896ce23f7431d4ad774a
parent 0e063382
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -197,10 +197,12 @@ public final class CallManager {
        Phone.State s = Phone.State.IDLE;

        for (Phone phone : mPhones) {
            if (phone.getState() == Phone.State.RINGING) {
                return Phone.State.RINGING;
            if (phone.getState() == Phone.State.ANSWERING) {
                return Phone.State.ANSWERING;
            } else if (phone.getState() == Phone.State.RINGING) {
                s = Phone.State.RINGING;
            } else if (phone.getState() == Phone.State.OFFHOOK) {
                s = Phone.State.OFFHOOK;
                if (s == Phone.State.IDLE) s = Phone.State.OFFHOOK;
            }
        }
        return s;
@@ -289,6 +291,18 @@ public final class CallManager {
        return getFirstActiveRingingCall().getPhone();
    }

    /**
     * @return the first answering call
     */
    public Call getFirstAnsweringCall() {
        for (Phone phone : mPhones) {
            if (phone.getState() == Phone.State.ANSWERING) {
                return phone.getForegroundCall();
            }
        }
        return null;
    }

    /**
     * unregister phone from CallManager
     * @param phone
+3 −1
Original line number Diff line number Diff line
@@ -55,10 +55,12 @@ public interface Phone {
     * <li>OFFHOOK = The phone is off hook. At least one call
     * exists that is dialing, active or holding and no calls are
     * ringing or waiting.</li>
     * <li>ANSWERING = The incoming call is picked up but the
     *  call is not established yet.</li>
     * </ul>
     */
    enum State {
        IDLE, RINGING, OFFHOOK;
        IDLE, RINGING, OFFHOOK, ANSWERING;
    };

    /**
+1 −0
Original line number Diff line number Diff line
@@ -158,6 +158,7 @@ public class SipPhone extends SipPhoneBase {
            } else {
                throw new CallStateException("phone not ringing");
            }
            updatePhoneState();
        }
    }

+2 −0
Original line number Diff line number Diff line
@@ -538,6 +538,8 @@ abstract class SipPhoneBase extends PhoneBase {

        if (getRingingCall().isRinging()) {
            state = State.RINGING;
        } else if (getForegroundCall().isRinging()) {
            state = State.ANSWERING;
        } else if (getForegroundCall().isIdle()
                && getBackgroundCall().isIdle()) {
            state = State.IDLE;