Revert "VoLTE provisioned and WFC provisioned don't seem to work at INFO(4636) menu"

This reverts commit 4691cad928e2caf4344b568665bfa2169a2ac1f5.

Reason for revert: b/255708273

Change-Id: Id87df5a5b7fea8c8f4a1783a4aca35b56eb94203
diff --git a/src/com/android/phone/settings/RadioInfo.java b/src/com/android/phone/settings/RadioInfo.java
index d4367ca..2058d2d 100644
--- a/src/com/android/phone/settings/RadioInfo.java
+++ b/src/com/android/phone/settings/RadioInfo.java
@@ -72,13 +72,6 @@
 import android.telephony.TelephonyDisplayInfo;
 import android.telephony.TelephonyManager;
 import android.telephony.data.NetworkSlicingConfig;
-import android.telephony.ims.ImsException;
-import android.telephony.ims.ImsManager;
-import android.telephony.ims.ImsMmTelManager;
-import android.telephony.ims.ImsRcsManager;
-import android.telephony.ims.ProvisioningManager;
-import android.telephony.ims.feature.MmTelFeature;
-import android.telephony.ims.stub.ImsRegistrationImplBase;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Menu;
@@ -99,6 +92,9 @@
 import androidx.appcompat.app.AlertDialog.Builder;
 import androidx.appcompat.app.AppCompatActivity;
 
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
+import com.android.ims.ImsManager;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.euicc.EuiccConnector;
@@ -180,6 +176,18 @@
      */
     private static final int ALWAYS_ON_DSDS_MODE = 1;
 
+    private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
+            ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
+
+    private static final int IMS_VT_PROVISIONED_CONFIG_ID =
+            ImsConfig.ConfigConstants.LVC_SETTING_ENABLED;
+
+    private static final int IMS_WFC_PROVISIONED_CONFIG_ID =
+            ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED;
+
+    private static final int EAB_PROVISIONED_CONFIG_ID =
+            ImsConfig.ConfigConstants.EAB_SETTING_ENABLED;
+
     //Values in must match CELL_INFO_REFRESH_RATES
     private static final String[] CELL_INFO_REFRESH_RATE_LABELS = {
             "Disabled",
@@ -283,7 +291,6 @@
     private TelephonyManager mTelephonyManager;
     private ImsManager mImsManager = null;
     private Phone mPhone = null;
-    private ProvisioningManager mProvisioningManager = null;
 
     private String mPingHostnameResultV4;
     private String mPingHostnameResultV6;
@@ -416,9 +423,8 @@
         mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
 
         // update the phoneId
+        mImsManager = ImsManager.getInstance(getApplicationContext(), phoneIndex);
         mPhone = PhoneFactory.getPhone(phoneIndex);
-        mImsManager = new ImsManager(mPhone.getContext());
-        mProvisioningManager = ProvisioningManager.createForSubscriptionId(mPhone.getSubId());
 
         updateAllFields();
     }
@@ -478,8 +484,7 @@
         mTelephonyManager = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
                 .createForSubscriptionId(mPhone.getSubId());
 
-        mImsManager = new ImsManager(mPhone.getContext());
-        mProvisioningManager = ProvisioningManager.createForSubscriptionId(mPhone.getSubId());
+        mImsManager = ImsManager.getInstance(getApplicationContext(), mPhone.getPhoneId());
 
         sPhoneIndexLabels = getPhoneIndexLabels(mTelephonyManager);
 
@@ -547,7 +552,7 @@
         mImsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
         mEabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
 
