aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2018-05-01 16:16:47 -0700
committerBrad Ebinger <breadley@google.com>2018-05-30 18:40:13 +0000
commit6e5e8259d056fd9979d11df22ed55bda2081f0ef (patch)
tree0cef56af12d424c8b26bb7e3cd46ead218e7c352
parent2c2f0937758a663122bc3843bb16906458393a5b (diff)
downloadims-6e5e8259d056fd9979d11df22ed55bda2081f0ef.tar.gz
Do not set WFC mode separately when not editable
WFC mode was being set separately when setting is not editable. Moved this behavior to getWfcMode so that only one query is made. Bug: 77831154 Test: Manual Change-Id: I4d2cb555522246959654b8c04bec9c9b73bdc947 Merged-In: I556b1c9f44bbd254f6ad3d9770449aee1886a224
-rw-r--r--src/java/com/android/ims/ImsManager.java80
1 files changed, 33 insertions, 47 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index bcba4fcc..6869d558 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -957,17 +957,6 @@ public class ImsManager {
}
/**
- * Changes the WFC mode to its default value for Carriers with non-editable WFC settings.
- */
- private void updateDefaultWfcMode() {
- if (DBG) log("updateDefaultWfcMode");
- if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
- setWfcMode(getIntCarrierConfig(
- CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
- }
- }
-
- /**
* Returns the user configuration of WFC preference setting
*
* @param roaming {@code false} for home network setting, {@code true} for roaming setting
@@ -991,35 +980,53 @@ public class ImsManager {
* @param roaming {@code false} for home network setting, {@code true} for roaming setting
*/
public int getWfcMode(boolean roaming) {
- int setting = 0;
+ int setting;
if (!roaming) {
- setting = SubscriptionManager.getIntegerSubscriptionProperty(
- getSubId(), SubscriptionManager.WFC_IMS_MODE,
- SUB_PROPERTY_NOT_INITIALIZED, mContext);
-
- // SUB_PROPERTY_NOT_INITIALIZED indicates it's never set in sub db.
- if (setting == SUB_PROPERTY_NOT_INITIALIZED) {
+ // The WFC mode is not editable, return the default setting in the CarrierConfig, not
+ // the user set value.
+ if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
setting = getIntCarrierConfig(
CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT);
+
+ } else {
+ setting = getSettingFromSubscriptionManager(SubscriptionManager.WFC_IMS_MODE,
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT);
}
if (DBG) log("getWfcMode - setting=" + setting);
} else {
- setting = SubscriptionManager.getIntegerSubscriptionProperty(
- getSubId(), SubscriptionManager.WFC_IMS_ROAMING_MODE,
- SUB_PROPERTY_NOT_INITIALIZED, mContext);
-
- // SUB_PROPERTY_NOT_INITIALIZED indicates it's never set in sub db.
- if (setting == SUB_PROPERTY_NOT_INITIALIZED) {
+ // The WFC roaming mode is not editable, return the default setting in the
+ // CarrierConfig, not the user set value.
+ if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
setting = getIntCarrierConfig(
CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT);
- }
+ } else {
+ setting = getSettingFromSubscriptionManager(
+ SubscriptionManager.WFC_IMS_ROAMING_MODE,
+ CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT);
+ }
if (DBG) log("getWfcMode (roaming) - setting=" + setting);
}
return setting;
}
/**
+ * Returns the SubscriptionManager setting for the subSetting string. If it is not set, default
+ * to the default CarrierConfig value for defaultConfigKey.
+ */
+ private int getSettingFromSubscriptionManager(String subSetting, String defaultConfigKey) {
+ int result;
+ result = SubscriptionManager.getIntegerSubscriptionProperty(getSubId(), subSetting,
+ SUB_PROPERTY_NOT_INITIALIZED, mContext);
+
+ // SUB_PROPERTY_NOT_INITIALIZED indicates it's never set in sub db.
+ if (result == SUB_PROPERTY_NOT_INITIALIZED) {
+ result = getIntCarrierConfig(defaultConfigKey);
+ }
+ return result;
+ }
+
+ /**
* Change persistent WFC preference setting
*
* @param roaming {@code false} for home network setting, {@code true} for roaming setting
@@ -1068,26 +1075,6 @@ public class ImsManager {
return subId;
}
- private static void setWfcModeInternal(Context context, int wfcMode) {
- final ImsManager imsManager = ImsManager.getInstance(context,
- SubscriptionManager.getDefaultVoicePhoneId());
- if (imsManager != null) {
- final int value = wfcMode;
- Thread thread = new Thread(new Runnable() {
- public void run() {
- try {
- imsManager.getConfigInterface().setConfig(
- ImsConfig.ConfigConstants.VOICE_OVER_WIFI_MODE,
- value);
- } catch (ImsException e) {
- // do nothing
- }
- }
- });
- thread.start();
- }
- }
-
private void setWfcModeInternal(int wfcMode) {
final int value = wfcMode;
Thread thread = new Thread(() -> {
@@ -1383,7 +1370,6 @@ public class ImsManager {
boolean isNetworkRoaming = tm.isNetworkRoaming();
boolean available = isWfcEnabledByPlatform();
boolean enabled = isWfcEnabledByUser();
- updateDefaultWfcMode();
int mode = getWfcMode(isNetworkRoaming);
boolean roaming = isWfcRoamingEnabledByUser();
boolean isFeatureOn = available && enabled;
@@ -1400,7 +1386,7 @@ public class ImsManager {
mode = ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED;
roaming = false;
}
- setWfcModeInternal(mContext, mode);
+ setWfcModeInternal(mode);
setWfcRoamingSettingInternal(roaming);
return isFeatureOn;