Merge "Remove the OEM hook implementation and usage"
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 1d264fb..e5527bc 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -42,6 +42,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
+import android.telephony.ims.feature.ImsFeature;
 import android.telephony.PhoneStateListener;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -50,6 +51,7 @@
 import android.widget.Toast;
 
 import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
 import com.android.ims.ImsManager;
 import com.android.internal.telephony.CallForwardInfo;
 import com.android.internal.telephony.Phone;
@@ -105,6 +107,7 @@
     private static final String ENABLE_VIDEO_CALLING_KEY = "button_enable_video_calling";
 
     private Phone mPhone;
+    private ImsManager mImsMgr;
     private SubscriptionInfoHelper mSubscriptionInfoHelper;
     private TelecomManager mTelecomManager;
 
@@ -188,6 +191,17 @@
         mTelecomManager = TelecomManager.from(this);
     }
 
+    private void updateImsManager(Phone phone) {
+        log("updateImsManager :: phone.getContext()=" + phone.getContext()
+                + " phone.getPhoneId()=" + phone.getPhoneId());
+        mImsMgr = ImsManager.getInstance(phone.getContext(), phone.getPhoneId());
+        if (mImsMgr == null) {
+            log("updateImsManager :: Could not get ImsManager instance!");
+        } else {
+            log("updateImsManager :: mImsMgr=" + mImsMgr);
+        }
+    }
+
     private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
         @Override
         public void onCallStateChanged(int state, String incomingNumber) {
@@ -210,6 +224,7 @@
     protected void onResume() {
         super.onResume();
 
+        updateImsManager(mPhone);
         PreferenceScreen preferenceScreen = getPreferenceScreen();
         if (preferenceScreen != null) {
             preferenceScreen.removeAll();
@@ -347,6 +362,19 @@
             }
             wifiCallingSettings.setSummary(resId);
         }
+
+        try {
+            if (mImsMgr.getImsServiceStatus() != ImsFeature.STATE_READY) {
+                log("Feature state not ready so remove vt and wfc settings for "
+                        + " phone =" + mPhone.getPhoneId());
+                prefSet.removePreference(wifiCallingSettings);
+                prefSet.removePreference(mEnableVideoCalling);
+            }
+        } catch (ImsException ex) {
+            log("Exception when trying to get ImsServiceStatus: " + ex);
+            prefSet.removePreference(wifiCallingSettings);
+            prefSet.removePreference(mEnableVideoCalling);
+        }
     }
 
     /**
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 03865fe..a37bb9e 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -46,6 +46,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
+import android.telephony.ims.feature.ImsFeature;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
@@ -61,6 +62,7 @@
 import android.widget.TabHost;
 
 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.PhoneConstants;
@@ -214,6 +216,7 @@
 
         private UserManager mUm;
         private Phone mPhone;
+        private ImsManager mImsMgr;
         private MyHandler mHandler;
         private boolean mOkClicked;
 
@@ -486,6 +489,13 @@
                 mPhone = PhoneGlobals.getPhone();
             }
             Log.i(LOG_TAG, "updatePhone:- slotId=" + slotId + " sir=" + sir);
+
+            mImsMgr = ImsManager.getInstance(mPhone.getContext(), mPhone.getPhoneId());
+            if (mImsMgr == null) {
+                log("updatePhone :: Could not get ImsManager instance!");
+            } else if (DBG) {
+                log("updatePhone :: mImsMgr=" + mImsMgr);
+            }
         }
 
         private TabHost.TabContentFactory mEmptyTabContent = new TabHost.TabContentFactory() {
@@ -840,8 +850,16 @@
                 android.util.Log.d(LOG_TAG, "keep ltePref");
             }
 
-            if (hideEnhanced4gLteSettings(getActivity(), carrierConfig)) {
-                Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY);
+            Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY);
+            try {
+                if ((mImsMgr.getImsServiceStatus() != ImsFeature.STATE_READY)
+                        || hideEnhanced4gLteSettings(getActivity(), carrierConfig)) {
+                    if (pref != null) {
+                        prefSet.removePreference(pref);
+                    }
+                }
+            } catch (ImsException ex) {
+                log("Exception when trying to get ImsServiceStatus: " + ex);
                 if (pref != null) {
                     prefSet.removePreference(pref);
                 }
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index 04e8bf5..4d55421 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -24,6 +24,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.PersistableBundle;
 import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
@@ -31,6 +32,7 @@
 import android.preference.SwitchPreference;
 import android.provider.ContactsContract.CommonDataKinds;
 import android.provider.Settings;
+import android.telephony.CarrierConfigManager;
 import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
@@ -250,6 +252,10 @@
             mSubMenuVoicemailSettings.setParentActivity(this, VOICEMAIL_PREF_ID, this);
             mSubMenuVoicemailSettings.setDialogOnClosedListener(this);
             mSubMenuVoicemailSettings.setDialogTitle(R.string.voicemail_settings_number_label);
+            if (!getBooleanCarrierConfig(
+                    CarrierConfigManager.KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL)) {
+                mSubMenuVoicemailSettings.setEnabled(false);
+            }
         }
 
         mVoicemailProviders = (VoicemailProviderListPreference) findPreference(
@@ -545,6 +551,23 @@
         }
     }
 
+    /**
+     * Get the boolean config from carrier config manager.
+     *
+     * @param key config key defined in CarrierConfigManager
+     * @return boolean value of corresponding key.
+     */
+    private boolean getBooleanCarrierConfig(String key) {
+        PersistableBundle b = PhoneGlobals.getInstance()
+                .getCarrierConfigForSubId(mPhone.getSubId());
+        if (b != null) {
+            return b.getBoolean(key);
+        } else {
+            // Return static default defined in CarrierConfigManager.
+            return CarrierConfigManager.getDefaultConfig().getBoolean(key);
+        }
+    }
+
 
     //*********************************************************************************************
     // Activity Dialog Methods