Update preferred networks selection menu

Move "Use 2G Only" checkbox to "Network Mode" Menu
This menu consists of the followings in GSM Phone:
- 4G/LTE
- 3G
- 2G

4G/LTE means it's preferred, falling back to 3G, falling back to 2G.
3G means it's preferred, falling back to 2G.
2G means 2G only.

If config_prefer_2g is false, "2G Only" removes from Menu.
To use "LTE" menu, set config_enabled_lte true as mcc/mnc.
That means config_enabled_lte is false as default.
If set config_show4GForLTE true in SystemUI, display 4G instead of LTE.

In case of CDMA Phone with LTE,
- LTE
- 3G
- 1x
- Global
For (global) roaming of cdma, should set config_show_cdma true as mcc/mnc.

Bug: 10332749, 10783369
Change-Id: I74a9096f528bcd2a9a1162b53194ece653243bf7
diff --git a/res/values/config.xml b/res/values/config.xml
index 5146b1f..9bfac9a 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -119,6 +119,10 @@
     <bool name="config_apn_expand" translatable="false">true</bool>
     <bool name="config_operator_selection_expand" translatable="false">true</bool>
     <bool name="config_prefer_2g" translatable="false">true</bool>
+    <!-- Show enabled lte option for lte device -->
+    <bool name="config_enabled_lte" translatable="false">false</bool>
+    <!-- Show cdma auto network mode in (glabal) roaming -->
+    <bool name="config_show_cdma" translatable="false">false</bool>
 
     <!-- Package name for the default in-call UI and dialer [DO NOT TRANSLATE] -->
     <string name="ui_default_package" translatable="false">com.android.dialer</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f102cb7..ad876fa 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -516,10 +516,63 @@
     <string name="multi_category_enable">Multi-category enabled</string>
     <string name="multi_category_disable">Multi-category disabled</string>
 
-    <!-- Mobile network settings screen, setting option name -->
-    <string name="prefer_2g">Use only 2G networks</string>
-    <!-- Mobile network settings screen, setting summary text -->
-    <string name="prefer_2g_summary">Saves battery</string>
+    <string-array name="enabled_networks_except_gsm_choices" translatable="false">
+        <item>LTE</item>
+        <item>3G</item>
+    </string-array>
+    <string-array name="enabled_networks_except_gsm_4g_choices" translatable="false">
+        <item>4G</item>
+        <item>3G</item>
+    </string-array>
+    <string-array name="enabled_networks_except_gsm_values" translatable="false">
+        <item>"9"</item>
+        <item>"0"</item>
+    </string-array>
+
+    <string-array name="enabled_networks_except_lte_choices" translatable="false">
+        <item>3G</item>
+        <item>2G</item>
+    </string-array>
+    <string-array name="enabled_networks_except_lte_values" translatable="false">
+        <item>"0"</item>
+        <item>"1"</item>
+    </string-array>
+
+    <string-array name="enabled_networks_except_gsm_lte_choices" translatable="false">
+        <item>3G</item>
+    </string-array>
+    <string-array name="enabled_networks_except_gsm_lte_values" translatable="false">
+        <item>"0"</item>
+    </string-array>
+
+    <string-array name="enabled_networks_choices" translatable="false">
+        <item>LTE</item>
+        <item>3G</item>
+        <item>2G</item>
+    </string-array>
+    <string-array name="enabled_networks_4g_choices" translatable="false">
+        <item>4G</item>
+        <item>3G</item>
+        <item>2G</item>
+    </string-array>
+    <string-array name="enabled_networks_values" translatable="false">
+        <item>"9"</item>
+        <item>"0"</item>
+        <item>"1"</item>
+    </string-array>
+
+    <string-array name="enabled_networks_cdma_choices" translatable="false">
+        <item>LTE</item>
+        <item>3G</item>
+        <item>1x</item>
+        <item>Global</item>
+    </string-array>
+    <string-array name="enabled_networks_cdma_values" translatable="false">
+        <item>"8"</item>
+        <item>"4"</item>
+        <item>"5"</item>
+        <item>"10"</item>
+    </string-array>
 
     <!-- CDMA System select strings -->
     <!-- Mobile network settings screen, setting option name -->
