summaryrefslogtreecommitdiffstats
path: root/telephony/java/com/android
diff options
context:
space:
mode:
authorJohn Wang <johnwang@google.com>2010-12-01 11:10:42 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2010-12-01 11:10:42 -0800
commitae2a44191188cde1dc4a1bbb0134d775f0dc4126 (patch)
treec5de11653f1c03d62080da098aee4e93e2a2c4c5 /telephony/java/com/android
parent869fa653e0880fc1f389eb51524bef5183bf713e (diff)
parent4567847d461afac08a80518637a0e48eff3c5247 (diff)
downloadframeworks_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.java30
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.