Remove "ForSlot" from ImsManager instance methods

Adding "ForSlot" to ImsManager instance methods
was redundant and does not yield a clean API.

This change removes "ForSlot" from the methods.

Bug: 65063634
Test: Manual
Merged-In: Ida63b5c375df7af67bd3f7c5763d04f11fce92ea
Change-Id: Ida63b5c375df7af67bd3f7c5763d04f11fce92ea
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 8e25086..a77abcd 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -50,7 +50,6 @@
 import com.android.ims.internal.IImsServiceController;
 import com.android.ims.internal.IImsUt;
 import com.android.ims.internal.ImsCallSession;
-import com.android.ims.internal.IImsConfig;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.ExponentialBackoff;
 
@@ -60,7 +59,6 @@
 import java.util.HashMap;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.HashSet;
-import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -270,29 +268,25 @@
      * Returns the user configuration of Enhanced 4G LTE Mode setting.
      *
      * @deprecated Doesn't support MSIM devices. Use
-     * {@link #isEnhanced4gLteModeSettingEnabledByUserForSlot} instead.
+     * {@link #isEnhanced4gLteModeSettingEnabledByUser()} instead.
      */
     public static boolean isEnhanced4gLteModeSettingEnabledByUser(Context context) {
-        // If user can't edit Enhanced 4G LTE Mode, it assumes Enhanced 4G LTE Mode is always true.
-        // If user changes SIM from editable mode to uneditable mode, need to return true.
-        if (!getBooleanCarrierConfig(context,
-                    CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL)) {
-            return true;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isEnhanced4gLteModeSettingEnabledByUser();
         }
-        int enabled = android.provider.Settings.Global.getInt(
-                context.getContentResolver(),
-                android.provider.Settings.Global.ENHANCED_4G_MODE_ENABLED,
-                ImsConfig.FeatureValueConstants.ON);
-        return (enabled == 1) ? true : false;
+        loge("isEnhanced4gLteModeSettingEnabledByUser: ImsManager null, returning default value.");
+        return false;
     }
 
     /**
      * Returns the user configuration of Enhanced 4G LTE Mode setting for slot.
      */
-    public boolean isEnhanced4gLteModeSettingEnabledByUserForSlot() {
+    public boolean isEnhanced4gLteModeSettingEnabledByUser() {
         // If user can't edit Enhanced 4G LTE Mode, it assumes Enhanced 4G LTE Mode is always true.
         // If user changes SIM from editable mode to uneditable mode, need to return true.
-        if (!getBooleanCarrierConfigForSlot(
+        if (!getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL)) {
             return true;
         }
@@ -306,26 +300,16 @@
     /**
      * Change persistent Enhanced 4G LTE Mode setting.
      *
-     * @deprecated Doesn't support MSIM devices. Use {@link #setEnhanced4gLteModeSettingForSlot}
+     * @deprecated Doesn't support MSIM devices. Use {@link #setEnhanced4gLteModeSetting(boolean)}
      * instead.
      */
     public static void setEnhanced4gLteModeSetting(Context context, boolean enabled) {
-        int value = enabled ? 1 : 0;
-        android.provider.Settings.Global.putInt(
-                context.getContentResolver(),
-                android.provider.Settings.Global.ENHANCED_4G_MODE_ENABLED, value);
-
-        if (isNonTtyOrTtyOnVolteEnabled(context)) {
-            ImsManager imsManager = ImsManager.getInstance(context,
-                    SubscriptionManager.getDefaultVoicePhoneId());
-            if (imsManager != null) {
-                try {
-                    imsManager.setAdvanced4GMode(enabled);
-                } catch (ImsException ie) {
-                    // do nothing
-                }
-            }
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            mgr.setEnhanced4gLteModeSetting(enabled);
         }
+        loge("setEnhanced4gLteModeSetting: ImsManager null, value not set.");
     }
 
     /**
@@ -334,9 +318,9 @@
      * always set the setting to true.
      *
      */
-    public void setEnhanced4gLteModeSettingForSlot(boolean enabled) {
+    public void setEnhanced4gLteModeSetting(boolean enabled) {
         // If false, we must always keep advanced 4G mode set to true (1).
-        int value = getBooleanCarrierConfigForSlot(
+        int value = getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL) ? (enabled ? 1: 0) : 1;
 
         try {
@@ -352,7 +336,7 @@
 
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.ENHANCED_4G_MODE_ENABLED, value);
-        if (isNonTtyOrTtyOnVolteEnabledForSlot()) {
+        if (isNonTtyOrTtyOnVolteEnabled()) {
             try {
                 setAdvanced4GMode(enabled);
             } catch (ImsException ie) {
@@ -365,15 +349,29 @@
      * Indicates whether the call is non-TTY or if TTY - whether TTY on VoLTE is
      * supported.
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isNonTtyOrTtyOnVolteEnabledForSlot} instead.
+     * {@link #isNonTtyOrTtyOnVolteEnabled()} instead.
      */
     public static boolean isNonTtyOrTtyOnVolteEnabled(Context context) {
-        if (getBooleanCarrierConfig(context,
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isNonTtyOrTtyOnVolteEnabled();
+        }
+        loge("isNonTtyOrTtyOnVolteEnabled: ImsManager null, returning default value.");
+        return false;
+    }
+
+    /**
+     * Indicates whether the call is non-TTY or if TTY - whether TTY on VoLTE is
+     * supported on a per slot basis.
+     */
+    public boolean isNonTtyOrTtyOnVolteEnabled() {
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL)) {
             return true;
         }
 
-        TelecomManager tm = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
+        TelecomManager tm = (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
         if (tm == null) {
             Log.w(TAG, "isNonTtyOrTtyOnVolteEnabled: telecom not available");
             return true;
@@ -382,46 +380,25 @@
     }
 
     /**
-     * Indicates whether the call is non-TTY or if TTY - whether TTY on VoLTE is
-     * supported on a per slot basis.
-     */
-    public boolean isNonTtyOrTtyOnVolteEnabledForSlot() {
-        if (getBooleanCarrierConfigForSlot(
-                CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL)) {
-            return true;
-        }
-
-        TelecomManager tm = (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
-        if (tm == null) {
-            Log.w(TAG, "isNonTtyOrTtyOnVolteEnabledForSlot: telecom not available");
-            return true;
-        }
-        return tm.getCurrentTtyMode() == TelecomManager.TTY_MODE_OFF;
-    }
-
-    /**
      * Returns a platform configuration for VoLTE which may override the user setting.
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isVolteEnabledByPlatformForSlot()} instead.
+     * {@link #isVolteEnabledByPlatform()} instead.
      */
     public static boolean isVolteEnabledByPlatform(Context context) {
-        if (SystemProperties.getInt(PROPERTY_DBG_VOLTE_AVAIL_OVERRIDE,
-                PROPERTY_DBG_VOLTE_AVAIL_OVERRIDE_DEFAULT) == 1) {
-            return true;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isVolteEnabledByPlatform();
         }
-
-        return context.getResources().getBoolean(
-                com.android.internal.R.bool.config_device_volte_available)
-                && getBooleanCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL)
-                && isGbaValid(context);
+        loge("isVolteEnabledByPlatform: ImsManager null, returning default value.");
+        return false;
     }
 
     /**
      * Returns a platform configuration for VoLTE which may override the user setting on a per Slot
      * basis.
      */
-    public boolean isVolteEnabledByPlatformForSlot() {
+    public boolean isVolteEnabledByPlatform() {
         if (SystemProperties.getInt(PROPERTY_DBG_VOLTE_AVAIL_OVERRIDE,
                 PROPERTY_DBG_VOLTE_AVAIL_OVERRIDE_DEFAULT) == 1) {
             return true;
@@ -429,35 +406,32 @@
 
         return mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_device_volte_available)
-                && getBooleanCarrierConfigForSlot(
+                && getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL)
-                && isGbaValidForSlot();
+                && isGbaValid();
     }
 
     /**
      * Indicates whether VoLTE is provisioned on device.
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isVolteProvisionedOnDeviceForSlot()} instead.
+     * {@link #isVolteProvisionedOnDevice()} instead.
      */
     public static boolean isVolteProvisionedOnDevice(Context context) {
-        if (getBooleanCarrierConfig(context,
-                    CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
-            ImsManager mgr = ImsManager.getInstance(context,
-                    SubscriptionManager.getDefaultVoicePhoneId());
-            if (mgr != null) {
-                return mgr.isVolteProvisioned();
-            }
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isVolteProvisionedOnDevice();
         }
-
+        loge("isVolteProvisionedOnDevice: ImsManager null, returning default value.");
         return true;
     }
 
     /**
      * Indicates whether VoLTE is provisioned on this slot.
      */
-    public boolean isVolteProvisionedOnDeviceForSlot() {
-        if (getBooleanCarrierConfigForSlot(
+    public boolean isVolteProvisionedOnDevice() {
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
             return isVolteProvisioned();
         }
@@ -472,25 +446,15 @@
      * provisioned on device, this method returns false.
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isWfcProvisionedOnDeviceForSlot()} instead.
+     * {@link #isWfcProvisionedOnDevice()} instead.
      */
     public static boolean isWfcProvisionedOnDevice(Context context) {
-        if (getBooleanCarrierConfig(context,
-                CarrierConfigManager.KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL)) {
-            if (!isVolteProvisionedOnDevice(context)) {
-                return false;
-            }
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isWfcProvisionedOnDevice();
         }
-
-        if (getBooleanCarrierConfig(context,
-                CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
-            ImsManager mgr = ImsManager.getInstance(context,
-                    SubscriptionManager.getDefaultVoicePhoneId());
-            if (mgr != null) {
-                return mgr.isWfcProvisioned();
-            }
-        }
-
+        loge("isWfcProvisionedOnDevice: ImsManager null, returning default value.");
         return true;
     }
 
@@ -500,15 +464,15 @@
      * When CarrierConfig KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL is true, and VoLTE is not
      * provisioned on device, this method returns false.
      */
-    public boolean isWfcProvisionedOnDeviceForSlot() {
-        if (getBooleanCarrierConfigForSlot(
+    public boolean isWfcProvisionedOnDevice() {
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL)) {
-            if (!isVolteProvisionedOnDeviceForSlot()) {
+            if (!isVolteProvisionedOnDevice()) {
                 return false;
             }
         }
 
-        if (getBooleanCarrierConfigForSlot(
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
             return isWfcProvisioned();
         }
@@ -520,26 +484,23 @@
      * Indicates whether VT is provisioned on device
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isVtProvisionedOnDeviceForSlot()} instead.
+     * {@link #isVtProvisionedOnDevice()} instead.
      */
     public static boolean isVtProvisionedOnDevice(Context context) {
-        if (getBooleanCarrierConfig(context,
-                CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
-            ImsManager mgr = ImsManager.getInstance(context,
-                    SubscriptionManager.getDefaultVoicePhoneId());
-            if (mgr != null) {
-                return mgr.isVtProvisioned();
-            }
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isVtProvisionedOnDevice();
         }
-
+        loge("isVtProvisionedOnDevice: ImsManager null, returning default value.");
         return true;
     }
 
     /**
      * Indicates whether VT is provisioned on slot.
      */
-    public boolean isVtProvisionedOnDeviceForSlot() {
-        if (getBooleanCarrierConfigForSlot(
+    public boolean isVtProvisionedOnDevice() {
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
             return isVtProvisioned();
         }
@@ -554,20 +515,16 @@
      * which must be done correctly).
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isVtEnabledByPlatformForSlot()} instead.
+     * {@link #isVtEnabledByPlatform()} instead.
      */
     public static boolean isVtEnabledByPlatform(Context context) {
-        if (SystemProperties.getInt(PROPERTY_DBG_VT_AVAIL_OVERRIDE,
-                PROPERTY_DBG_VT_AVAIL_OVERRIDE_DEFAULT) == 1) {
-            return true;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isVtEnabledByPlatform();
         }
-
-        return
-                context.getResources().getBoolean(
-                        com.android.internal.R.bool.config_device_vt_available) &&
-                getBooleanCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_VT_AVAILABLE_BOOL) &&
-                isGbaValid(context);
+        loge("isVtEnabledByPlatform: ImsManager null, returning default value.");
+        return false;
     }
 
     /**
@@ -576,7 +533,7 @@
      * Note: VT presumes that VoLTE is enabled (these are configuration settings
      * which must be done correctly).
      */
-    public boolean isVtEnabledByPlatformForSlot() {
+    public boolean isVtEnabledByPlatform() {
         if (SystemProperties.getInt(PROPERTY_DBG_VT_AVAIL_OVERRIDE,
                 PROPERTY_DBG_VT_AVAIL_OVERRIDE_DEFAULT) == 1) {
             return true;
@@ -584,27 +541,30 @@
 
         return mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_device_vt_available) &&
-                getBooleanCarrierConfigForSlot(
+                getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_VT_AVAILABLE_BOOL) &&
-                isGbaValidForSlot();
+                isGbaValid();
     }
 
     /**
      * Returns the user configuration of VT setting
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isVtEnabledByUserForSlot()} instead.
+     * {@link #isVtEnabledByUser()} instead.
      */
     public static boolean isVtEnabledByUser(Context context) {
-        int enabled = android.provider.Settings.Global.getInt(context.getContentResolver(),
-                android.provider.Settings.Global.VT_IMS_ENABLED,
-                ImsConfig.FeatureValueConstants.ON);
-        return (enabled == 1) ? true : false;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isVtEnabledByUser();
+        }
+        loge("isVtEnabledByUser: ImsManager null, returning default value.");
+        return false;
     }
 
     /**
      * Returns the user configuration of VT setting per slot.
      */
-    public boolean isVtEnabledByUserForSlot() {
+    public boolean isVtEnabledByUser() {
         int enabled = android.provider.Settings.Global.getInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.VT_IMS_ENABLED,
                 ImsConfig.FeatureValueConstants.ON);
@@ -614,44 +574,21 @@
     /**
      * Change persistent VT enabled setting
      *
-     * @deprecated Does not support MSIM devices. Please use
-     * {@link #setVtSettingForSlot} instead.
+     * @deprecated Does not support MSIM devices. Please use {@link #setVtSetting(boolean)} instead.
      */
     public static void setVtSetting(Context context, boolean enabled) {
-        int value = enabled ? 1 : 0;
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.VT_IMS_ENABLED, value);
-
-        ImsManager imsManager = ImsManager.getInstance(context,
+        ImsManager mgr = ImsManager.getInstance(context,
                 SubscriptionManager.getDefaultVoicePhoneId());
-        if (imsManager != null) {
-            try {
-                ImsConfig config = imsManager.getConfigInterface();
-                config.setFeatureValue(ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE,
-                        TelephonyManager.NETWORK_TYPE_LTE,
-                        enabled ? ImsConfig.FeatureValueConstants.ON
-                                : ImsConfig.FeatureValueConstants.OFF,
-                        imsManager.mImsConfigListener);
-
-                if (enabled) {
-                    log("setVtSetting() : turnOnIms");
-                    imsManager.turnOnIms();
-                } else if (isTurnOffImsAllowedByPlatform(context)
-                        && (!isVolteEnabledByPlatform(context)
-                        || !isEnhanced4gLteModeSettingEnabledByUser(context))) {
-                    log("setVtSetting() : imsServiceAllowTurnOff -> turnOffIms");
-                    imsManager.turnOffIms();
-                }
-            } catch (ImsException e) {
-                loge("setVtSetting(): ", e);
-            }
+        if (mgr != null) {
+            mgr.setVtSetting(enabled);
         }
+        loge("setVtSetting: ImsManager null, can not set value.");
     }
 
     /**
      * Change persistent VT enabled setting for slot.
      */
-    public void setVtSettingForSlot(boolean enabled) {
+    public void setVtSetting(boolean enabled) {
         int value = enabled ? 1 : 0;
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.VT_IMS_ENABLED, value);
@@ -665,16 +602,16 @@
                     mImsConfigListener);
 
             if (enabled) {
-                log("setVtSettingForSlot() : turnOnIms");
+                log("setVtSetting(b) : turnOnIms");
                 turnOnIms();
-            } else if (isVolteEnabledByPlatformForSlot()
-                    && (!isVolteEnabledByPlatformForSlot()
-                    || !isEnhanced4gLteModeSettingEnabledByUserForSlot())) {
-                log("setVtSettingForSlot() : imsServiceAllowTurnOff -> turnOffIms");
+            } else if (isVolteEnabledByPlatform()
+                    && (!isVolteEnabledByPlatform()
+                    || !isEnhanced4gLteModeSettingEnabledByUser())) {
+                log("setVtSetting(b) : imsServiceAllowTurnOff -> turnOffIms");
                 turnOffIms();
             }
         } catch (ImsException e) {
-            loge("setVtSettingForSlot(): ", e);
+            loge("setVtSetting(b): ", e);
         }
     }
 
@@ -683,27 +620,28 @@
      * The platform property may override the carrier config.
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isTurnOffImsAllowedByPlatformForSlot} instead.
+     * {@link #isTurnOffImsAllowedByPlatform()} instead.
      */
     private static boolean isTurnOffImsAllowedByPlatform(Context context) {
-        if (SystemProperties.getInt(PROPERTY_DBG_ALLOW_IMS_OFF_OVERRIDE,
-                PROPERTY_DBG_ALLOW_IMS_OFF_OVERRIDE_DEFAULT) == 1) {
-            return true;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isTurnOffImsAllowedByPlatform();
         }
-        return getBooleanCarrierConfig(context,
-                CarrierConfigManager.KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL);
+        loge("isTurnOffImsAllowedByPlatform: ImsManager null, returning default value.");
+        return true;
     }
 
     /**
      * Returns whether turning off ims is allowed by platform.
      * The platform property may override the carrier config.
      */
-    private boolean isTurnOffImsAllowedByPlatformForSlot() {
+    private boolean isTurnOffImsAllowedByPlatform() {
         if (SystemProperties.getInt(PROPERTY_DBG_ALLOW_IMS_OFF_OVERRIDE,
                 PROPERTY_DBG_ALLOW_IMS_OFF_OVERRIDE_DEFAULT) == 1) {
             return true;
         }
-        return getBooleanCarrierConfigForSlot(
+        return getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL);
     }
 
@@ -711,24 +649,25 @@
      * Returns the user configuration of WFC setting
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isTurnOffImsAllowedByPlatformForSlot} instead.
+     * {@link #isWfcEnabledByUser()} instead.
      */
     public static boolean isWfcEnabledByUser(Context context) {
-        int enabled = android.provider.Settings.Global.getInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_ENABLED,
-                getBooleanCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL) ?
-                        ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
-        return (enabled == 1) ? true : false;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isWfcEnabledByUser();
+        }
+        loge("isWfcEnabledByUser: ImsManager null, returning default value.");
+        return true;
     }
 
     /**
      * Returns the user configuration of WFC setting for slot.
      */
-    public boolean isWfcEnabledByUserForSlot() {
+    public boolean isWfcEnabledByUser() {
         int enabled = android.provider.Settings.Global.getInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_ENABLED,
-                getBooleanCarrierConfigForSlot(
+                getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL) ?
                         ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
         return enabled == 1;
@@ -737,56 +676,26 @@
     /**
      * Change persistent WFC enabled setting.
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #setWfcSettingForSlot} instead.
+     * {@link #setWfcSetting} instead.
      */
     public static void setWfcSetting(Context context, boolean enabled) {
-        int value = enabled ? 1 : 0;
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_ENABLED, value);
-
-        ImsManager imsManager = ImsManager.getInstance(context,
+        ImsManager mgr = ImsManager.getInstance(context,
                 SubscriptionManager.getDefaultVoicePhoneId());
-        if (imsManager != null) {
-            try {
-                ImsConfig config = imsManager.getConfigInterface();
-                config.setFeatureValue(ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_WIFI,
-                        TelephonyManager.NETWORK_TYPE_IWLAN,
-                        enabled ? ImsConfig.FeatureValueConstants.ON
-                                : ImsConfig.FeatureValueConstants.OFF,
-                        imsManager.mImsConfigListener);
-
-                if (enabled) {
-                    log("setWfcSetting() : turnOnIms");
-                    imsManager.turnOnIms();
-                } else if (isTurnOffImsAllowedByPlatform(context)
-                        && (!isVolteEnabledByPlatform(context)
-                        || !isEnhanced4gLteModeSettingEnabledByUser(context))) {
-                    log("setWfcSetting() : imsServiceAllowTurnOff -> turnOffIms");
-                    imsManager.turnOffIms();
-                }
-
-                TelephonyManager tm = (TelephonyManager) context
-                        .getSystemService(Context.TELEPHONY_SERVICE);
-                setWfcModeInternal(context, enabled
-                        // Choose wfc mode per current roaming preference
-                        ? getWfcMode(context, tm.isNetworkRoaming())
-                        // Force IMS to register over LTE when turning off WFC
-                        : ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED);
-            } catch (ImsException e) {
-                loge("setWfcSetting(): ", e);
-            }
+        if (mgr != null) {
+            mgr.setWfcSetting(enabled);
         }
+        loge("setWfcSetting: ImsManager null, can not set value.");
     }
 
     /**
      * Change persistent WFC enabled setting for slot.
      */
-    public void setWfcSettingForSlot(boolean enabled) {
+    public void setWfcSetting(boolean enabled) {
         int value = enabled ? 1 : 0;
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_ENABLED, value);
 
-        setWfcNonPersistentForSlot(enabled, getWfcModeForSlot());
+        setWfcNonPersistent(enabled, getWfcMode());
     }
 
     /**
@@ -794,7 +703,7 @@
      *
      * @param wfcMode The WFC preference if WFC is enabled
      */
-    public void setWfcNonPersistentForSlot(boolean enabled, int wfcMode) {
+    public void setWfcNonPersistent(boolean enabled, int wfcMode) {
         int imsFeatureValue =
                 enabled ? ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF;
         // Force IMS to register over LTE when turning off WFC
@@ -809,40 +718,42 @@
                     mImsConfigListener);
 
             if (enabled) {
-                log("setWfcSettingForSlot() : turnOnIms");
+                log("setWfcSetting() : turnOnIms");
                 turnOnIms();
-            } else if (isTurnOffImsAllowedByPlatformForSlot()
-                    && (!isVolteEnabledByPlatformForSlot()
-                    || !isEnhanced4gLteModeSettingEnabledByUserForSlot())) {
-                log("setWfcSettingForSlot() : imsServiceAllowTurnOff -> turnOffIms");
+            } else if (isTurnOffImsAllowedByPlatform()
+                    && (!isVolteEnabledByPlatform()
+                    || !isEnhanced4gLteModeSettingEnabledByUser())) {
+                log("setWfcSetting() : imsServiceAllowTurnOff -> turnOffIms");
                 turnOffIms();
             }
 
-            setWfcModeInternalForSlot(imsWfcModeFeatureValue);
+            setWfcModeInternal(imsWfcModeFeatureValue);
         } catch (ImsException e) {
-            loge("setWfcSettingForSlot(): ", e);
+            loge("setWfcSetting(): ", e);
         }
     }
 
     /**
      * Returns the user configuration of WFC preference setting.
      *
-     * @deprecated Doesn't support MSIM devices. Use {@link #getWfcModeForSlot} instead.
+     * @deprecated Doesn't support MSIM devices. Use {@link #getWfcMode()} instead.
      */
     public static int getWfcMode(Context context) {
-        int setting = android.provider.Settings.Global.getInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_MODE, getIntCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
-        if (DBG) log("getWfcMode - setting=" + setting);
-        return setting;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.getWfcMode();
+        }
+        loge("getWfcMode: ImsManager null, returning default value.");
+        return ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY;
     }
 
     /**
      * Returns the user configuration of WFC preference setting
      */
-    public int getWfcModeForSlot() {
+    public int getWfcMode() {
         int setting = android.provider.Settings.Global.getInt(mContext.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_MODE, getIntCarrierConfigForSlot(
+                android.provider.Settings.Global.WFC_IMS_MODE, getIntCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
         if (DBG) log("getWfcMode - setting=" + setting);
         return setting;
@@ -851,25 +762,26 @@
     /**
      * Change persistent WFC preference setting.
      *
-     * @deprecated Doesn't support MSIM devices. Use {@link #setWfcModeForSlot} instead.
+     * @deprecated Doesn't support MSIM devices. Use {@link #setWfcMode(int)} instead.
      */
     public static void setWfcMode(Context context, int wfcMode) {
-        if (DBG) log("setWfcMode - setting=" + wfcMode);
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_MODE, wfcMode);
-
-        setWfcModeInternal(context, wfcMode);
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            mgr.setWfcMode(wfcMode);
+        }
+        loge("setWfcMode: ImsManager null, can not set value.");
     }
 
     /**
      * Change persistent WFC preference setting for slot.
      */
-    public void setWfcModeForSlot(int wfcMode) {
-        if (DBG) log("setWfcModeForSlot - setting=" + wfcMode);
+    public void setWfcMode(int wfcMode) {
+        if (DBG) log("setWfcMode(i) - setting=" + wfcMode);
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_MODE, wfcMode);
 
-        setWfcModeInternalForSlot(wfcMode);
+        setWfcModeInternal(wfcMode);
     }
 
     /**
@@ -877,9 +789,8 @@
      */
     private void updateDefaultWfcMode() {
         if (DBG) log("updateDefaultWfcMode");
-        if (!getBooleanCarrierConfigForSlot(
-                CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
-            setWfcModeForSlot(getIntCarrierConfigForSlot(
+        if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
+            setWfcMode(getIntCarrierConfig(
                     CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
         }
     }
@@ -889,23 +800,16 @@
      *
      * @param roaming {@code false} for home network setting, {@code true} for roaming  setting
      *
-     * @deprecated Doesn't support MSIM devices. Use {@link #getWfcModeForSlot} instead.
+     * @deprecated Doesn't support MSIM devices. Use {@link #getWfcMode(boolean)} instead.
      */
     public static int getWfcMode(Context context, boolean roaming) {
-        int setting = 0;
-        if (!roaming) {
-            setting = android.provider.Settings.Global.getInt(context.getContentResolver(),
-                    android.provider.Settings.Global.WFC_IMS_MODE, getIntCarrierConfig(context,
-                            CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
-            if (DBG) log("getWfcMode - setting=" + setting);
-        } else {
-            setting = android.provider.Settings.Global.getInt(context.getContentResolver(),
-                    android.provider.Settings.Global.WFC_IMS_ROAMING_MODE,
-                    getIntCarrierConfig(context,
-                            CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT));
-            if (DBG) log("getWfcMode (roaming) - setting=" + setting);
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.getWfcMode(roaming);
         }
-        return setting;
+        loge("getWfcMode: ImsManager null, returning default value.");
+        return ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY;
     }
 
     /**
@@ -913,19 +817,19 @@
      *
      * @param roaming {@code false} for home network setting, {@code true} for roaming  setting
      */
-    public int getWfcModeForSlot(boolean roaming) {
+    public int getWfcMode(boolean roaming) {
         int setting = 0;
         if (!roaming) {
             setting = android.provider.Settings.Global.getInt(mContext.getContentResolver(),
-                    android.provider.Settings.Global.WFC_IMS_MODE, getIntCarrierConfigForSlot(
+                    android.provider.Settings.Global.WFC_IMS_MODE, getIntCarrierConfig(
                             CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
-            if (DBG) log("getWfcModeForSlot - setting=" + setting);
+            if (DBG) log("getWfcMode - setting=" + setting);
         } else {
             setting = android.provider.Settings.Global.getInt(mContext.getContentResolver(),
                     android.provider.Settings.Global.WFC_IMS_ROAMING_MODE,
-                    getIntCarrierConfigForSlot(
+                    getIntCarrierConfig(
                             CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT));
-            if (DBG) log("getWfcModeForSlot (roaming) - setting=" + setting);
+            if (DBG) log("getWfcMode (roaming) - setting=" + setting);
         }
         return setting;
     }
@@ -935,24 +839,16 @@
      *
      * @param roaming {@code false} for home network setting, {@code true} for roaming setting
      *
-     * @deprecated Doesn't support MSIM devices. Please use {@link #setWfcModeForSlot} instead.
+     * @deprecated Doesn't support MSIM devices. Please use {@link #setWfcMode(int, boolean)}
+     * instead.
      */
     public static void setWfcMode(Context context, int wfcMode, boolean roaming) {
-        if (!roaming) {
-            if (DBG) log("setWfcMode - setting=" + wfcMode);
-            android.provider.Settings.Global.putInt(context.getContentResolver(),
-                    android.provider.Settings.Global.WFC_IMS_MODE, wfcMode);
-        } else {
-            if (DBG) log("setWfcMode (roaming) - setting=" + wfcMode);
-            android.provider.Settings.Global.putInt(context.getContentResolver(),
-                    android.provider.Settings.Global.WFC_IMS_ROAMING_MODE, wfcMode);
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            mgr.setWfcMode(wfcMode, roaming);
         }
-
-        TelephonyManager tm = (TelephonyManager)
-                context.getSystemService(Context.TELEPHONY_SERVICE);
-        if (roaming == tm.isNetworkRoaming()) {
-            setWfcModeInternal(context, wfcMode);
-        }
+        loge("setWfcMode: ImsManager null, can not set value.");
     }
 
     /**
@@ -960,27 +856,32 @@
      *
      * @param roaming {@code false} for home network setting, {@code true} for roaming setting
      */
-    public void setWfcModeForSlot(int wfcMode, boolean roaming) {
+    public void setWfcMode(int wfcMode, boolean roaming) {
         if (!roaming) {
-            if (DBG) log("setWfcModeForSlot - setting=" + wfcMode);
+            if (DBG) log("setWfcMode(i,b) - setting=" + wfcMode);
             android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                     android.provider.Settings.Global.WFC_IMS_MODE, wfcMode);
         } else {
-            if (DBG) log("setWfcModeForSlot (roaming) - setting=" + wfcMode);
+            if (DBG) log("setWfcMode(i,b) (roaming) - setting=" + wfcMode);
             android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                     android.provider.Settings.Global.WFC_IMS_ROAMING_MODE, wfcMode);
         }
 
+
+        TelephonyManager tm = (TelephonyManager)
+                mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        if (roaming == tm.isNetworkRoaming(getSubId())) {
+            setWfcModeInternal(wfcMode);
+        }
+    }
+
+    private int getSubId() {
         int[] subIds = SubscriptionManager.getSubId(mPhoneId);
         int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         if (subIds != null && subIds.length >= 1) {
             subId = subIds[0];
         }
-        TelephonyManager tm = (TelephonyManager)
-                mContext.getSystemService(Context.TELEPHONY_SERVICE);
-        if (roaming == tm.isNetworkRoaming(subId)) {
-            setWfcModeInternalForSlot(wfcMode);
-        }
+        return subId;
     }
 
     private static void setWfcModeInternal(Context context, int wfcMode) {
@@ -1003,7 +904,7 @@
         }
     }
 
-    private void setWfcModeInternalForSlot(int wfcMode) {
+    private void setWfcModeInternal(int wfcMode) {
         final int value = wfcMode;
         Thread thread = new Thread(() -> {
                 try {
@@ -1021,24 +922,25 @@
      * Returns the user configuration of WFC roaming setting
      *
      * @deprecated Does not support MSIM devices. Please use
-     * {@link #isWfcRoamingEnabledByUserForSlot} instead.
+     * {@link #isWfcRoamingEnabledByUser()} instead.
      */
     public static boolean isWfcRoamingEnabledByUser(Context context) {
-        int enabled = android.provider.Settings.Global.getInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_ROAMING_ENABLED,
-                getBooleanCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL) ?
-                        ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
-        return (enabled == 1) ? true : false;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isWfcRoamingEnabledByUser();
+        }
+        loge("isWfcRoamingEnabledByUser: ImsManager null, returning default value.");
+        return false;
     }
 
     /**
      * Returns the user configuration of WFC roaming setting for slot
      */
-    public boolean isWfcRoamingEnabledByUserForSlot() {
+    public boolean isWfcRoamingEnabledByUser() {
         int enabled = android.provider.Settings.Global.getInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_ROAMING_ENABLED,
-                getBooleanCarrierConfigForSlot(
+                getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL) ?
                         ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
         return (enabled == 1);
@@ -1048,22 +950,18 @@
      * Change persistent WFC roaming enabled setting
      */
     public static void setWfcRoamingSetting(Context context, boolean enabled) {
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_ROAMING_ENABLED,
-                enabled ? ImsConfig.FeatureValueConstants.ON
-                        : ImsConfig.FeatureValueConstants.OFF);
-
-        final ImsManager imsManager = ImsManager.getInstance(context,
+        ImsManager mgr = ImsManager.getInstance(context,
                 SubscriptionManager.getDefaultVoicePhoneId());
-        if (imsManager != null) {
-            imsManager.setWfcRoamingSettingInternal(enabled);
+        if (mgr != null) {
+            mgr.setWfcRoamingSetting(enabled);
         }
+        loge("setWfcRoamingSetting: ImsManager null, value not set.");
     }
 
     /**
      * Change persistent WFC roaming enabled setting
      */
-    public void setWfcRoamingSettingForSlot(boolean enabled) {
+    public void setWfcRoamingSetting(boolean enabled) {
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_ROAMING_ENABLED,
                 enabled ? ImsConfig.FeatureValueConstants.ON
@@ -1093,21 +991,17 @@
      * setting. Note: WFC presumes that VoLTE is enabled (these are
      * configuration settings which must be done correctly).
      *
-     * @deprecated Doesn't work for MSIM devices. Use {@link #isWfcEnabledByPlatformForSlot}
+     * @deprecated Doesn't work for MSIM devices. Use {@link #isWfcEnabledByPlatform()}
      * instead.
      */
     public static boolean isWfcEnabledByPlatform(Context context) {
-        if (SystemProperties.getInt(PROPERTY_DBG_WFC_AVAIL_OVERRIDE,
-                PROPERTY_DBG_WFC_AVAIL_OVERRIDE_DEFAULT) == 1) {
-            return true;
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            return mgr.isWfcEnabledByPlatform();
         }
-
-        return
-               context.getResources().getBoolean(
-                       com.android.internal.R.bool.config_device_wfc_ims_available) &&
-               getBooleanCarrierConfig(context,
-                       CarrierConfigManager.KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL) &&
-               isGbaValid(context);
+        loge("isWfcEnabledByPlatform: ImsManager null, returning default value.");
+        return false;
     }
 
     /**
@@ -1115,7 +1009,7 @@
      * setting per slot. Note: WFC presumes that VoLTE is enabled (these are
      * configuration settings which must be done correctly).
      */
-    public boolean isWfcEnabledByPlatformForSlot() {
+    public boolean isWfcEnabledByPlatform() {
         if (SystemProperties.getInt(PROPERTY_DBG_WFC_AVAIL_OVERRIDE,
                 PROPERTY_DBG_WFC_AVAIL_OVERRIDE_DEFAULT) == 1) {
             return true;
@@ -1123,34 +1017,9 @@
 
         return mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_device_wfc_ims_available) &&
-                getBooleanCarrierConfigForSlot(
+                getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL) &&
-                isGbaValidForSlot();
-    }
-
-    /**
-     * If carrier requires that IMS is only available if GBA capable SIM is used,
-     * then this function checks GBA bit in EF IST.
-     *
-     * Format of EF IST is defined in 3GPP TS 31.103 (Section 4.2.7).
-     *
-     * @deprecated Use {@link #isGbaValidForSlot} instead
-     */
-    private static boolean isGbaValid(Context context) {
-        if (getBooleanCarrierConfig(context,
-                CarrierConfigManager.KEY_CARRIER_IMS_GBA_REQUIRED_BOOL)) {
-            final TelephonyManager telephonyManager = TelephonyManager.getDefault();
-            String efIst = telephonyManager.getIsimIst();
-            if (efIst == null) {
-                loge("ISF is NULL");
-                return true;
-            }
-            boolean result = efIst != null && efIst.length() > 1 &&
-                    (0x02 & (byte)efIst.charAt(1)) != 0;
-            if (DBG) log("GBA capable=" + result + ", ISF=" + efIst);
-            return result;
-        }
-        return true;
+                isGbaValid();
     }
 
     /**
@@ -1159,18 +1028,18 @@
      *
      * Format of EF IST is defined in 3GPP TS 31.103 (Section 4.2.7).
      */
-    private boolean isGbaValidForSlot() {
-        if (getBooleanCarrierConfigForSlot(
+    private boolean isGbaValid() {
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_IMS_GBA_REQUIRED_BOOL)) {
-            final TelephonyManager telephonyManager = TelephonyManager.getDefault();
+            final TelephonyManager telephonyManager = new TelephonyManager(mContext, getSubId());
             String efIst = telephonyManager.getIsimIst();
             if (efIst == null) {
-                loge("isGbaValidForSlot - ISF is NULL");
+                loge("isGbaValid - ISF is NULL");
                 return true;
             }
             boolean result = efIst != null && efIst.length() > 1 &&
                     (0x02 & (byte)efIst.charAt(1)) != 0;
-            if (DBG) log("isGbaValidForSlot - GBA capable=" + result + ", ISF=" + efIst);
+            if (DBG) log("isGbaValid - GBA capable=" + result + ", ISF=" + efIst);
             return result;
         }
         return true;
@@ -1269,7 +1138,7 @@
 
     // used internally only, use #updateProvisionedValues instead.
     private void handleUpdateProvisionedValues() {
-        if (getBooleanCarrierConfigForSlot(
+        if (getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL)) {
 
             new AsyncUpdateProvisionedValues().execute();
@@ -1297,50 +1166,15 @@
      * @param phoneId phone id
      * @param force update
      *
-     * @deprecated Doesn't support MSIM devices. Use {@link #updateImsServiceConfigForSlot} instead.
+     * @deprecated Doesn't support MSIM devices. Use {@link #updateImsServiceConfig(boolean)}
+     * instead.
      */
     public static void updateImsServiceConfig(Context context, int phoneId, boolean force) {
-        if (!force) {
-            if (TelephonyManager.getDefault().getSimState() != TelephonyManager.SIM_STATE_READY) {
-                log("updateImsServiceConfig: SIM not ready");
-                // Don't disable IMS if SIM is not ready
-                return;
-            }
+        ImsManager mgr = ImsManager.getInstance(context, phoneId);
+        if (mgr != null) {
+            mgr.updateImsServiceConfig(force);
         }
-
-        final ImsManager imsManager = ImsManager.getInstance(context, phoneId);
-        if (imsManager != null && (!imsManager.mConfigUpdated || force)) {
-            try {
-                imsManager.updateProvisionedValues();
-
-                // TODO: Extend ImsConfig API and set all feature values in single function call.
-
-                // Note: currently the order of updates is set to produce different order of
-                // setFeatureValue() function calls from setAdvanced4GMode(). This is done to
-                // differentiate this code path from vendor code perspective.
-                boolean isImsUsed = imsManager.updateVolteFeatureValue();
-                isImsUsed |= imsManager.updateWfcFeatureAndProvisionedValues();
-                isImsUsed |= imsManager.updateVideoCallFeatureValue();
-
-                if (isImsUsed || !isTurnOffImsAllowedByPlatform(context)) {
-                    // Turn on IMS if it is used.
-                    // Also, if turning off is not allowed for current carrier,
-                    // we need to turn IMS on because it might be turned off before
-                    // phone switched to current carrier.
-                    log("updateImsServiceConfig: turnOnIms");
-                    imsManager.turnOnIms();
-                } else {
-                    // Turn off IMS if it is not used AND turning off is allowed for carrier.
-                    log("updateImsServiceConfig: turnOffIms");
-                    imsManager.turnOffIms();
-                }
-
-                imsManager.mConfigUpdated = true;
-            } catch (ImsException e) {
-                loge("updateImsServiceConfig: ", e);
-                imsManager.mConfigUpdated = false;
-            }
-        }
+        loge("updateImsServiceConfig: ImsManager null, returning without update.");
     }
 
     /**
@@ -1350,10 +1184,11 @@
      * @param phoneId phone id
      * @param force update
      */
-    public void updateImsServiceConfigForSlot(boolean force) {
+    public void updateImsServiceConfig(boolean force) {
         if (!force) {
-            if (TelephonyManager.getDefault().getSimState() != TelephonyManager.SIM_STATE_READY) {
-                log("updateImsServiceConfigForSlot: SIM not ready");
+            TelephonyManager tm = new TelephonyManager(mContext, getSubId());
+            if (tm.getSimState() != TelephonyManager.SIM_STATE_READY) {
+                log("updateImsServiceConfig: SIM not ready");
                 // Don't disable IMS if SIM is not ready
                 return;
             }
@@ -1372,22 +1207,22 @@
                 isImsUsed |= updateWfcFeatureAndProvisionedValues();
                 isImsUsed |= updateVideoCallFeatureValue();
 
-                if (isImsUsed || !isTurnOffImsAllowedByPlatformForSlot()) {
+                if (isImsUsed || !isTurnOffImsAllowedByPlatform()) {
                     // Turn on IMS if it is used.
                     // Also, if turning off is not allowed for current carrier,
                     // we need to turn IMS on because it might be turned off before
                     // phone switched to current carrier.
-                    log("updateImsServiceConfigForSlot: turnOnIms");
+                    log("updateImsServiceConfig: turnOnIms");
                     turnOnIms();
                 } else {
                     // Turn off IMS if it is not used AND turning off is allowed for carrier.
-                    log("updateImsServiceConfigForSlot: turnOffIms");
+                    log("updateImsServiceConfig: turnOffIms");
                     turnOffIms();
                 }
 
                 mConfigUpdated = true;
             } catch (ImsException e) {
-                loge("updateImsServiceConfigForSlot: ", e);
+                loge("updateImsServiceConfig: ", e);
                 mConfigUpdated = false;
             }
         }
@@ -1399,9 +1234,9 @@
      * @throws ImsException
      */
     private boolean updateVolteFeatureValue() throws ImsException {
-        boolean available = isVolteEnabledByPlatformForSlot();
-        boolean enabled = isEnhanced4gLteModeSettingEnabledByUserForSlot();
-        boolean isNonTty = isNonTtyOrTtyOnVolteEnabledForSlot();
+        boolean available = isVolteEnabledByPlatform();
+        boolean enabled = isEnhanced4gLteModeSettingEnabledByUser();
+        boolean isNonTty = isNonTtyOrTtyOnVolteEnabled();
         boolean isFeatureOn = available && enabled && isNonTty;
 
         log("updateVolteFeatureValue: available = " + available
@@ -1425,11 +1260,11 @@
      * @throws ImsException
      */
     private boolean updateVideoCallFeatureValue() throws ImsException {
-        boolean available = isVtEnabledByPlatformForSlot();
-        boolean enabled = isVtEnabledByUserForSlot();
-        boolean isNonTty = isNonTtyOrTtyOnVolteEnabledForSlot();
+        boolean available = isVtEnabledByPlatform();
+        boolean enabled = isVtEnabledByUser();
+        boolean isNonTty = isNonTtyOrTtyOnVolteEnabled();
         boolean isDataEnabled = isDataEnabled();
-        boolean ignoreDataEnabledChanged = getBooleanCarrierConfig(mContext,
+        boolean ignoreDataEnabledChanged = getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS);
 
         boolean isFeatureOn = available && enabled && isNonTty
@@ -1457,12 +1292,13 @@
      * @throws ImsException
      */
     private boolean updateWfcFeatureAndProvisionedValues() throws ImsException {
-        boolean isNetworkRoaming = TelephonyManager.getDefault().isNetworkRoaming();
-        boolean available = isWfcEnabledByPlatformForSlot();
-        boolean enabled = isWfcEnabledByUserForSlot();
+        TelephonyManager tm = new TelephonyManager(mContext, getSubId());
+        boolean isNetworkRoaming = tm.isNetworkRoaming();
+        boolean available = isWfcEnabledByPlatform();
+        boolean enabled = isWfcEnabledByUser();
         updateDefaultWfcMode();
-        int mode = getWfcModeForSlot(isNetworkRoaming);
-        boolean roaming = isWfcRoamingEnabledByUserForSlot();
+        int mode = getWfcMode(isNetworkRoaming);
+        boolean roaming = isWfcRoamingEnabledByUser();
         boolean isFeatureOn = available && enabled;
 
         log("updateWfcFeatureAndProvisionedValues: available = " + available
@@ -1489,7 +1325,7 @@
     }
 
     /**
-     * Do NOT use this directly, instead use {@link #getInstance}.
+     * Do NOT use this directly, instead use {@link #getInstance(Context, int)}.
      */
     @VisibleForTesting
     public ImsManager(Context context, int phoneId) {
@@ -1935,10 +1771,10 @@
      * Set the TTY mode. This is the actual tty mode (varies depending on peripheral status)
      */
     public void setTtyMode(int ttyMode) throws ImsException {
-        if (!getBooleanCarrierConfigForSlot(
+        if (!getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL)) {
             setAdvanced4GMode((ttyMode == TelecomManager.TTY_MODE_OFF) &&
-                    isEnhanced4gLteModeSettingEnabledByUserForSlot());
+                    isEnhanced4gLteModeSettingEnabledByUser());
         }
     }
 
@@ -1991,35 +1827,10 @@
     /**
      * Get the boolean config from carrier config manager.
      *
-     * @param context the context to get carrier service
-     * @param key config key defined in CarrierConfigManager
-     * @return boolean value of corresponding key.
-     *
-     * @deprecated Does not support MSIM devices. Use
-     * {@link #getBooleanCarrierConfigForSlot(Context, String)} instead.
-     */
-    private static boolean getBooleanCarrierConfig(Context context, String key) {
-        CarrierConfigManager configManager = (CarrierConfigManager) context.getSystemService(
-                Context.CARRIER_CONFIG_SERVICE);
-        PersistableBundle b = null;
-        if (configManager != null) {
-            b = configManager.getConfig();
-        }
-        if (b != null) {
-            return b.getBoolean(key);
-        } else {
-            // Return static default defined in CarrierConfigManager.
-            return CarrierConfigManager.getDefaultConfig().getBoolean(key);
-        }
-    }
-
-    /**
-     * Get the boolean config from carrier config manager.
-     *
      * @param key config key defined in CarrierConfigManager
      * @return boolean value of corresponding key.
      */
-    private boolean getBooleanCarrierConfigForSlot(String key) {
+    private boolean getBooleanCarrierConfig(String key) {
         int[] subIds = SubscriptionManager.getSubId(mPhoneId);
         int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         if (subIds != null && subIds.length >= 1) {
@@ -2041,34 +1852,10 @@
     /**
      * Get the int config from carrier config manager.
      *
-     * @param context the context to get carrier service
-     * @param key config key defined in CarrierConfigManager
-     * @return integer value of corresponding key.
-     *
-     * @deprecated Doesn't support MSIM devices. Use {@link #getIntCarrierConfigForSlot} instead.
-     */
-    private static int getIntCarrierConfig(Context context, String key) {
-        CarrierConfigManager configManager = (CarrierConfigManager) context.getSystemService(
-                Context.CARRIER_CONFIG_SERVICE);
-        PersistableBundle b = null;
-        if (configManager != null) {
-            b = configManager.getConfig();
-        }
-        if (b != null) {
-            return b.getInt(key);
-        } else {
-            // Return static default defined in CarrierConfigManager.
-            return CarrierConfigManager.getDefaultConfig().getInt(key);
-        }
-    }
-
-    /**
-     * Get the int config from carrier config manager.
-     *
      * @param key config key defined in CarrierConfigManager
      * @return integer value of corresponding key.
      */
-    private int getIntCarrierConfigForSlot(String key) {
+    private int getIntCarrierConfig(String key) {
         int[] subIds = SubscriptionManager.getSubId(mPhoneId);
         int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         if (subIds != null && subIds.length >= 1) {
@@ -2233,9 +2020,9 @@
     }
 
     private boolean isImsTurnOffAllowed() {
-        return isTurnOffImsAllowedByPlatformForSlot()
-                && (!isWfcEnabledByPlatformForSlot()
-                || !isWfcEnabledByUserForSlot());
+        return isTurnOffImsAllowedByPlatform()
+                && (!isWfcEnabledByPlatform()
+                || !isWfcEnabledByUser());
     }
 
     private void setLteFeatureValues(boolean turnOn) {
@@ -2246,10 +2033,10 @@
                 config.setFeatureValue(ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE,
                         TelephonyManager.NETWORK_TYPE_LTE, turnOn ? 1 : 0, mImsConfigListener);
 
-                if (isVolteEnabledByPlatformForSlot()) {
-                    boolean ignoreDataEnabledChanged = getBooleanCarrierConfig(mContext,
+                if (isVolteEnabledByPlatform()) {
+                    boolean ignoreDataEnabledChanged = getBooleanCarrierConfig(
                             CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS);
-                    boolean enableViLte = turnOn && isVtEnabledByUserForSlot() &&
+                    boolean enableViLte = turnOn && isVtEnabledByUser() &&
                             (ignoreDataEnabledChanged || isDataEnabled());
                     config.setFeatureValue(ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE,
                             TelephonyManager.NETWORK_TYPE_LTE,
@@ -2576,44 +2363,17 @@
     /**
      * Resets ImsManager settings back to factory defaults.
      *
-     * @deprecated Doesn't support MSIM devices. Use {@link #factoryResetSlot()} instead.
+     * @deprecated Doesn't support MSIM devices. Use {@link #factoryReset()} instead.
      *
      * @hide
      */
     public static void factoryReset(Context context) {
-        // Set VoLTE to default
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.ENHANCED_4G_MODE_ENABLED,
-                ImsConfig.FeatureValueConstants.ON);
-
-        // Set VoWiFi to default
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_ENABLED,
-                getBooleanCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL) ?
-                        ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
-
-        // Set VoWiFi mode to default
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_MODE,
-                getIntCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
-
-        // Set VoWiFi roaming to default
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.WFC_IMS_ROAMING_ENABLED,
-                getBooleanCarrierConfig(context,
-                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL) ?
-                        ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
-
-        // Set VT to default
-        android.provider.Settings.Global.putInt(context.getContentResolver(),
-                android.provider.Settings.Global.VT_IMS_ENABLED,
-                ImsConfig.FeatureValueConstants.ON);
-
-        // Push settings to ImsConfig
-        ImsManager.updateImsServiceConfig(context,
-                SubscriptionManager.getDefaultVoicePhoneId(), true);
+        ImsManager mgr = ImsManager.getInstance(context,
+                SubscriptionManager.getDefaultVoicePhoneId());
+        if (mgr != null) {
+            mgr.factoryReset();
+        }
+        loge("factoryReset: ImsManager null.");
     }
 
     /**
@@ -2621,7 +2381,7 @@
      *
      * @hide
      */
-    public void factoryResetSlot() {
+    public void factoryReset() {
         // Set VoLTE to default
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.ENHANCED_4G_MODE_ENABLED,
@@ -2630,20 +2390,20 @@
         // Set VoWiFi to default
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_ENABLED,
-                getBooleanCarrierConfigForSlot(
+                getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL) ?
                         ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
 
         // Set VoWiFi mode to default
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_MODE,
-                getIntCarrierConfigForSlot(
+                getIntCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
 
         // Set VoWiFi roaming to default
         android.provider.Settings.Global.putInt(mContext.getContentResolver(),
                 android.provider.Settings.Global.WFC_IMS_ROAMING_ENABLED,
-                getBooleanCarrierConfigForSlot(
+                getBooleanCarrierConfig(
                         CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL) ?
                         ImsConfig.FeatureValueConstants.ON : ImsConfig.FeatureValueConstants.OFF);
 
@@ -2653,7 +2413,7 @@
                 ImsConfig.FeatureValueConstants.ON);
 
         // Push settings to ImsConfig
-        updateImsServiceConfigForSlot(true);
+        updateImsServiceConfig(true);
     }
 
     private boolean isDataEnabled() {
@@ -2699,27 +2459,27 @@
         pw.println("  mConfigUpdated = " + mConfigUpdated);
         pw.println("  mImsServiceProxy = " + mImsServiceProxy);
         pw.println("  mDataEnabled = " + isDataEnabled());
-        pw.println("  ignoreDataEnabledChanged = " + getBooleanCarrierConfig(mContext,
+        pw.println("  ignoreDataEnabledChanged = " + getBooleanCarrierConfig(
                 CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS));
 
-        pw.println("  isGbaValid = " + isGbaValidForSlot());
+        pw.println("  isGbaValid = " + isGbaValid());
         pw.println("  isImsTurnOffAllowed = " + isImsTurnOffAllowed());
-        pw.println("  isNonTtyOrTtyOnVolteEnabled = " + isNonTtyOrTtyOnVolteEnabledForSlot());
+        pw.println("  isNonTtyOrTtyOnVolteEnabled = " + isNonTtyOrTtyOnVolteEnabled());
 
-        pw.println("  isVolteEnabledByPlatform = " + isVolteEnabledByPlatformForSlot());
-        pw.println("  isVolteProvisionedOnDevice = " + isVolteProvisionedOnDeviceForSlot());
+        pw.println("  isVolteEnabledByPlatform = " + isVolteEnabledByPlatform());
+        pw.println("  isVolteProvisionedOnDevice = " + isVolteProvisionedOnDevice());
         pw.println("  isEnhanced4gLteModeSettingEnabledByUser = " +
-                isEnhanced4gLteModeSettingEnabledByUserForSlot());
-        pw.println("  isVtEnabledByPlatform = " + isVtEnabledByPlatformForSlot());
-        pw.println("  isVtEnabledByUser = " + isVtEnabledByUserForSlot());
+                isEnhanced4gLteModeSettingEnabledByUser());
+        pw.println("  isVtEnabledByPlatform = " + isVtEnabledByPlatform());
+        pw.println("  isVtEnabledByUser = " + isVtEnabledByUser());
 
-        pw.println("  isWfcEnabledByPlatform = " + isWfcEnabledByPlatformForSlot());
-        pw.println("  isWfcEnabledByUser = " + isWfcEnabledByUserForSlot());
-        pw.println("  getWfcMode = " + getWfcModeForSlot());
-        pw.println("  isWfcRoamingEnabledByUser = " + isWfcRoamingEnabledByUserForSlot());
+        pw.println("  isWfcEnabledByPlatform = " + isWfcEnabledByPlatform());
+        pw.println("  isWfcEnabledByUser = " + isWfcEnabledByUser());
+        pw.println("  getWfcMode = " + getWfcMode());
+        pw.println("  isWfcRoamingEnabledByUser = " + isWfcRoamingEnabledByUser());
 
-        pw.println("  isVtProvisionedOnDevice = " + isVtProvisionedOnDeviceForSlot());
-        pw.println("  isWfcProvisionedOnDevice = " + isWfcProvisionedOnDeviceForSlot());
+        pw.println("  isVtProvisionedOnDevice = " + isVtProvisionedOnDevice());
+        pw.println("  isWfcProvisionedOnDevice = " + isWfcProvisionedOnDevice());
         pw.flush();
     }
 }