diff --git a/res/xml/gsm_umts_options.xml b/res/xml/gsm_umts_options.xml
index afdd0d3..df7f2d5 100644
--- a/res/xml/gsm_umts_options.xml
+++ b/res/xml/gsm_umts_options.xml
@@ -28,12 +28,6 @@
 
     </PreferenceScreen>
 
-    <com.android.phone.Use2GOnlyCheckBoxPreference
-        android:key="button_prefer_2g_key"
-        android:title="@string/prefer_2g"
-        android:persistent="false"
-        android:summary="@string/prefer_2g_summary"/>
-
     <PreferenceScreen
         android:key="button_carrier_sel_key"
         android:title="@string/networks"
diff --git a/res/xml/network_setting.xml b/res/xml/network_setting.xml
index 7fd00fc..00430e8 100644
--- a/res/xml/network_setting.xml
+++ b/res/xml/network_setting.xml
@@ -43,4 +43,12 @@
         android:entryValues="@array/preferred_network_mode_values"
         android:dialogTitle="@string/preferred_network_mode_dialogtitle" />
 
+    <ListPreference
+        android:key="enabled_networks_key"
+        android:title="@string/preferred_network_mode_title"
+        android:summary="@string/preferred_network_mode_summary"
+        android:entries="@array/enabled_networks_choices"
+        android:entryValues="@array/enabled_networks_values"
+        android:dialogTitle="@string/preferred_network_mode_dialogtitle" />
+
 </PreferenceScreen>
diff --git a/src/com/android/phone/GsmUmtsOptions.java b/src/com/android/phone/GsmUmtsOptions.java
index 1f1ac4a..6829dec 100644
--- a/src/com/android/phone/GsmUmtsOptions.java
+++ b/src/com/android/phone/GsmUmtsOptions.java
@@ -16,7 +16,6 @@
 
 package com.android.phone;
 
-import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
@@ -34,11 +33,9 @@
 
     private PreferenceScreen mButtonAPNExpand;
     private PreferenceScreen mButtonOperatorSelectionExpand;
-    private CheckBoxPreference mButtonPrefer2g;
 
     private static final String BUTTON_APN_EXPAND_KEY = "button_apn_key";
     private static final String BUTTON_OPERATOR_SELECTION_EXPAND_KEY = "button_carrier_sel_key";
-    private static final String BUTTON_PREFER_2G_KEY = "button_prefer_2g_key";
     private PreferenceActivity mPrefActivity;
     private PreferenceScreen mPrefScreen;
 
@@ -53,12 +50,10 @@
         mButtonAPNExpand = (PreferenceScreen) mPrefScreen.findPreference(BUTTON_APN_EXPAND_KEY);
         mButtonOperatorSelectionExpand =
                 (PreferenceScreen) mPrefScreen.findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY);
-        mButtonPrefer2g = (CheckBoxPreference) mPrefScreen.findPreference(BUTTON_PREFER_2G_KEY);
         if (PhoneFactory.getDefaultPhone().getPhoneType() != PhoneConstants.PHONE_TYPE_GSM) {
             log("Not a GSM phone");
             mButtonAPNExpand.setEnabled(false);
             mButtonOperatorSelectionExpand.setEnabled(false);
-            mButtonPrefer2g.setEnabled(false);
         } else {
             log("Not a CDMA phone");
             Resources res = mPrefActivity.getResources();
@@ -74,9 +69,6 @@
                 mPrefScreen.removePreference(mPrefScreen
                         .findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY));
             }