-        if (!isImsSupportedOnDevice(mPhone.getContext())) {
+        if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
             mImsVolteProvisionedSwitch.setVisibility(View.GONE);
             mImsVtProvisionedSwitch.setVisibility(View.GONE);
             mImsWfcProvisionedSwitch.setVisibility(View.GONE);
@@ -769,8 +774,7 @@
                 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
         menu.add(1, MENU_ITEM_VIEW_SDN, 0,
                 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
-
-        if (isImsSupportedOnDevice(mPhone.getContext())) {
+        if (ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
             menu.add(1, MENU_ITEM_GET_IMS_STATUS,
                     0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus);
         }
@@ -1498,38 +1502,34 @@
         mRadioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
     }
 
-    private void setImsVolteProvisionedState(boolean state) {
+    void setImsVolteProvisionedState(boolean state) {
         Log.d(TAG, "setImsVolteProvisioned state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE, state);
+        setImsConfigProvisionedState(IMS_VOLTE_PROVISIONED_CONFIG_ID, state);
     }
 
-    private void setImsVtProvisionedState(boolean state) {
+    void setImsVtProvisionedState(boolean state) {
         Log.d(TAG, "setImsVtProvisioned() state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE, state);
+        setImsConfigProvisionedState(IMS_VT_PROVISIONED_CONFIG_ID, state);
     }
 
-    private void setImsWfcProvisionedState(boolean state) {
+    void setImsWfcProvisionedState(boolean state) {
         Log.d(TAG, "setImsWfcProvisioned() state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, state);
+        setImsConfigProvisionedState(IMS_WFC_PROVISIONED_CONFIG_ID, state);
     }
 
-    private void setEabProvisionedState(boolean state) {
+    void setEabProvisionedState(boolean state) {
         Log.d(TAG, "setEabProvisioned() state: " + ((state) ? "on" : "off"));
-        setRcsConfigProvisionedState(ImsRcsManager.CAPABILITY_TYPE_PRESENCE_UCE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE, state);
+        setImsConfigProvisionedState(EAB_PROVISIONED_CONFIG_ID, state);
     }
 
-    private void setImsConfigProvisionedState(int capability, int tech, boolean state) {
-        if (mProvisioningManager != null) {
+    void setImsConfigProvisionedState(int configItem, boolean state) {
+        if (mPhone != null && mImsManager != null) {
             mQueuedWork.execute(new Runnable() {
                 public void run() {
                     try {
-                        mProvisioningManager.setProvisioningStatusForCapability(
-                                capability, tech, state);
-                    } catch (RuntimeException e) {
+                        mImsManager.getConfigInterface().setProvisionedValue(
+                                configItem, state ? 1 : 0);
+                    } catch (ImsException e) {
                         Log.e(TAG, "setImsConfigProvisioned() exception:", e);
                     }
                 }
@@ -1537,71 +1537,6 @@
         }
     }
 
-    private void setRcsConfigProvisionedState(int capability, int tech, boolean state) {
-        if (mProvisioningManager != null) {
-            mQueuedWork.execute(new Runnable() {
-                public void run() {
-                    try {
-                        mProvisioningManager.setRcsProvisioningStatusForCapability(
-                                capability, tech, state);
-                    } catch (RuntimeException e) {
-                        Log.e(TAG, "setRcsConfigProvisioned() exception:", e);
-                    }
-                }
-            });
-        }
-    }
-
-    private boolean isImsVolteProvisioningRequired() {
-        return isImsConfigProvisioningRequired(
-                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
-    }
-
-    private boolean isImsVtProvisioningRequired() {
-        return isImsConfigProvisioningRequired(
-                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
-    }
-
-    private boolean isImsWfcProvisioningRequired() {
-        return isImsConfigProvisioningRequired(
-                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
-    }
-
-    private boolean isEabProvisioningRequired() {
-        return isRcsConfigProvisioningRequired(
-                ImsRcsManager.CAPABILITY_TYPE_PRESENCE_UCE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
-    }
-
-    private boolean isImsConfigProvisioningRequired(int capability, int tech) {
-        if (mProvisioningManager != null) {
-            try {
-                return mProvisioningManager.isProvisioningRequiredForCapability(
-                        capability, tech);
-            } catch (RuntimeException e) {
-                Log.e(TAG, "isImsConfigProvisioningRequired() exception:", e);
-            }
-        }
-
-        return false;
-    }
-
-    private boolean isRcsConfigProvisioningRequired(int capability, int tech) {
-        if (mProvisioningManager != null) {
-            try {
-                return mProvisioningManager.isRcsProvisioningRequiredForCapability(
-                        capability, tech);
-            } catch (RuntimeException e) {
-                Log.e(TAG, "isRcsConfigProvisioningRequired() exception:", e);
-            }
-        }
-
-        return false;
-    }
-
     OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -1621,8 +1556,11 @@
     };
 
     private boolean isImsVolteProvisioned() {
-        return getImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+        if (mImsManager != null) {
+            return mImsManager.isVolteEnabledByPlatform()
+                && mImsManager.isVolteProvisionedOnDevice();
+        }
+        return false;
     }
 
     OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1633,8 +1571,11 @@
     };
 
     private boolean isImsVtProvisioned() {
-        return getImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+        if (mImsManager != null) {
+            return mImsManager.isVtEnabledByPlatform()
+                && mImsManager.isVtProvisionedOnDevice();
+        }
+        return false;
     }
 
     OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1645,8 +1586,11 @@
     };
 
     private boolean isImsWfcProvisioned() {
-        return getImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
+        if (mImsManager != null) {
+            return mImsManager.isWfcEnabledByPlatform()
+                && mImsManager.isWfcProvisionedOnDevice();
+        }
+        return false;
     }
 
     OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1657,8 +1601,7 @@
     };
 
     private boolean isEabProvisioned() {
-        return getRcsConfigProvisionedState(ImsRcsManager.CAPABILITY_TYPE_PRESENCE_UCE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+        return isFeatureProvisioned(EAB_PROVISIONED_CONFIG_ID, false);
     }
 
     OnCheckedChangeListener mEabCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1668,30 +1611,23 @@
         }
     };
 
-    private boolean getImsConfigProvisionedState(int capability, int tech) {
-        if (mProvisioningManager != null) {
+    private boolean isFeatureProvisioned(int featureId, boolean defaultValue) {
+        boolean provisioned = defaultValue;
+        if (mImsManager != null) {
             try {
-                return mProvisioningManager.getProvisioningStatusForCapability(
-                        capability, tech);
-            } catch (RuntimeException e) {
-                Log.e(TAG, "getImsConfigProvisionedState() exception:", e);
+                ImsConfig imsConfig = mImsManager.getConfigInterface();
+                if (imsConfig != null) {
+                    provisioned =
+                            (imsConfig.getProvisionedValue(featureId)
+                                    == ImsConfig.FeatureValueConstants.ON);
+                }
+            } catch (ImsException ex) {
+                Log.e(TAG, "isFeatureProvisioned() exception:", ex);
             }
         }
 
-        return false;
-    }
-
-    private boolean getRcsConfigProvisionedState(int capability, int tech) {
-        if (mProvisioningManager != null) {
-            try {
-                return mProvisioningManager.getRcsProvisioningStatusForCapability(
-                        capability, tech);
-            } catch (RuntimeException e) {
-                Log.e(TAG, "getRcsConfigProvisionedState() exception:", e);
-            }
-        }
-
-        return false;
+        log("isFeatureProvisioned() featureId=" + featureId + " provisioned=" + provisioned);
+        return provisioned;
     }
 
     private boolean isEabEnabledByPlatform() {
@@ -1710,56 +1646,35 @@
     }
 
     private void updateImsProvisionedState() {
-        if (!isImsSupportedOnDevice(mPhone.getContext())) {
+        if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
             return;
         }
-
-        updateServiceEnabledByPlatform();
-
-        updateEabProvisionedSwitch(isEabEnabledByPlatform());
-    }
-
-    private void updateVolteProvisionedSwitch(boolean isEnabledByPlatform) {
-        boolean isProvisioned = isEnabledByPlatform && isImsVolteProvisioned();
-        log("updateImsProvisionedState isProvisioned" + isProvisioned);
-
+        log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
+        //delightful hack to prevent on-checked-changed calls from
+        //actually forcing the ims provisioning to its transient/current value.
         mImsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
-        mImsVolteProvisionedSwitch.setChecked(isProvisioned);
+        mImsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
         mImsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
         mImsVolteProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && isEnabledByPlatform && isImsVolteProvisioningRequired());
-    }
-
-    private void updateVtProvisionedSwitch(boolean isEnabledByPlatform) {
-        boolean isProvisioned = isEnabledByPlatform && isImsVtProvisioned();
-        log("updateVtProvisionedSwitch isProvisioned" + isProvisioned);
+                && mImsManager.isVolteEnabledByPlatform());
 
         mImsVtProvisionedSwitch.setOnCheckedChangeListener(null);
-        mImsVtProvisionedSwitch.setChecked(isProvisioned);
+        mImsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
         mImsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
         mImsVtProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && isEnabledByPlatform && isImsVtProvisioningRequired());
-    }
-
-    private void updateWfcProvisionedSwitch(boolean isEnabledByPlatform) {
-        boolean isProvisioned = isEnabledByPlatform && isImsWfcProvisioned();
-        log("updateWfcProvisionedSwitch isProvisioned" + isProvisioned);
+                && mImsManager.isVtEnabledByPlatform());
 
         mImsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
-        mImsWfcProvisionedSwitch.setChecked(isProvisioned);
+        mImsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
         mImsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
         mImsWfcProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && isEnabledByPlatform && isImsWfcProvisioningRequired());
-    }
-
-    private void updateEabProvisionedSwitch(boolean isEnabledByPlatform) {
-        log("updateEabProvisionedSwitch isEabWfcProvisioned()=" + isEabProvisioned());
+                && mImsManager.isWfcEnabledByPlatform());
 
         mEabProvisionedSwitch.setOnCheckedChangeListener(null);
         mEabProvisionedSwitch.setChecked(isEabProvisioned());
         mEabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
         mEabProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && isEnabledByPlatform && isEabProvisioningRequired());
+                && isEabEnabledByPlatform());
     }
 
     OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
@@ -1998,28 +1913,4 @@
         intent.putExtra("isDefault", isChecked);
         sendBroadcast(intent);
     }
-
-    private boolean isImsSupportedOnDevice(Context context) {
-        return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS);
-    }
-
-    private void updateServiceEnabledByPlatform() {
-        ImsMmTelManager imsMmTelManager = mImsManager.getImsMmTelManager(mPhone.getSubId());
-        try {
-            imsMmTelManager.isSupported(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                    AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getMainExecutor(), (result) -> {
-                        updateVolteProvisionedSwitch(result);
-                    });
-            imsMmTelManager.isSupported(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
-                    AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getMainExecutor(), (result) -> {
-                        updateVtProvisionedSwitch(result);
-                    });
-            imsMmTelManager.isSupported(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                    AccessNetworkConstants.TRANSPORT_TYPE_WLAN, getMainExecutor(), (result) -> {
-                        updateWfcProvisionedSwitch(result);
-                    });
-        } catch (ImsException e) {
-            e.printStackTrace();
-        }
-    }
 }