diff options
| author | Chung-yih Wang <cywang@google.com> | 2010-09-21 10:43:24 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-09-21 10:43:24 -0700 |
| commit | 6b15ecf2787dd0fa8e119785495112a84c30afe0 (patch) | |
| tree | 1842f64bdcd1ee2c14fc5da7b9563d33152b06eb /telephony/java | |
| parent | fa213d82a99531f4941795f060ce2b7d1ae739a6 (diff) | |
| parent | 232bc085fc901b6234d47c4ee4e3ee4fc88431e7 (diff) | |
| download | frameworks_base-6b15ecf2787dd0fa8e119785495112a84c30afe0.zip frameworks_base-6b15ecf2787dd0fa8e119785495112a84c30afe0.tar.gz frameworks_base-6b15ecf2787dd0fa8e119785495112a84c30afe0.tar.bz2 | |
am 232bc085: am 708e4251: Merge "Revert the ANSWERING state." into gingerbread
Merge commit '232bc085fc901b6234d47c4ee4e3ee4fc88431e7'
* commit '232bc085fc901b6234d47c4ee4e3ee4fc88431e7':
Revert the ANSWERING state.
Diffstat (limited to 'telephony/java')
4 files changed, 35 insertions, 30 deletions
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 @@ public final class CallManager { 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 @@ public final class CallManager { } /** - * @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 final class CallManager { */ 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 e5736ca..ec6c023 100644 --- a/telephony/java/com/android/internal/telephony/Phone.java +++ b/telephony/java/com/android/internal/telephony/Phone.java @@ -54,12 +54,10 @@ 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, 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 0f2736f..9fcf12d 100755 --- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java +++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java @@ -150,23 +150,15 @@ public class SipPhone extends SipPhoneBase { // 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(); } } @@ -485,8 +477,8 @@ public class SipPhone extends SipPhoneBase { } 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"); @@ -649,6 +641,18 @@ public class SipPhone extends SipPhoneBase { 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 fec83d6..5f26af4 100755 --- a/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java +++ b/telephony/java/com/android/internal/telephony/sip/SipPhoneBase.java @@ -549,8 +549,6 @@ 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; |