-            if (!res.getBoolean(R.bool.config_prefer_2g)) {
-                mPrefScreen.removePreference(mPrefScreen.findPreference(BUTTON_PREFER_2G_KEY));
-            }
 
             if (res.getBoolean(R.bool.csp_enabled)) {
                 if (PhoneFactory.getDefaultPhone().isCspPlmnEnabled()) {
@@ -92,10 +84,6 @@
     }
 
     public boolean preferenceTreeClick(Preference preference) {
-        if (preference.getKey().equals(BUTTON_PREFER_2G_KEY)) {
-            log("preferenceTreeClick: return true");
-            return true;
-        }
         log("preferenceTreeClick: return false");
         return false;
     }
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 66824dc..7e43a55 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -26,6 +26,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.net.ConnectivityManager;
 import android.net.Uri;
 import android.os.AsyncResult;
@@ -60,7 +61,7 @@
 
     // debug data
     private static final String LOG_TAG = "NetworkSettings";
-    private static final boolean DBG = false;
+    private static final boolean DBG = true;
     public static final int REQUEST_CODE_EXIT_ECM = 17;
 
     //String keys for preference lookup
@@ -68,6 +69,7 @@
     private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
     private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
     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";
 
     static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
 
@@ -78,6 +80,7 @@
 
     //UI objects
     private ListPreference mButtonPreferredNetworkMode;
+    private ListPreference mButtonEnabledNetworks;
     private CheckBoxPreference mButtonDataRoam;
     private CheckBoxPreference mButtonDataEnabled;
     private Preference mLteDataServicePref;
@@ -93,7 +96,7 @@
     CdmaOptions mCdmaOptions;
 
     private Preference mClickedPreference;
-
+    private boolean mShow4GForLTE;
 
     //This is a method implemented for DialogInterface.OnClickListener.
     //  Used to dismiss the dialogs when they come up.
@@ -189,6 +192,12 @@
                 android.util.Log.e(LOG_TAG, "Missing SETUP_PREPAID_DATA_SERVICE_URL");
             }
             return true;
