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
diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java
index 8bd789c..83496dc 100644
--- a/telephony/java/com/android/internal/telephony/CallManager.java
+++ b/telephony/java/com/android/internal/telephony/CallManager.java
@@ -197,10 +197,12 @@
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;
@@ -290,6 +292,18 @@
}
/**
+ * @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
*/
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 9afade3..7464cc7 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -55,10 +55,12 @@
* <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;
};
/**
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
index 5af32da..07dd35d 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
@@ -158,6 +158,7 @@
} else {
throw new CallStateException("phone not ringing");
}
+ updatePhoneState();
}
}
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java b/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java
index 9098e6f..2efbd17 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java
@@ -538,6 +538,8 @@
if (getRingingCall().isRinging()) {
state = State.RINGING;
+ } else if (getForegroundCall().isRinging()) {
+ state = State.ANSWERING;
} else if (getForegroundCall().isIdle()
&& getBackgroundCall().isIdle()) {
state = State.IDLE;