am 708e4251: Merge "Revert the ANSWERING state." into gingerbread
Merge commit '708e42512a8b14202cd872d96d1f071ccb4cf915' into gingerbread-plus-aosp
* commit '708e42512a8b14202cd872d96d1f071ccb4cf915':
Revert the ANSWERING state.
diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java
index 9f86378..49b7a72 100644
--- a/telephony/java/com/android/internal/telephony/CallManager.java
+++ b/telephony/java/com/android/internal/telephony/CallManager.java
@@ -238,9 +238,7 @@
Phone.State s = Phone.State.IDLE;
for (Phone phone : mPhones) {
- if (phone.getState() == Phone.State.ANSWERING) {
- return Phone.State.ANSWERING;
- } else if (phone.getState() == Phone.State.RINGING) {
+ if (phone.getState() == Phone.State.RINGING) {
s = Phone.State.RINGING;
} else if (phone.getState() == Phone.State.OFFHOOK) {
if (s == Phone.State.IDLE) s = Phone.State.OFFHOOK;
@@ -358,19 +356,26 @@
}
/**
- * @return the first answering call
+ * unregister phone from CallManager
+ * @param phone
*/
- public Call getFirstAnsweringCall() {
- for (Phone phone : mPhones) {
- if (phone.getState() == Phone.State.ANSWERING) {
- return phone.getForegroundCall();
+ public void unregisterPhone(Phone phone) {
+ if (phone != null && mPhones.contains(phone)) {
+ mPhones.remove(phone);
+ mRingingCalls.remove(phone.getRingingCall());
+ mBackgroundCalls.remove(phone.getBackgroundCall());
+ mForegroundCalls.remove(phone.getForegroundCall());
+ unregisterForPhoneStates(phone);
+ if (phone == mDefaultPhone) {
+ if (mPhones.isEmpty()) {
+ mDefaultPhone = null;
+ } else {
+ mDefaultPhone = mPhones.get(0);
+ }
}
}
- return null;
}
-
-
public void setAudioMode() {
Context context = getContext();
if (context == null) return;
@@ -1359,7 +1364,7 @@
*/
public Call getFirstActiveBgCall() {
for (Call call : mBackgroundCalls) {
- if (!call.isIdle()) {
+ if (call.getState() != Call.State.IDLE) {
return call;
}
}
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 4900bb4..3dd9a01 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -55,12 +55,10 @@
* <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, ANSWERING;
+ IDLE, RINGING, OFFHOOK;
};
/**
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
index 0a87ddb..35aa3b3 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
@@ -143,23 +143,15 @@
// in case the active/holding call disappeared and this
// is no longer call waiting
- if (ringingCall.getState() == Call.State.INCOMING) {
+ if ((ringingCall.getState() == Call.State.INCOMING) ||
+ (ringingCall.getState() == Call.State.WAITING)) {
Log.v(LOG_TAG, "acceptCall");
// Always unmute when answering a new call
setMute(false);
- // make ringingCall foreground
- foregroundCall.switchWith(ringingCall);
- foregroundCall.acceptCall();
- } else if (ringingCall.getState() == Call.State.WAITING) {
- setMute(false);
- switchHoldingAndActive();
- // make ringingCall foreground
- foregroundCall.switchWith(ringingCall);
- foregroundCall.acceptCall();
+ ringingCall.acceptCall();
} else {
throw new CallStateException("phone not ringing");
}
- updatePhoneState();
}
}
@@ -482,8 +474,8 @@
}
void acceptCall() throws CallStateException {
- if (this != foregroundCall) {
- throw new CallStateException("acceptCall() in a non-fg call");
+ if (this != ringingCall) {
+ throw new CallStateException("acceptCall() in a non-ringing call");
}
if (connections.size() != 1) {
throw new CallStateException("acceptCall() in a conf call");
@@ -646,6 +638,18 @@
if (newState == Call.State.INCOMING) {
setState(mOwner.getState()); // INCOMING or WAITING
} else {
+ if (mOwner == ringingCall) {
+ if (ringingCall.getState() == Call.State.WAITING) {
+ try {
+ switchHoldingAndActive();
+ } catch (CallStateException e) {
+ // disconnect the call.
+ onCallEnded(DisconnectCause.LOCAL);
+ return;
+ }
+ }
+ foregroundCall.switchWith(ringingCall);
+ }
if (newState == Call.State.ACTIVE) call.startAudio();
setState(newState);
}
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java b/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java
index 2efbd17..9098e6f 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java
@@ -538,8 +538,6 @@
if (getRingingCall().isRinging()) {
state = State.RINGING;
- } else if (getForegroundCall().isRinging()) {
- state = State.ANSWERING;
} else if (getForegroundCall().isIdle()
&& getBackgroundCall().isIdle()) {
state = State.IDLE;