Snap for 4793185 from 63ab34e7f5fad0230b48aa2717566f98ac06cbb7 to pi-release

Change-Id: Ia278c7095bbbd9ee5e4d4abb17eba7ad9facfab5
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 67a8553..7b22beb 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -958,17 +958,6 @@
     }
 
     /**
-     * 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
@@ -992,35 +981,53 @@
      * @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
@@ -1069,26 +1076,6 @@
         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(() -> {
@@ -1384,7 +1371,6 @@
         boolean isNetworkRoaming = tm.isNetworkRoaming();
         boolean available = isWfcEnabledByPlatform();
         boolean enabled = isWfcEnabledByUser();
-        updateDefaultWfcMode();
         int mode = getWfcMode(isNetworkRoaming);
         boolean roaming = isWfcRoamingEnabledByUser();
         boolean isFeatureOn = available && enabled;
@@ -1401,7 +1387,7 @@
             mode = ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED;
             roaming = false;
         }
-        setWfcModeInternal(mContext, mode);
+        setWfcModeInternal(mode);
         setWfcRoamingSettingInternal(roaming);
 
         return isFeatureOn;