Add carrier config to hide merge button for IMS conference
There is the case that operator's network does not support IMS
conference call although it supports IMS normal call. It sometimes
happens when operator starts up IMS service. In such case, it is
necessary to hide merge button for IMS conference.
Bug: 29430010
Change-Id: Iab8afaab297cd401ddea8ef4bbd6a06edfbcfeb3
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index fbb6433..02cd2c4 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -79,6 +79,7 @@
private boolean mIsVideoPresenceSupported;
private boolean mIsVideoPauseSupported;
private boolean mIsMergeCallSupported;
+ private boolean mIsMergeImsCallSupported;
private boolean mIsVideoConferencingSupported;
private boolean mIsMergeOfWifiCallsAllowedWhenVoWifiOff;
@@ -214,6 +215,7 @@
instantLetteringExtras = getPhoneAccountExtras();
}
mIsMergeCallSupported = isCarrierMergeCallSupported();
+ mIsMergeImsCallSupported = isCarrierMergeImsCallSupported();
mIsVideoConferencingSupported = isCarrierVideoConferencingSupported();
mIsMergeOfWifiCallsAllowedWhenVoWifiOff =
isCarrierMergeOfWifiCallsAllowedWhenVoWifiOff();
@@ -332,6 +334,17 @@
}
/**
+ * Determines from carrier config whether merging IMS calls is supported.
+ *
+ * @return {@code true} if merging IMS calls is supported, {@code false} otherwise.
+ */
+ private boolean isCarrierMergeImsCallSupported() {
+ PersistableBundle b =
+ PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());
+ return b.getBoolean(CarrierConfigManager.KEY_SUPPORT_IMS_CONFERENCE_CALL_BOOL);
+ }
+
+ /**
* Determines from carrier config whether emergency video calls are supported.
*
* @return {@code true} if emergency video calls are allowed, {@code false} otherwise.
@@ -428,6 +441,14 @@
}
/**
+ * Indicates whether this account supports merging IMS calls (i.e. conferencing).
+ * @return {@code true} if the account supports merging IMS calls, {@code false} otherwise.
+ */
+ public boolean isMergeImsCallSupported() {
+ return mIsMergeImsCallSupported;
+ }
+
+ /**
* Indicates whether this account supports video conferencing.
* @return {@code true} if the account supports video conferencing, {@code false} otherwise.
*/
@@ -593,6 +614,22 @@
}
/**
+ * Determines if the {@link AccountEntry} associated with a {@link PhoneAccountHandle} supports
+ * merging IMS calls.
+ *
+ * @param handle The {@link PhoneAccountHandle}.
+ * @return {@code True} if merging IMS calls is supported.
+ */
+ boolean isMergeImsCallSupported(PhoneAccountHandle handle) {
+ for (AccountEntry entry : mAccounts) {
+ if (entry.getPhoneAccountHandle().equals(handle)) {
+ return entry.isMergeImsCallSupported();
+ }
+ }
+ return false;
+ }
+
+ /**
* @return Reference to the {@code TelecomAccountRegistry}'s subscription manager.
*/
SubscriptionManager getSubscriptionManager() {
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 5ae1a26..b5dcba6 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1710,20 +1710,24 @@
.getInstance(getPhone().getContext());
boolean isConferencingSupported = telecomAccountRegistry
.isMergeCallSupported(phoneAccountHandle);
+ boolean isImsConferencingSupported = telecomAccountRegistry
+ .isMergeImsCallSupported(phoneAccountHandle);
mIsCarrierVideoConferencingSupported = telecomAccountRegistry
.isVideoConferencingSupported(phoneAccountHandle);
boolean isMergeOfWifiCallsAllowedWhenVoWifiOff = telecomAccountRegistry
.isMergeOfWifiCallsAllowedWhenVoWifiOff(phoneAccountHandle);
- Log.v(this, "refreshConferenceSupported : isConfSupp=%b, isVidConfSupp=%b, " +
- "isMergeOfWifiAllowed=%b, isWifi=%b, isVoWifiEnabled=%b", isConferencingSupported,
+ Log.v(this, "refreshConferenceSupported : isConfSupp=%b, isImsConfSupp=%b, " +
+ "isVidConfSupp=%b, isMergeOfWifiAllowed=%b, " +
+ "isWifi=%b, isVoWifiEnabled=%b",
+ isConferencingSupported, isImsConferencingSupported,
mIsCarrierVideoConferencingSupported, isMergeOfWifiCallsAllowedWhenVoWifiOff,
isWifi(), isVoWifiEnabled);
boolean isConferenceSupported = true;
if (mTreatAsEmergencyCall) {
isConferenceSupported = false;
Log.d(this, "refreshConferenceSupported = false; emergency call");
- } else if (!isConferencingSupported) {
+ } else if (!isConferencingSupported || isIms && !isImsConferencingSupported) {
isConferenceSupported = false;
Log.d(this, "refreshConferenceSupported = false; carrier doesn't support conf.");
} else if (isVideoCall && !mIsCarrierVideoConferencingSupported) {