diff options
author | John Wang <johnwang@google.com> | 2010-12-01 11:10:42 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-12-01 11:10:42 -0800 |
commit | ae2a44191188cde1dc4a1bbb0134d775f0dc4126 (patch) | |
tree | c5de11653f1c03d62080da098aee4e93e2a2c4c5 /telephony/java/com/android | |
parent | 869fa653e0880fc1f389eb51524bef5183bf713e (diff) | |
parent | 4567847d461afac08a80518637a0e48eff3c5247 (diff) | |
download | frameworks_base-ae2a44191188cde1dc4a1bbb0134d775f0dc4126.zip frameworks_base-ae2a44191188cde1dc4a1bbb0134d775f0dc4126.tar.gz frameworks_base-ae2a44191188cde1dc4a1bbb0134d775f0dc4126.tar.bz2 |
am 4567847d: Add "canDial" check.
* commit '4567847d461afac08a80518637a0e48eff3c5247':
Add "canDial" check.
Diffstat (limited to 'telephony/java/com/android')
-rw-r--r-- | telephony/java/com/android/internal/telephony/CallManager.java | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/telephony/java/com/android/internal/telephony/CallManager.java b/telephony/java/com/android/internal/telephony/CallManager.java index d74a547..a8dd9c2 100644 --- a/telephony/java/com/android/internal/telephony/CallManager.java +++ b/telephony/java/com/android/internal/telephony/CallManager.java @@ -695,6 +695,10 @@ public final class CallManager { Log.d(LOG_TAG, this.toString()); } + if (!canDial(phone)) { + throw new CallStateException("cannot dial in current state"); + } + if ( hasActiveFgCall() ) { Phone activePhone = getActiveFgCall().getPhone(); boolean hasBgCall = !(activePhone.getBackgroundCall().isIdle()); @@ -748,6 +752,32 @@ public final class CallManager { } /** + * Phone can make a call only if ALL of the following are true: + * - Phone is not powered off + * - There's no incoming or waiting call + * - There's available call slot in either foreground or background + * - The foreground call is ACTIVE or IDLE or DISCONNECTED. + * (We mainly need to make sure it *isn't* DIALING or ALERTING.) + * @param phone + * @return true if the phone can make a new call + */ + private boolean canDial(Phone phone) { + int serviceState = phone.getServiceState().getState(); + boolean hasRingingCall = hasActiveRingingCall(); + boolean hasActiveCall = hasActiveFgCall(); + boolean hasHoldingCall = hasActiveBgCall(); + boolean allLinesTaken = hasActiveCall && hasHoldingCall; + Call.State fgCallState = getActiveFgCallState(); + + return (serviceState != ServiceState.STATE_POWER_OFF + && !hasRingingCall + && !allLinesTaken + && ((fgCallState == Call.State.ACTIVE) + || (fgCallState == Call.State.IDLE) + || (fgCallState == Call.State.DISCONNECTED))); + } + + /** * Whether or not the phone can do explicit call transfer in the current * phone state--that is, one call holding and one call active. * @return true if the phone can do explicit call transfer; false otherwise. |