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
This commit is contained in:
@@ -197,10 +197,12 @@ public final class CallManager {
|
|||||||
Phone.State s = Phone.State.IDLE;
|
Phone.State s = Phone.State.IDLE;
|
||||||
|
|
||||||
for (Phone phone : mPhones) {
|
for (Phone phone : mPhones) {
|
||||||
if (phone.getState() == Phone.State.RINGING) {
|
if (phone.getState() == Phone.State.ANSWERING) {
|
||||||
return Phone.State.RINGING;
|
return Phone.State.ANSWERING;
|
||||||
|
} else if (phone.getState() == Phone.State.RINGING) {
|
||||||
|
s = Phone.State.RINGING;
|
||||||
} else if (phone.getState() == Phone.State.OFFHOOK) {
|
} else if (phone.getState() == Phone.State.OFFHOOK) {
|
||||||
s = Phone.State.OFFHOOK;
|
if (s == Phone.State.IDLE) s = Phone.State.OFFHOOK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
@@ -289,6 +291,18 @@ public final class CallManager {
|
|||||||
return getFirstActiveRingingCall().getPhone();
|
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
|
* unregister phone from CallManager
|
||||||
* @param phone
|
* @param phone
|
||||||
|
|||||||
@@ -55,10 +55,12 @@ public interface Phone {
|
|||||||
* <li>OFFHOOK = The phone is off hook. At least one call
|
* <li>OFFHOOK = The phone is off hook. At least one call
|
||||||
* exists that is dialing, active or holding and no calls are
|
* exists that is dialing, active or holding and no calls are
|
||||||
* ringing or waiting.</li>
|
* ringing or waiting.</li>
|
||||||
|
* <li>ANSWERING = The incoming call is picked up but the
|
||||||
|
* call is not established yet.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
enum State {
|
enum State {
|
||||||
IDLE, RINGING, OFFHOOK;
|
IDLE, RINGING, OFFHOOK, ANSWERING;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ public class SipPhone extends SipPhoneBase {
|
|||||||
} else {
|
} else {
|
||||||
throw new CallStateException("phone not ringing");
|
throw new CallStateException("phone not ringing");
|
||||||
}
|
}
|
||||||
|
updatePhoneState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -538,6 +538,8 @@ abstract class SipPhoneBase extends PhoneBase {
|
|||||||
|
|
||||||
if (getRingingCall().isRinging()) {
|
if (getRingingCall().isRinging()) {
|
||||||
state = State.RINGING;
|
state = State.RINGING;
|
||||||
|
} else if (getForegroundCall().isRinging()) {
|
||||||
|
state = State.ANSWERING;
|
||||||
} else if (getForegroundCall().isIdle()
|
} else if (getForegroundCall().isIdle()
|
||||||
&& getBackgroundCall().isIdle()) {
|
&& getBackgroundCall().isIdle()) {
|
||||||
state = State.IDLE;
|
state = State.IDLE;
|
||||||
|
|||||||
Reference in New Issue
Block a user