Move Wi-Fi Calling settings to separate screen

Change-Id: Ibbef6bb96d264019176decf52051d519bfd9a84b
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 044c593..1e5d785 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -430,34 +430,12 @@
     <!-- Cellular network 4G summary [CHAR LIMIT=80] -->
     <string name="enhanced_4g_lte_mode_summary">Use LTE services to improve voice and other communications (recommended)</string>
 
-    <!-- WFC enable/disable [CHAR LIMIT=30] -->
-    <string name="wfc_title">Wi-Fi calling</string>
-    <!-- WFC summary [CHAR LIMIT=80] -->
-    <string name="wfc_summary">Allow voice calls to use Wi-Fi (recommended)</string>
-    <!-- WFC mode [CHAR LIMIT=30] -->
-    <string name="wfc_mode_title">Wi-Fi calling mode</string>
-    <!-- WFC mode dialog [CHAR LIMIT=30] -->
-    <string name="wfc_mode_dialog_title">Wi-Fi calling mode</string>
-    <string-array name="wfc_mode_choices">
-        <item>Wi-Fi preferred</item>
-        <item>Cellular preferred</item>
-        <item>Wi-Fi only</item>
-    </string-array>
-    <string-array name="wfc_mode_values">
-        <item>"2"</item>
-        <item>"1"</item>
-        <item>"0"</item>
-    </string-array>
     <!-- WFC, summary for Wi-Fi Preferred [CHAR LIMIT=100] -->
     <string name="wfc_mode_wifi_preferred_summary">Wi-Fi preferred (Uses cell network only if Wi-Fi isn\'t available)</string>
     <!-- WFC, summary for Cellular Preferred [CHAR LIMIT=100] -->
     <string name="wfc_mode_cellular_preferred_summary">Cellular preferred (Uses Wi-Fi only if cell network isn\'t available)</string>
     <!-- WFC, summary for Wi-Fi Only [CHAR LIMIT=100] -->
     <string name="wfc_mode_wifi_only_summary">Wi-Fi only (Never uses cell network. Can\'t make or receive calls if Wi-Fi isn\'t available)</string>
-    <!-- WFC roam enable/disable [CHAR LIMIT=30] -->
-    <string name="wfc_roam_title">WFC handoff while roaming</string>
-    <!-- WFC roam summary [CHAR LIMIT=80] -->
-    <string name="wfc_roam_summary">Allow Wi-Fi voice calls handoff to cell network when roaming</string>
 
     <!-- Mobile network settings screen, data enabling checkbox name -->
     <string name="data_enabled">Data enabled</string>
diff --git a/res/xml/call_feature_setting.xml b/res/xml/call_feature_setting.xml
index ab91394..543fae5 100644
--- a/res/xml/call_feature_setting.xml
+++ b/res/xml/call_feature_setting.xml
@@ -87,8 +87,8 @@
         android:title="@string/wifi_calling">
 
         <intent android:action="android.intent.action.MAIN"
-            android:targetPackage="com.android.phone"
-            android:targetClass="com.android.phone.MobileNetworkSettings"/>
+            android:targetPackage="com.android.settings"
+            android:targetClass="com.android.settings.Settings$WifiCallingSettingsActivity"/>
 
     </PreferenceScreen>
 
diff --git a/res/xml/network_setting.xml b/res/xml/network_setting.xml
index 399e514..58c19f7 100644
--- a/res/xml/network_setting.xml
+++ b/res/xml/network_setting.xml
@@ -14,7 +14,6 @@
      limitations under the License.
 -->
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:phone="http://schemas.android.com/apk/res/com.android.phone"
         android:title="@string/mobile_networks">
 
     <PreferenceScreen
@@ -51,22 +50,4 @@
         android:persistent="false"
         android:summary="@string/enhanced_4g_lte_mode_summary"/>
 
-    <SwitchPreference
-        android:key="wfc_enable"
-        android:title="@string/wfc_title"
-        android:persistent="false"/>
-
-    <ListPreference
-        android:key="wfc_mode"
-        android:title="@string/wfc_mode_title"
-        android:summary="@string/wfc_mode_title"
-        android:entries="@array/wfc_mode_choices"
-        android:entryValues="@array/wfc_mode_values"
-        android:dialogTitle="@string/wfc_mode_dialog_title" />
-
-    <SwitchPreference
-        android:key="wfc_roam"
-        android:title="@string/wfc_roam_title"
-        android:persistent="false"/>
-
 </PreferenceScreen>
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index f036584..bccddeb 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -16,9 +16,7 @@
 
 package com.android.phone;
 
-import com.android.ims.ImsConfig;
 import com.android.ims.ImsManager;
-import com.android.ims.ImsException;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
@@ -36,7 +34,6 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.SharedPreferences;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.net.Uri;
 import android.os.AsyncResult;
@@ -49,7 +46,6 @@
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
-import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
 import android.telephony.PhoneStateListener;
@@ -60,12 +56,10 @@
 import android.util.Log;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.ListView;
 import android.widget.TabHost;
 import android.widget.TabHost.OnTabChangeListener;
 import android.widget.TabHost.TabContentFactory;
 import android.widget.TabHost.TabSpec;
-import android.widget.TabWidget;
 
 /**
  * "Mobile network settings" screen.  This preference screen lets you
@@ -96,9 +90,6 @@
     private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
     private static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
     private static final String BUTTON_4G_LTE_KEY = "enhanced_4g_lte";
-    private static final String BUTTON_WFC = "wfc_enable";
-    private static final String BUTTON_WFC_MODE = "wfc_mode";
-    private static final String BUTTON_WFC_ROAM = "wfc_roam";
     private static final String BUTTON_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
     private static final String BUTTON_APN_EXPAND_KEY = "button_apn_key";
     private static final String BUTTON_OPERATOR_SELECTION_EXPAND_KEY = "button_carrier_sel_key";
@@ -119,9 +110,6 @@
     private ListPreference mButtonEnabledNetworks;
     private SwitchPreference mButtonDataRoam;
     private SwitchPreference mButton4glte;
-    private SwitchPreference mButtonWfc;
-    private ListPreference mButtonWfcMode;
-    private SwitchPreference mButtonWfcRoam;
     private Preference mLteDataServicePref;
 
     private static final String iface = "rmnet0"; //TODO: this will go away
@@ -154,35 +142,10 @@
         @Override
         public void onCallStateChanged(int state, String incomingNumber) {
             if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
+            boolean enabled = (state == TelephonyManager.CALL_STATE_IDLE) &&
+                    ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext());
             Preference pref = getPreferenceScreen().findPreference(BUTTON_4G_LTE_KEY);
-            boolean isEnhanced4gModeEnabled = false;
-            if (pref != null) {
-                isEnhanced4gModeEnabled = ((SwitchPreference) pref).isChecked() &&
-                        ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext());
-                pref.setEnabled((state == TelephonyManager.CALL_STATE_IDLE) &&
-                        ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext()));
-            }
-            pref = getPreferenceScreen().findPreference(BUTTON_WFC);
-            boolean isWfcEnabled = false;
-            if (pref != null) {
-                isWfcEnabled = ((SwitchPreference) pref).isChecked();
-                pref.setEnabled(
-                        isEnhanced4gModeEnabled && (state == TelephonyManager.CALL_STATE_IDLE));
-            }
-            pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE);
-            int wfcMode = ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY;
-            if (pref != null) {
-                pref.setEnabled(isEnhanced4gModeEnabled && isWfcEnabled
-                        && (state == TelephonyManager.CALL_STATE_IDLE));
-                ListPreference prefWfcMode = (ListPreference)pref;
-                wfcMode = Integer.valueOf(prefWfcMode.getValue()).intValue();
-            }
-            pref = getPreferenceScreen().findPreference(BUTTON_WFC_ROAM);
-            if (pref != null) {
-                pref.setEnabled(isEnhanced4gModeEnabled && isWfcEnabled
-                        && (wfcMode != ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY)
-                        && (state == TelephonyManager.CALL_STATE_IDLE));
-            }
+            if (pref != null) pref.setEnabled(enabled && hasActiveSubscriptions());
         }
     };
 
@@ -226,8 +189,7 @@
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
         /** TODO: Refactor and get rid of the if's using subclasses */
         final int phoneSubId = mPhone.getSubId();
-        if (preference.getKey().equals(BUTTON_4G_LTE_KEY) || preference.getKey().equals(BUTTON_WFC)
-                || preference.getKey().equals(BUTTON_WFC_ROAM)) {
+        if (preference.getKey().equals(BUTTON_4G_LTE_KEY)) {
             return true;
         } else if (mGsmUmtsOptions != null &&
                 mGsmUmtsOptions.preferenceTreeClick(preference) == true) {
@@ -253,8 +215,6 @@
                     preferredNetworkMode);
             mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
             return true;
-        } else if (preference == mButtonWfcMode) {
-            return true;
         } else if (preference == mLteDataServicePref) {
             String tmpl = android.provider.Settings.Global.getString(getContentResolver(),
                         android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
@@ -275,7 +235,7 @@
             return true;
         }  else if (preference == mButtonEnabledNetworks) {
             int settingsNetworkMode = android.provider.Settings.Global.getInt(mPhone.getContext().
-                    getContentResolver(),
+                            getContentResolver(),
                     android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
                     preferredNetworkMode);
             mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
@@ -472,15 +432,6 @@
         mButton4glte = (SwitchPreference)findPreference(BUTTON_4G_LTE_KEY);
         mButton4glte.setOnPreferenceChangeListener(this);
 
-        mButtonWfc = (SwitchPreference) findPreference(BUTTON_WFC);
-        mButtonWfc.setOnPreferenceChangeListener(this);
-
-        mButtonWfcMode = (ListPreference) findPreference(BUTTON_WFC_MODE);
-        mButtonWfcMode.setOnPreferenceChangeListener(this);
-
-        mButtonWfcRoam = (SwitchPreference) findPreference(BUTTON_WFC_ROAM);
-        mButtonWfcRoam.setOnPreferenceChangeListener(this);
-
         try {
             Context con = createPackageContext("com.android.systemui", 0);
             int id = con.getResources().getIdentifier("config_show4GForLTE",
@@ -554,13 +505,6 @@
         boolean enh4glteMode = ImsManager.isEnhanced4gLteModeSettingEnabledByUser(this)
                 && ImsManager.isNonTtyOrTtyOnVolteEnabled(this);
         mButton4glte.setChecked(enh4glteMode);
-        boolean wfcEnabled = ImsManager.isWfcEnabledByUser(this);
-        mButtonWfc.setChecked(enh4glteMode && wfcEnabled);
-        int wfcMode = ImsManager.getWfcMode(mPhone.getContext());
-        mButtonWfcMode.setValue(Integer.toString(wfcMode));
-        mButtonWfcRoam.setChecked(enh4glteMode && wfcEnabled &&
-                (wfcMode != ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY) &&
-                ImsManager.isWfcRoamingEnabledByUser(this));
 
         mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
 
@@ -568,6 +512,10 @@
 
     }
 
+    private boolean hasActiveSubscriptions() {
+        return mActiveSubInfos.size() > 0;
+    }
+
     private void updateBody() {
         final Context context = getApplicationContext();
         PreferenceScreen prefSet = getPreferenceScreen();
@@ -584,26 +532,6 @@
             prefSet.addPreference(mButtonPreferredNetworkMode);
             prefSet.addPreference(mButtonEnabledNetworks);
             prefSet.addPreference(mButton4glte);
-            prefSet.addPreference(mButtonWfc);
-            prefSet.addPreference(mButtonWfcMode);
-            UpdateWfcModeSummary(ImsManager.getWfcMode(mPhone.getContext()));
-            prefSet.addPreference(mButtonWfcRoam);
-
-            if (!ImsManager.isEnhanced4gLteModeSettingEnabledByUser(mPhone.getContext())) {
-                mButtonWfc.setEnabled(false);
-                mButtonWfcMode.setEnabled(false);
-                mButtonWfcRoam.setEnabled(false);
-            }
-
-            if (!ImsManager.isWfcEnabledByUser(mPhone.getContext())) {
-                mButtonWfcMode.setEnabled(false);
-                mButtonWfcRoam.setEnabled(false);
-            }
-
-            if (ImsManager.getWfcMode(mPhone.getContext())
-                    == ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY) {
-                mButtonWfcRoam.setEnabled(false);
-            }
         }
 
         int settingsNetworkMode = android.provider.Settings.Global.getInt(
@@ -739,22 +667,6 @@
             }
         }
 
-        // Enable WFC settings depending on whether exists on platform
-        if (!ImsManager.isWfcEnabledByPlatform(this)) {
-            Preference pref = prefSet.findPreference(BUTTON_WFC);
-            if (pref != null) {
-                prefSet.removePreference(pref);
-            }
-            pref = prefSet.findPreference(BUTTON_WFC_MODE);
-            if (pref != null) {
-                prefSet.removePreference(pref);
-            }
-            pref = prefSet.findPreference(BUTTON_WFC_ROAM);
-            if (pref != null) {
-                prefSet.removePreference(pref);
-            }
-        }
-
         ActionBar actionBar = getActionBar();
         if (actionBar != null) {
             // android.R.id.home will be triggered in onOptionsItemSelected()
@@ -793,11 +705,15 @@
          * but you do need to remember that this all needs to work when subscriptions
          * change dynamically such as when hot swapping sims.
          */
-        boolean hasActiveSubscriptions = mActiveSubInfos.size() > 0;
+        boolean hasActiveSubscriptions = hasActiveSubscriptions();
+        TelephonyManager tm = (TelephonyManager) getSystemService(
+                Context.TELEPHONY_SERVICE);
+        boolean canChange4glte = (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) &&
+                ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext());
         mButtonDataRoam.setEnabled(hasActiveSubscriptions);
         mButtonPreferredNetworkMode.setEnabled(hasActiveSubscriptions);
         mButtonEnabledNetworks.setEnabled(hasActiveSubscriptions);
-        mButton4glte.setEnabled(hasActiveSubscriptions);
+        mButton4glte.setEnabled(hasActiveSubscriptions && canChange4glte);
         mLteDataServicePref.setEnabled(hasActiveSubscriptions);
         Preference ps;
         PreferenceScreen root = getPreferenceScreen();
@@ -933,47 +849,6 @@
             boolean enhanced4gMode = !enhanced4gModePref.isChecked();
             enhanced4gModePref.setChecked(enhanced4gMode);
             ImsManager.setEnhanced4gLteModeSetting(this, enhanced4gModePref.isChecked());
-
-            mButtonWfc.setEnabled(enhanced4gMode);
-            boolean wfcEnabled = ImsManager.isWfcEnabledByUser(this);
-            mButtonWfc.setChecked(enhanced4gMode && wfcEnabled);
-            mButtonWfcMode.setEnabled(enhanced4gMode && wfcEnabled);
-            boolean wfcHandoffEnabled = (ImsManager.getWfcMode(mPhone.getContext())
-                    != ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY);
-            mButtonWfcRoam.setEnabled(enhanced4gMode && wfcEnabled && wfcHandoffEnabled);
-            mButtonWfcRoam.setChecked(enhanced4gMode && wfcEnabled && wfcHandoffEnabled &&
-                    ImsManager.isWfcRoamingEnabledByUser(this));
-        } else if (preference == mButtonWfc) {
-            SwitchPreference wfcPref = (SwitchPreference) preference;
-            boolean wfcEnabled = !wfcPref.isChecked();
-            wfcPref.setChecked(wfcEnabled);
-            ImsManager.setWfcSetting(this, wfcPref.isChecked());
-
-            mButtonWfcMode.setEnabled(wfcEnabled);
-            boolean wfcHandoffEnabled = (ImsManager.getWfcMode(mPhone.getContext())
-                    != ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY);
-            mButtonWfcRoam.setEnabled(wfcEnabled && wfcHandoffEnabled);
-            mButtonWfcRoam.setChecked(wfcEnabled && wfcHandoffEnabled &&
-                    ImsManager.isWfcRoamingEnabledByUser(this));
-        } else if (preference == mButtonWfcMode) {
-            mButtonWfcMode.setValue((String) objValue);
-            int buttonMode = Integer.valueOf((String) objValue).intValue();
-            int currentMode = ImsManager.getWfcMode(mPhone.getContext());
-            if (DBG)
-                log("Setting WFC Mode: buttonMode=" + buttonMode + ", currentMode=" + currentMode);
-            if (buttonMode != currentMode) {
-                ImsManager.setWfcMode(mPhone.getContext(), buttonMode);
-                UpdateWfcModeSummary(buttonMode);
-            }
-            boolean wfcHandoffEnabled =
-                    (buttonMode != ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY);
-            mButtonWfcRoam.setEnabled(wfcHandoffEnabled);
-            mButtonWfcRoam.setChecked(wfcHandoffEnabled &&
-                    ImsManager.isWfcRoamingEnabledByUser(this));
-        } else if (preference == mButtonWfcRoam) {
-            SwitchPreference wfcRoamPref = (SwitchPreference) preference;
-            wfcRoamPref.setChecked(!wfcRoamPref.isChecked());
-            ImsManager.setWfcRoamingSetting(this, wfcRoamPref.isChecked());
         } else if (preference == mButtonDataRoam) {
             if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
 
@@ -1285,22 +1160,6 @@
         }
     }
 
-    private void UpdateWfcModeSummary(int wfcMode) {
-        switch (wfcMode) {
-            case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
-                mButtonWfcMode.setSummary(R.string.wfc_mode_wifi_only_summary);
-                break;
-            case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED:
-                mButtonWfcMode.setSummary(R.string.wfc_mode_cellular_preferred_summary);
-                break;
-            case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED:
-                mButtonWfcMode.setSummary(R.string.wfc_mode_wifi_preferred_summary);
-                break;
-            default:
-                // do nothing
-        }
-    }
-
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch(requestCode) {