+        }  else if (preference == mButtonEnabledNetworks) {
+            int settingsNetworkMode = android.provider.Settings.Global.getInt(mPhone.getContext().
+                    getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+                    preferredNetworkMode);
+            mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
+            return true;
         } else {
             // if the button is anything but the simple toggle preference,
             // we'll need to disable all preferences to reject all click
@@ -208,6 +217,16 @@
         mPhone = PhoneGlobals.getPhone();
         mHandler = new MyHandler();
 
+        try {
+            Context con = createPackageContext("com.android.systemui", 0);
+            int id = con.getResources().getIdentifier("config_show4GForLTE",
+                    "bool", "com.android.systemui");
+            mShow4GForLTE = con.getResources().getBoolean(id);
+        } catch (NameNotFoundException e) {
+            loge("NameNotFoundException for show4GFotLTE");
+            mShow4GForLTE = false;
+        }
+
         //get UI object references
         PreferenceScreen prefSet = getPreferenceScreen();
 
@@ -215,10 +234,14 @@
         mButtonDataRoam = (CheckBoxPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
         mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(
                 BUTTON_PREFERED_NETWORK_MODE);
+        mButtonEnabledNetworks = (ListPreference) prefSet.findPreference(
+                BUTTON_ENABLED_NETWORKS_KEY);
+
         mLteDataServicePref = prefSet.findPreference(BUTTON_CDMA_LTE_DATA_SERVICE_KEY);
 
         boolean isLteOnCdma = mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
         if (getResources().getBoolean(R.bool.world_phone) == true) {
+            prefSet.removePreference(mButtonEnabledNetworks);
             // set the listener for the mButtonPreferredNetworkMode list preference so we can issue
             // change Preferred Network Mode.
             mButtonPreferredNetworkMode.setOnPreferenceChangeListener(this);
@@ -234,12 +257,55 @@
             prefSet.removePreference(mButtonPreferredNetworkMode);
             int phoneType = mPhone.getPhoneType();
             if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
+                if (isLteOnCdma) {
+                    mButtonEnabledNetworks.setEntries(
+                            R.array.enabled_networks_cdma_choices);
+                    mButtonEnabledNetworks.setEntryValues(
+                            R.array.enabled_networks_cdma_values);
+                }
                 mCdmaOptions = new CdmaOptions(this, prefSet, mPhone);
             } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
+                if (!getResources().getBoolean(R.bool.config_prefer_2g)
+                        && !getResources().getBoolean(R.bool.config_enabled_lte)) {
+                    mButtonEnabledNetworks.setEntries(
+                            R.array.enabled_networks_except_gsm_lte_choices);
+                    mButtonEnabledNetworks.setEntryValues(
+                            R.array.enabled_networks_except_gsm_lte_values);
+                } else if (!getResources().getBoolean(R.bool.config_prefer_2g)) {
+                    int select = (mShow4GForLTE == true) ?
+                        R.array.enabled_networks_except_gsm_4g_choices
+                        : R.array.enabled_networks_except_gsm_choices;
+                    mButtonEnabledNetworks.setEntries(select);
+                    mButtonEnabledNetworks.setEntryValues(
+                            R.array.enabled_networks_except_gsm_values);
+                } else if (!getResources().getBoolean(R.bool.config_enabled_lte)) {
+                    mButtonEnabledNetworks.setEntries(
+                            R.array.enabled_networks_except_lte_choices);
+                    mButtonEnabledNetworks.setEntryValues(
+                            R.array.enabled_networks_except_lte_values);
+                } else if (isLteOnCdma && getResources().getBoolean(R.bool.config_show_cdma)) {
+                    mButtonEnabledNetworks.setEntries(
+                            R.array.enabled_networks_cdma_choices);
+                    mButtonEnabledNetworks.setEntryValues(
+                            R.array.enabled_networks_cdma_values);
+                } else {
+                    int select = (mShow4GForLTE == true) ? R.array.enabled_networks_4g_choices
+                        : R.array.enabled_networks_choices;
+                    mButtonEnabledNetworks.setEntries(select);
+                    mButtonEnabledNetworks.setEntryValues(
+                            R.array.enabled_networks_values);
+                }
                 mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet);
             } else {
                 throw new IllegalStateException("Unexpected phone type: " + phoneType);
             }
+            mButtonEnabledNetworks.setOnPreferenceChangeListener(this);
+            int settingsNetworkMode = android.provider.Settings.Global.getInt(
+                    mPhone.getContext().getContentResolver(),
+                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+                    preferredNetworkMode);
+            if (DBG) log("settingsNetworkMode: " + settingsNetworkMode);
+            mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
         }
 
         final boolean missingDataServiceUrl = TextUtils.isEmpty(
@@ -279,6 +345,11 @@
             mPhone.getPreferredNetworkType(mHandler.obtainMessage(
                     MyHandler.MESSAGE_GET_PREFERRED_NETWORK_TYPE));
         }
+
+        if (getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null)  {
+            mPhone.getPreferredNetworkType(mHandler.obtainMessage(
+                    MyHandler.MESSAGE_GET_PREFERRED_NETWORK_TYPE));
+        }
     }
 
     @Override
@@ -338,6 +409,42 @@
                 mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
                         .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
             }
