Capability and UI support for merge/swap/addcall
Change-Id: I0d2a9b855028ba2e82e4ffd627389000e3cc1891
diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index dcd11f7..154b155 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -29,6 +29,7 @@
import com.android.internal.telephony.CallManager;
import com.android.internal.telephony.Connection;
+import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyCapabilities;
import com.android.services.telephony.common.Call;
@@ -264,7 +265,10 @@
changed = true;
}
- final int newCapabilities = getCapabilitiesFor(connection);
+ /**
+ * !!! Uses values from connection and call collected above so this part must be last !!!
+ */
+ final int newCapabilities = getCapabilitiesFor(connection, call);
if (call.getCapabilities() != newCapabilities) {
call.setCapabilities(newCapabilities);
changed = true;
@@ -276,14 +280,44 @@
/**
* Returns a mask of capabilities for the connection such as merge, hold, etc.
*/
- private int getCapabilitiesFor(Connection connection) {
+ private int getCapabilitiesFor(Connection connection, Call call) {
+ final boolean callIsActive = (call.getState() == Call.State.ACTIVE);
+ final Phone phone = connection.getCall().getPhone();
+
+ final boolean canHold = TelephonyCapabilities.supportsAnswerAndHold(phone);
+ boolean canAddCall = false;
+ boolean canMergeCall = false;
+ boolean canSwapCall = false;
+
+ // only applies to active calls
+ if (callIsActive) {
+ canAddCall = PhoneUtils.okToAddCall(mCallManager);
+ canMergeCall = PhoneUtils.okToMergeCalls(mCallManager);
+ canSwapCall = PhoneUtils.okToSwapCalls(mCallManager);
+ }
+
+ // special rules section!
+ // CDMA always has Add
+ if (phone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
+ canAddCall = true;
+ } else {
+ // if neither merge nor add is on...then allow add
+ canAddCall |= !(canAddCall || canMergeCall);
+ }
+
int retval = 0x0;
-
- final boolean hold = TelephonyCapabilities.supportsAnswerAndHold(connection.getCall().getPhone());
-
- if (hold) {
+ if (canHold) {
retval |= Capabilities.HOLD;
}
+ if (canAddCall) {
+ retval |= Capabilities.ADD_CALL;
+ }
+ if (canMergeCall) {
+ retval |= Capabilities.MERGE_CALLS;
+ }
+ if (canSwapCall) {
+ retval |= Capabilities.SWAP_CALLS;
+ }
return retval;
}