IMS: No option to merge calls in VoWIFI
- Making changes in ImsUtils to check the WFC
capabilities per slot.
Test: Manual
Bug: 74177709
Change-Id: I97941afb4d05fd7ced0b67e54c1032260f4a0987
diff --git a/src/com/android/phone/ImsUtil.java b/src/com/android/phone/ImsUtil.java
index 4d8ff80..d83d869 100644
--- a/src/com/android/phone/ImsUtil.java
+++ b/src/com/android/phone/ImsUtil.java
@@ -53,11 +53,20 @@
* @return {@code true} if WFC is supported by the platform and has been enabled by the user.
*/
public static boolean isWfcEnabled(Context context) {
- ImsManager imsManager = getDefaultImsManagerInstance(context);
+ return isWfcEnabled(context, SubscriptionManager.getDefaultVoicePhoneId());
+ }
+
+ /**
+ * @return {@code true} if WFC is supported per Slot and has been enabled by the user.
+ */
+ public static boolean isWfcEnabled(Context context, int phoneId) {
+ ImsManager imsManager = ImsManager.getInstance(context, phoneId);
boolean isEnabledByPlatform = imsManager.isWfcEnabledByPlatform();
boolean isEnabledByUser = imsManager.isWfcEnabledByUser();
- if (DBG) Log.d(LOG_TAG, "isWfcEnabled :: isEnabledByPlatform=" + isEnabledByPlatform);
- if (DBG) Log.d(LOG_TAG, "isWfcEnabled :: isEnabledByUser=" + isEnabledByUser);
+ if (DBG) Log.d(LOG_TAG, "isWfcEnabled :: isEnabledByPlatform=" + isEnabledByPlatform
+ + " phoneId=" + phoneId);
+ if (DBG) Log.d(LOG_TAG, "isWfcEnabled :: isEnabledByUser=" + isEnabledByUser
+ + " phoneId=" + phoneId);
return isEnabledByPlatform && isEnabledByUser;
}
@@ -66,10 +75,20 @@
* enabled, this will return {@code false}.
*/
public static boolean isWfcModeWifiOnly(Context context) {
- boolean isWifiOnlyMode = getDefaultImsManagerInstance(context).getWfcMode()
- == ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY;
- if (DBG) Log.d(LOG_TAG, "isWfcModeWifiOnly :: isWifiOnlyMode" + isWifiOnlyMode);
- return isWfcEnabled(context) && isWifiOnlyMode;
+ return isWfcModeWifiOnly(context, SubscriptionManager.getDefaultVoicePhoneId());
+ }
+
+ /**
+ * @return {@code true} if the Slot is configured to use "Wi-Fi only" mode. If WFC is not
+ * enabled, this will return {@code false}.
+ */
+ public static boolean isWfcModeWifiOnly(Context context, int phoneId) {
+ ImsManager imsManager = ImsManager.getInstance(context, phoneId);
+ boolean isWifiOnlyMode =
+ imsManager.getWfcMode() == ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY;
+ if (DBG) Log.d(LOG_TAG, "isWfcModeWifiOnly :: isWifiOnlyMode" + isWifiOnlyMode
+ + " phoneId=" + phoneId);
+ return isWfcEnabled(context, phoneId) && isWifiOnlyMode;
}
/**
@@ -81,9 +100,21 @@
* @return {@code true} if use of WFC should be promoted, {@code false} otherwise.
*/
public static boolean shouldPromoteWfc(Context context) {
+ return shouldPromoteWfc(context, SubscriptionManager.getDefaultVoicePhoneId());
+ }
+
+ /**
+ * When a call cannot be placed, determines if the use of WFC should be promoted, per the
+ * carrier config of the slot. Use of WFC is promoted to the user if the device is
+ * connected to a WIFI network, WFC is disabled but provisioned, and the carrier config
+ * indicates that the features should be promoted.
+ *
+ * @return {@code true} if use of WFC should be promoted, {@code false} otherwise.
+ */
+ public static boolean shouldPromoteWfc(Context context, int phoneId) {
CarrierConfigManager cfgManager = (CarrierConfigManager) context
.getSystemService(Context.CARRIER_CONFIG_SERVICE);
- if (cfgManager == null || !cfgManager.getConfig()
+ if (cfgManager == null || cfgManager.getConfigForSubId(getSubId(phoneId))
.getBoolean(CarrierConfigManager.KEY_CARRIER_PROMOTE_WFC_ON_CALL_FAIL_BOOL)) {
return false;
}
@@ -97,7 +128,8 @@
if (cm != null) {
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.isConnected()) {
- return ni.getType() == ConnectivityManager.TYPE_WIFI && !isWfcEnabled(context);
+ return ni.getType() == ConnectivityManager.TYPE_WIFI && !isWfcEnabled(context,
+ phoneId);
}
}
return false;
@@ -106,4 +138,13 @@
private static ImsManager getDefaultImsManagerInstance(Context context) {
return ImsManager.getInstance(context, SubscriptionManager.getDefaultVoicePhoneId());
}
+
+ private static int getSubId(int phoneId) {
+ final int[] subIds = SubscriptionManager.getSubId(phoneId);
+ int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ if (subIds != null && subIds.length >= 1) {
+ subId = subIds[0];
+ }
+ return subId;
+ }
}