+        } else if (preference == mButtonEnabledNetworks) {
+            mButtonEnabledNetworks.setValue((String) objValue);
+            int buttonNetworkMode;
+            buttonNetworkMode = Integer.valueOf((String) objValue).intValue();
+            if (DBG) log("buttonNetworkMode: " + buttonNetworkMode);
+            int settingsNetworkMode = android.provider.Settings.Global.getInt(
+                    mPhone.getContext().getContentResolver(),
+                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE, preferredNetworkMode);
+            if (buttonNetworkMode != settingsNetworkMode) {
+                int modemNetworkMode;
+                // if new mode is invalid ignore it
+                switch (buttonNetworkMode) {
+                    case Phone.NT_MODE_WCDMA_PREF:
+                    case Phone.NT_MODE_GSM_ONLY:
+                    case Phone.NT_MODE_LTE_GSM_WCDMA:
+                    case Phone.NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA:
+                    case Phone.NT_MODE_CDMA:
+                    case Phone.NT_MODE_CDMA_NO_EVDO:
+                    case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
+                        // This is one of the modes we recognize
+                        modemNetworkMode = buttonNetworkMode;
+                        break;
+                    default:
+                        loge("Invalid Network Mode (" + buttonNetworkMode + ") chosen. Ignore.");
+                        return true;
+                }
+
+                UpdateEnabledNetworksSummary(buttonNetworkMode);
+
+                android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+                        android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+                        buttonNetworkMode );
+                //Set the modem network mode
+                mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
+                        .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
+            }
         }
 
         // always let the preference setting proceed.
@@ -423,8 +530,10 @@
                     }
 
                     UpdatePreferredNetworkModeSummary(modemNetworkMode);
+                    UpdateEnabledNetworksSummary(modemNetworkMode);
                     // changes the mButtonPreferredNetworkMode accordingly to modemNetworkMode
                     mButtonPreferredNetworkMode.setValue(Integer.toString(modemNetworkMode));
+                    mButtonEnabledNetworks.setValue(Integer.toString(modemNetworkMode));
                 } else {
                     if (DBG) log("handleGetPreferredNetworkTypeResponse: else: reset to default");
                     resetNetworkModeToDefault();
@@ -441,6 +550,11 @@
                 android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
                         android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
                         networkMode );
+                networkMode = Integer.valueOf(
+                        mButtonEnabledNetworks.getValue()).intValue();
+                android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+                        android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
+                        networkMode );
             } else {
                 mPhone.getPreferredNetworkType(obtainMessage(MESSAGE_GET_PREFERRED_NETWORK_TYPE));
             }
@@ -449,6 +563,7 @@
         private void resetNetworkModeToDefault() {
             //set the mButtonPreferredNetworkMode
             mButtonPreferredNetworkMode.setValue(Integer.toString(preferredNetworkMode));
+            mButtonEnabledNetworks.setValue(Integer.toString(preferredNetworkMode));
             //set the Settings.System
             android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
                         android.provider.Settings.Global.PREFERRED_NETWORK_MODE,
@@ -528,6 +643,36 @@
         }
     }
 
+    private void UpdateEnabledNetworksSummary(int NetworkMode) {
+        switch(NetworkMode) {
+            case Phone.NT_MODE_WCDMA_PREF:
+                mButtonEnabledNetworks.setSummary("3G");
+                break;
+            case Phone.NT_MODE_GSM_ONLY:
+                mButtonEnabledNetworks.setSummary("2G");
+                break;
+            case Phone.NT_MODE_LTE_GSM_WCDMA:
+                final String show4GForLTE = (mShow4GForLTE == true) ? "4G" : "LTE";
+                mButtonEnabledNetworks.setSummary(show4GForLTE);
+                break;
+            case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
+                mButtonEnabledNetworks.setSummary("LTE");
+                break;
+            case Phone.NT_MODE_CDMA:
+            case Phone.NT_MODE_GLOBAL:
+                mButtonEnabledNetworks.setSummary("3G");
+                break;
+            case Phone.NT_MODE_CDMA_NO_EVDO:
+                mButtonEnabledNetworks.setSummary("1X");
+                break;
+            case Phone.NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA:
+                mButtonEnabledNetworks.setSummary("Global");
+                break;
+            default:
+                mButtonEnabledNetworks.setSummary(R.string.preferred_network_mode_summary);
+        }
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch(requestCode) {
diff --git a/src/com/android/phone/Use2GOnlyCheckBoxPreference.java b/src/com/android/phone/Use2GOnlyCheckBoxPreference.java
deleted file mode 100644
index a5a7a67..0000000
--- a/src/com/android/phone/Use2GOnlyCheckBoxPreference.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone;
-
-import android.content.Context;
-import android.os.AsyncResult;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemProperties;
-import android.preference.CheckBoxPreference;
-import android.util.AttributeSet;
-import android.util.Log;
-
-import com.android.internal.telephony.Phone;
-
-public class Use2GOnlyCheckBoxPreference extends CheckBoxPreference {
-    private static final String LOG_TAG = "Use2GOnlyCheckBoxPreference";
-
-    private Phone mPhone;
-    private MyHandler mHandler;
-
-    public Use2GOnlyCheckBoxPreference(Context context) {
-        this(context, null);
-    }
-
-    public Use2GOnlyCheckBoxPreference(Context context, AttributeSet attrs) {
-        this(context, attrs,com.android.internal.R.attr.checkBoxPreferenceStyle);
-    }
-
-    public Use2GOnlyCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        mPhone = PhoneGlobals.getPhone();
-        mHandler = new MyHandler();
-        mPhone.getPreferredNetworkType(
-                mHandler.obtainMessage(MyHandler.MESSAGE_GET_PREFERRED_NETWORK_TYPE));
-    }
-
-    private int getDefaultNetworkMode() {
-        int mode = SystemProperties.getInt("ro.telephony.default_network",
-                Phone.PREFERRED_NT_MODE);
-        Log.i(LOG_TAG, "getDefaultNetworkMode: mode=" + mode);
-        return mode;
-    }
-
-    @Override
-    protected void  onClick() {
-        super.onClick();
-
-        int networkType = isChecked() ? Phone.NT_MODE_GSM_ONLY : getDefaultNetworkMode();
-        Log.i(LOG_TAG, "set preferred network type="+networkType);
-        android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
-                android.provider.Settings.Global.PREFERRED_NETWORK_MODE, networkType);
-        mPhone.setPreferredNetworkType(networkType, mHandler
-                .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
-   }
-
-    private class MyHandler extends Handler {
-
-        static final int MESSAGE_GET_PREFERRED_NETWORK_TYPE = 0;
-        static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 1;
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MESSAGE_GET_PREFERRED_NETWORK_TYPE:
-                    handleGetPreferredNetworkTypeResponse(msg);
-                    break;
-
-                case MESSAGE_SET_PREFERRED_NETWORK_TYPE:
-                    handleSetPreferredNetworkTypeResponse(msg);
-                    break;
-            }
-        }
-
-        private void handleGetPreferredNetworkTypeResponse(Message msg) {
-            AsyncResult ar = (AsyncResult) msg.obj;
-
-            if (ar.exception == null) {
-                int type = ((int[])ar.result)[0];
-                if (type != Phone.NT_MODE_GSM_ONLY) {
-                    // Back to default
-                    type = getDefaultNetworkMode();
-                }
-                Log.i(LOG_TAG, "get preferred network type="+type);
-                setChecked(type == Phone.NT_MODE_GSM_ONLY);
-                android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
-                        android.provider.Settings.Global.PREFERRED_NETWORK_MODE, type);
-            } else {
-                // Weird state, disable the setting
-                Log.i(LOG_TAG, "get preferred network type, exception="+ar.exception);
-                setEnabled(false);
-            }
-        }
-
-        private void handleSetPreferredNetworkTypeResponse(Message msg) {
-            AsyncResult ar = (AsyncResult) msg.obj;
-
-            if (ar.exception != null) {
-                // Yikes, error, disable the setting
-                setEnabled(false);
-                // Set UI to current state
-                Log.i(LOG_TAG, "set preferred network type, exception=" + ar.exception);
-                mPhone.getPreferredNetworkType(obtainMessage(MESSAGE_GET_PREFERRED_NETWORK_TYPE));
-            } else {
-                Log.i(LOG_TAG, "set preferred network type done");
-            }
-        }
-    }
-}