17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/*
27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2006 The Android Open Source Project
37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon *
47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License");
57d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you may not use this file except in compliance with the License.
67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * You may obtain a copy of the License at
77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon *
87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon *      http://www.apache.org/licenses/LICENSE-2.0
97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon *
107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Unless required by applicable law or agreed to in writing, software
117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS,
127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * See the License for the specific language governing permissions and
147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * limitations under the License.
157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */
167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpackage com.android.phone;
187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
195f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWestimport com.android.ims.ImsManager;
207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.Phone;
217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.PhoneConstants;
223c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport com.android.internal.telephony.PhoneFactory;
237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.TelephonyIntents;
247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.TelephonyProperties;
257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
263c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport java.util.ArrayList;
27e31492a6d1a9c6eada391f49d89bec7046961ffeWink Savilleimport java.util.Iterator;
283c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport java.util.List;
293c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.ActionBar;
317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.AlertDialog;
3248f6fea3612c04f6e2980705409756595f57805bPauloftheWestimport android.content.BroadcastReceiver;
337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Context;
347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.DialogInterface;
357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Intent;
3648f6fea3612c04f6e2980705409756595f57805bPauloftheWestimport android.content.IntentFilter;
372127037244d2d035fd3f5f250067c2225647f996Sungmin Choiimport android.content.pm.PackageManager.NameNotFoundException;
387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.net.Uri;
397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.AsyncResult;
407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle;
417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Handler;
427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Message;
43c31f1f32963534763aaf82ae2544f3a94f13edcaJonathan Basseriimport android.os.PersistableBundle;
447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.SystemProperties;
455f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWestimport android.os.UserHandle;
46a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynoldsimport android.os.UserManager;
477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.ListPreference;
487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.Preference;
497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.PreferenceActivity;
507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.PreferenceScreen;
515f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWestimport android.preference.SwitchPreference;
527060fbfbc3528f7f78cb8811820bb9d02cf771baJonathan Basseriimport android.telephony.CarrierConfigManager;
5324c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohenimport android.telephony.PhoneStateListener;
543c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport android.telephony.SubscriptionInfo;
5589e89d47f249a1e910d6d726dbfcbedfc193cb83Derek Tanimport android.telephony.SubscriptionManager;
567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.telephony.TelephonyManager;
577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.TextUtils;
587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log;
597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.MenuItem;
603c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport android.view.View;
613c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport android.widget.TabHost.OnTabChangeListener;
623c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport android.widget.TabHost.TabContentFactory;
633c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWestimport android.widget.TabHost.TabSpec;
64c31f1f32963534763aaf82ae2544f3a94f13edcaJonathan Basseriimport android.widget.TabHost;
657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/**
677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * "Mobile network settings" screen.  This preference screen lets you
687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * enable/disable mobile data, and control data roaming and other
697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * network-specific mobile data features.  It's used on non-voice-capable
707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * tablets as well as regular phone devices.
717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon *
727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Note that this PreferenceActivity is part of the phone app, even though
737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you reach it from the "Wireless & Networks" section of the main
747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Settings app.  It's not part of the "Call settings" hierarchy that's
757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * available from the Phone app (see CallFeaturesSetting for that.)
767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */
777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class MobileNetworkSettings extends PreferenceActivity
787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        implements DialogInterface.OnClickListener,
797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener{
807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    // debug data
827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String LOG_TAG = "NetworkSettings";
832127037244d2d035fd3f5f250067c2225647f996Sungmin Choi    private static final boolean DBG = true;
847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public static final int REQUEST_CODE_EXIT_ECM = 17;
857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
86e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    // Number of active Subscriptions to show tabs
87e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private static final int TAB_THRESHOLD = 2;
88e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    //String keys for preference lookup
907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String BUTTON_ROAMING_KEY = "button_roaming_key";
927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String BUTTON_CDMA_LTE_DATA_SERVICE_KEY = "cdma_lte_data_service_key";
932127037244d2d035fd3f5f250067c2225647f996Sungmin Choi    private static final String BUTTON_ENABLED_NETWORKS_KEY = "enabled_networks_key";
945f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest    private static final String BUTTON_4G_LTE_KEY = "enhanced_4g_lte";
955f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest    private static final String BUTTON_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
96dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    private static final String BUTTON_APN_EXPAND_KEY = "button_apn_key";
97dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    private static final String BUTTON_OPERATOR_SELECTION_EXPAND_KEY = "button_carrier_sel_key";
98dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    private static final String BUTTON_CARRIER_SETTINGS_KEY = "carrier_settings_key";
99dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    private static final String BUTTON_CDMA_SYSTEM_SELECT_KEY = "cdma_system_select_key";
1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    static final int preferredNetworkMode = Phone.PREFERRED_NT_MODE;
1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    //Information about logical "up" Activity
1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String UP_ACTIVITY_PACKAGE = "com.android.settings";
1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String UP_ACTIVITY_CLASS =
1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            "com.android.settings.Settings$WirelessSettingsActivity";
1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1083ab207e3711ebd717f9cfe7412018c51ae1c8131Wink Saville    private SubscriptionManager mSubscriptionManager;
1093ab207e3711ebd717f9cfe7412018c51ae1c8131Wink Saville
1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    //UI objects
1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private ListPreference mButtonPreferredNetworkMode;
1122127037244d2d035fd3f5f250067c2225647f996Sungmin Choi    private ListPreference mButtonEnabledNetworks;
1135f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest    private SwitchPreference mButtonDataRoam;
1145f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest    private SwitchPreference mButton4glte;
1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private Preference mLteDataServicePref;
1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String iface = "rmnet0"; //TODO: this will go away
118e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private List<SubscriptionInfo> mActiveSubInfos;
1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
120a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds    private UserManager mUm;
1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private Phone mPhone;
1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private MyHandler mHandler;
1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private boolean mOkClicked;
1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1259443cdcbda67d657773398a262022a04f3e27841Wink Saville    // We assume the the value returned by mTabHost.getCurrentTab() == slotId
1263c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    private TabHost mTabHost;
1273c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    //GsmUmts options and Cdma options
1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    GsmUmtsOptions mGsmUmtsOptions;
1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    CdmaOptions mCdmaOptions;
1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private Preference mClickedPreference;
1332127037244d2d035fd3f5f250067c2225647f996Sungmin Choi    private boolean mShow4GForLTE;
1346bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi    private boolean mIsGlobalCdma;
135a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds    private boolean mUnavailable;
1367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
13724c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
13824c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen        /*
139a51d4ef5f89b915ce58d55b327bcd1c52ab4b435Etan Cohen         * Enable/disable the 'Enhanced 4G LTE Mode' when in/out of a call
140a51d4ef5f89b915ce58d55b327bcd1c52ab4b435Etan Cohen         * and depending on TTY mode and TTY support over VoLTE.
14124c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen         * @see android.telephony.PhoneStateListener#onCallStateChanged(int,
14224c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen         * java.lang.String)
14324c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen         */
14424c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen        @Override
14524c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen        public void onCallStateChanged(int state, String incomingNumber) {
14624c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen            if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
147579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak            boolean enabled = (state == TelephonyManager.CALL_STATE_IDLE) &&
148579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak                    ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext());
14924c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen            Preference pref = getPreferenceScreen().findPreference(BUTTON_4G_LTE_KEY);
150579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak            if (pref != null) pref.setEnabled(enabled && hasActiveSubscriptions());
15124c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen        }
15224c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen    };
15324c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen
15448f6fea3612c04f6e2980705409756595f57805bPauloftheWest    private final BroadcastReceiver mPhoneChangeReceiver = new PhoneChangeReceiver();
15548f6fea3612c04f6e2980705409756595f57805bPauloftheWest
15648f6fea3612c04f6e2980705409756595f57805bPauloftheWest    private class PhoneChangeReceiver extends BroadcastReceiver {
15748f6fea3612c04f6e2980705409756595f57805bPauloftheWest        @Override
15848f6fea3612c04f6e2980705409756595f57805bPauloftheWest        public void onReceive(Context context, Intent intent) {
159e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (DBG) log("onReceive:");
16048f6fea3612c04f6e2980705409756595f57805bPauloftheWest            // When the radio changes (ex: CDMA->GSM), refresh all options.
16148f6fea3612c04f6e2980705409756595f57805bPauloftheWest            mGsmUmtsOptions = null;
16248f6fea3612c04f6e2980705409756595f57805bPauloftheWest            mCdmaOptions = null;
16348f6fea3612c04f6e2980705409756595f57805bPauloftheWest            updateBody();
16448f6fea3612c04f6e2980705409756595f57805bPauloftheWest        }
16548f6fea3612c04f6e2980705409756595f57805bPauloftheWest    }
16648f6fea3612c04f6e2980705409756595f57805bPauloftheWest
1677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    //This is a method implemented for DialogInterface.OnClickListener.
1687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    //  Used to dismiss the dialogs when they come up.
1697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public void onClick(DialogInterface dialog, int which) {
1707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (which == DialogInterface.BUTTON_POSITIVE) {
1717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mPhone.setDataRoamingEnabled(true);
1727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mOkClicked = true;
1737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else {
1747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Reset the toggle
1757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mButtonDataRoam.setChecked(false);
1767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
1777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
1787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1795f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest    @Override
1807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public void onDismiss(DialogInterface dialog) {
1817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // Assuming that onClick gets called first
182adc650731e52b96afe7ea695f8ca8d40db9c2752PauloftheWest        mButtonDataRoam.setChecked(mOkClicked);
1837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
1847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    /**
1867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * Invoked on each preference click in this hierarchy, overrides
1877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * PreferenceActivity's implementation.  Used to make sure we track the
1887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * preference click events.
1897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     */
1907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
1917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
1927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        /** TODO: Refactor and get rid of the if's using subclasses */
1933c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        final int phoneSubId = mPhone.getSubId();
1945f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        if (preference.getKey().equals(BUTTON_4G_LTE_KEY)) {
1955f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            return true;
1965f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        } else if (mGsmUmtsOptions != null &&
1977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mGsmUmtsOptions.preferenceTreeClick(preference) == true) {
1987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            return true;
1997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else if (mCdmaOptions != null &&
2007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                   mCdmaOptions.preferenceTreeClick(preference) == true) {
2017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (Boolean.parseBoolean(
2027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
2037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mClickedPreference = preference;
2057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                // In ECM mode launch ECM app dialog
2077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                startActivityForResult(
2087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
2097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    REQUEST_CODE_EXIT_ECM);
2107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
2117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            return true;
2127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else if (preference == mButtonPreferredNetworkMode) {
2137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //displays the value taken from the Settings.System
2147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            int settingsNetworkMode = android.provider.Settings.Global.getInt(mPhone.getContext().
2153c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    getContentResolver(),
2163c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
2177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    preferredNetworkMode);
2187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
2197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            return true;
2207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else if (preference == mLteDataServicePref) {
2217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            String tmpl = android.provider.Settings.Global.getString(getContentResolver(),
2227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
2237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (!TextUtils.isEmpty(tmpl)) {
2247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                TelephonyManager tm = (TelephonyManager) getSystemService(
2257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        Context.TELEPHONY_SERVICE);
2267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                String imsi = tm.getSubscriberId();
2277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                if (imsi == null) {
2287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    imsi = "";
2297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                }
2307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                final String url = TextUtils.isEmpty(tmpl) ? null
2317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        : TextUtils.expandTemplate(tmpl, imsi).toString();
2327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
2337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                startActivity(intent);
2347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            } else {
2357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                android.util.Log.e(LOG_TAG, "Missing SETUP_PREPAID_DATA_SERVICE_URL");
2367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
2377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            return true;
2382127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        }  else if (preference == mButtonEnabledNetworks) {
2392127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            int settingsNetworkMode = android.provider.Settings.Global.getInt(mPhone.getContext().
240579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak                            getContentResolver(),
2413c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
2422127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    preferredNetworkMode);
2432127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
2442127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            return true;
245adc650731e52b96afe7ea695f8ca8d40db9c2752PauloftheWest        } else if (preference == mButtonDataRoam) {
246adc650731e52b96afe7ea695f8ca8d40db9c2752PauloftheWest            // Do not disable the preference screen if the user clicks Data roaming.
247adc650731e52b96afe7ea695f8ca8d40db9c2752PauloftheWest            return true;
2487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else {
2497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // if the button is anything but the simple toggle preference,
2507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // we'll need to disable all preferences to reject all click
2517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // events until the sub-activity's UI comes up.
2527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            preferenceScreen.setEnabled(false);
2537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Let the intents be launched by the Preference manager
2547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            return false;
2557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
2567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
2577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
258e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener
259e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            = new SubscriptionManager.OnSubscriptionsChangedListener() {
260e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        @Override
261e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        public void onSubscriptionsChanged() {
262e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (DBG) log("onSubscriptionsChanged:");
263e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            initializeSubscriptions();
264e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
265e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    };
266e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
267e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private void initializeSubscriptions() {
268e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        int currentTab = 0;
269e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("initializeSubscriptions:+");
270e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
271e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        // Before updating the the active subscription list check
272e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        // if tab updating is needed as the list is changing.
273e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        List<SubscriptionInfo> sil = mSubscriptionManager.getActiveSubscriptionInfoList();
274e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        TabState state = isUpdateTabsNeeded(sil);
275e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
276e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        // Update to the active subscription list
277e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mActiveSubInfos.clear();
278e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (sil != null) {
279e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            mActiveSubInfos.addAll(sil);
280c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe            // If there is only 1 sim then currenTab should represent slot no. of the sim.
281c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe            if (sil.size() == 1) {
282c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe                currentTab = sil.get(0).getSimSlotIndex();
283c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe            }
284e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
285e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
286e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        switch (state) {
287e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            case UPDATE: {
288e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                if (DBG) log("initializeSubscriptions: UPDATE");
289e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                currentTab = mTabHost != null ? mTabHost.getCurrentTab() : 0;
290e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
291ab07b92dac9063bf05e98384e2834f0b06fb8382Sanket Padawe                setContentView(com.android.internal.R.layout.common_tab_settings);
292e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
293e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                mTabHost = (TabHost) findViewById(android.R.id.tabhost);
294e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                mTabHost.setup();
295e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
296e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                // Update the tabName. Since the mActiveSubInfos are in slot order
297e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                // we can iterate though the tabs and subscription info in one loop. But
298e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                // we need to handle the case where a slot may be empty.
299e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
300e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                Iterator<SubscriptionInfo> siIterator = mActiveSubInfos.listIterator();
301e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                SubscriptionInfo si = siIterator.hasNext() ? siIterator.next() : null;
302e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                for (int simSlotIndex = 0; simSlotIndex  < mActiveSubInfos.size(); simSlotIndex++) {
303e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    String tabName;
304e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    if (si != null && si.getSimSlotIndex() == simSlotIndex) {
305e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                        // Slot is not empty and we match
306e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                        tabName = String.valueOf(si.getDisplayName());
307e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                        si = siIterator.hasNext() ? siIterator.next() : null;
308e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    } else {
309e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                        // Slot is empty, set name to unknown
310e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                        tabName = getResources().getString(R.string.unknown);
311e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    }
312e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    if (DBG) {
313e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                        log("initializeSubscriptions: tab=" + simSlotIndex + " name=" + tabName);
314e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    }
315e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
316e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    mTabHost.addTab(buildTabSpec(String.valueOf(simSlotIndex), tabName));
317e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                }
318e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
319e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                mTabHost.setOnTabChangedListener(mTabListener);
320e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                mTabHost.setCurrentTab(currentTab);
321e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                break;
322e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            }
323e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            case NO_TABS: {
324e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                if (DBG) log("initializeSubscriptions: NO_TABS");
325e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
326e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                if (mTabHost != null) {
327e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    mTabHost.clearAllTabs();
328e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    mTabHost = null;
329e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                }
330ab07b92dac9063bf05e98384e2834f0b06fb8382Sanket Padawe                setContentView(com.android.internal.R.layout.common_tab_settings);
331e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                break;
332e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            }
333e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            case DO_NOTHING: {
334e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                if (DBG) log("initializeSubscriptions: DO_NOTHING");
335c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe                if (mTabHost != null) {
336c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe                    currentTab = mTabHost.getCurrentTab();
337c0215edcd2e9964ac8faf13d6b3d89228fb4ad05Sanket Padawe                }
338e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                break;
339e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            }
340e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
341e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        updatePhone(currentTab);
342e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        updateBody();
343e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("initializeSubscriptions:-");
344e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    }
345e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
346e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private enum TabState {
347e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        NO_TABS, UPDATE, DO_NOTHING
348e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    }
349e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private TabState isUpdateTabsNeeded(List<SubscriptionInfo> newSil) {
350e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        TabState state = TabState.DO_NOTHING;
351e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (newSil == null) {
352e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (mActiveSubInfos.size() >= TAB_THRESHOLD) {
353e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                if (DBG) log("isUpdateTabsNeeded: NO_TABS, size unknown and was tabbed");
354e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                state = TabState.NO_TABS;
355e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            }
356e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        } else if (newSil.size() < TAB_THRESHOLD && mActiveSubInfos.size() >= TAB_THRESHOLD) {
357e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (DBG) log("isUpdateTabsNeeded: NO_TABS, size went to small");
358e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            state = TabState.NO_TABS;
359e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        } else if (newSil.size() >= TAB_THRESHOLD && mActiveSubInfos.size() < TAB_THRESHOLD) {
360e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (DBG) log("isUpdateTabsNeeded: UPDATE, size changed");
361e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            state = TabState.UPDATE;
362e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        } else if (newSil.size() >= TAB_THRESHOLD) {
363e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            Iterator<SubscriptionInfo> siIterator = mActiveSubInfos.iterator();
364e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            for(SubscriptionInfo newSi : newSil) {
365e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                SubscriptionInfo curSi = siIterator.next();
366e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                if (!newSi.getDisplayName().equals(curSi.getDisplayName())) {
367e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    if (DBG) log("isUpdateTabsNeeded: UPDATE, new name=" + newSi.getDisplayName());
368e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    state = TabState.UPDATE;
369e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    break;
370e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                }
371e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            }
372e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
373e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) {
374e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            log("isUpdateTabsNeeded:- " + state
375e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                + " newSil.size()=" + ((newSil != null) ? newSil.size() : 0)
376e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                + " mActiveSubInfos.size()=" + mActiveSubInfos.size());
377e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
378e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        return state;
379e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    }
380e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
3813c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    private OnTabChangeListener mTabListener = new OnTabChangeListener() {
3823c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        @Override
3833c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        public void onTabChanged(String tabId) {
384e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (DBG) log("onTabChanged:");
3853c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            // The User has changed tab; update the body.
386e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            updatePhone(Integer.parseInt(tabId));
3873c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            updateBody();
3883c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        }
3893c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    };
3903c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
391e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    private void updatePhone(int slotId) {
392c45557dbc4b7dc1012fd893b7fe75d37402bff83Stuart Scott        final SubscriptionInfo sir = mSubscriptionManager
393c45557dbc4b7dc1012fd893b7fe75d37402bff83Stuart Scott                .getActiveSubscriptionInfoForSimSlotIndex(slotId);
394e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (sir != null) {
395e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            mPhone = PhoneFactory.getPhone(
396e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville                    SubscriptionManager.getPhoneId(sir.getSubscriptionId()));
397e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
398e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (mPhone == null) {
399e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            // Do the best we can
400e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            mPhone = PhoneGlobals.getPhone();
401e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
402e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("updatePhone:- slotId=" + slotId + " sir=" + sir);
403e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville    }
404e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
4053c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    private TabContentFactory mEmptyTabContent = new TabContentFactory() {
4063c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        @Override
4073c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        public View createTabContent(String tag) {
4083c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            return new View(mTabHost.getContext());
4093c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        }
4103c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    };
4113c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4123c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    private TabSpec buildTabSpec(String tag, String title) {
4133c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        return mTabHost.newTabSpec(tag).setIndicator(title).setContent(
4143c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                mEmptyTabContent);
4153c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    }
4163c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
4187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onCreate(Bundle icicle) {
419e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("onCreate:+");
4205f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        setTheme(R.style.Theme_Material_Settings);
4217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        super.onCreate(icicle);
4223c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4233ab207e3711ebd717f9cfe7412018c51ae1c8131Wink Saville        mHandler = new MyHandler();
4243ab207e3711ebd717f9cfe7412018c51ae1c8131Wink Saville        mUm = (UserManager) getSystemService(Context.USER_SERVICE);
4253ab207e3711ebd717f9cfe7412018c51ae1c8131Wink Saville        mSubscriptionManager = SubscriptionManager.from(this);
4263c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
427a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds        if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) {
428a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds            mUnavailable = true;
429a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds            setContentView(R.layout.telephony_disallowed_preference_screen);
430a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds            return;
431a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds        }
432a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds
433a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds        addPreferencesFromResource(R.xml.network_setting);
4347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
4355f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        mButton4glte = (SwitchPreference)findPreference(BUTTON_4G_LTE_KEY);
4365f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        mButton4glte.setOnPreferenceChangeListener(this);
4375f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest
4382127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        try {
4392127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            Context con = createPackageContext("com.android.systemui", 0);
4402127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            int id = con.getResources().getIdentifier("config_show4GForLTE",
4412127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    "bool", "com.android.systemui");
4422127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            mShow4GForLTE = con.getResources().getBoolean(id);
4432127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        } catch (NameNotFoundException e) {
4442127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            loge("NameNotFoundException for show4GFotLTE");
4452127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            mShow4GForLTE = false;
4462127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        }
4472127037244d2d035fd3f5f250067c2225647f996Sungmin Choi
4487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //get UI object references
4497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        PreferenceScreen prefSet = getPreferenceScreen();
4507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
4515f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        mButtonDataRoam = (SwitchPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
4527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(
4537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                BUTTON_PREFERED_NETWORK_MODE);
4542127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        mButtonEnabledNetworks = (ListPreference) prefSet.findPreference(
4552127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                BUTTON_ENABLED_NETWORKS_KEY);
4565f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        mButtonDataRoam.setOnPreferenceChangeListener(this);
4572127037244d2d035fd3f5f250067c2225647f996Sungmin Choi
4587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mLteDataServicePref = prefSet.findPreference(BUTTON_CDMA_LTE_DATA_SERVICE_KEY);
4597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
460e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        // Initialize mActiveSubInfo
461e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        int max = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
462e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mActiveSubInfos = new ArrayList<SubscriptionInfo>(max);
4633c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
464e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        initializeSubscriptions();
46548f6fea3612c04f6e2980705409756595f57805bPauloftheWest
46648f6fea3612c04f6e2980705409756595f57805bPauloftheWest        IntentFilter intentFilter = new IntentFilter(
46748f6fea3612c04f6e2980705409756595f57805bPauloftheWest                TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
46848f6fea3612c04f6e2980705409756595f57805bPauloftheWest        registerReceiver(mPhoneChangeReceiver, intentFilter);
469e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("onCreate:-");
4703c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    }
4713c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4723c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    @Override
47323ec4d6757e5e5b115278a44a7943b878e5ff683Amit Mahajan    protected void onDestroy() {
47423ec4d6757e5e5b115278a44a7943b878e5ff683Amit Mahajan        super.onDestroy();
47523ec4d6757e5e5b115278a44a7943b878e5ff683Amit Mahajan        unregisterReceiver(mPhoneChangeReceiver);
47623ec4d6757e5e5b115278a44a7943b878e5ff683Amit Mahajan    }
47723ec4d6757e5e5b115278a44a7943b878e5ff683Amit Mahajan
47823ec4d6757e5e5b115278a44a7943b878e5ff683Amit Mahajan    @Override
4793c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    protected void onResume() {
4803c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        super.onResume();
481e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("onResume:+");
4823c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4833c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        if (mUnavailable) {
484e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            if (DBG) log("onResume:- ignore mUnavailable == false");
4853c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            return;
4863c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        }
4873c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4883c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        // upon resumption from the sub-activity, make sure we re-enable the
4893c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        // preferences.
4903c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        getPreferenceScreen().setEnabled(true);
4913c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
4923c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        // Set UI state in onResume because a user could go home, launch some
4933c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        // app to change this setting's backend, and re-launch this settings app
4943c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        // and the UI state would be inconsistent with actual state
4953c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        mButtonDataRoam.setChecked(mPhone.getDataRoamingEnabled());
4963c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
497410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        if (getPreferenceScreen().findPreference(BUTTON_PREFERED_NETWORK_MODE) != null
498410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                || getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null)  {
499410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa            updatePreferredNetworkUIFromDb();
5003c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        }
50124c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen
50231a0c71081d871b3162413c050188921498fff50Etan Cohen        if (ImsManager.isVolteEnabledByPlatform(this)
50331a0c71081d871b3162413c050188921498fff50Etan Cohen                && ImsManager.isVolteProvisionedOnDevice(this)) {
50424c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen            TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
50524c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen            tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
50624c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen        }
507a51d4ef5f89b915ce58d55b327bcd1c52ab4b435Etan Cohen
50892ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen        // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
50992ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen        boolean enh4glteMode = ImsManager.isEnhanced4gLteModeSettingEnabledByUser(this)
51092ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen                && ImsManager.isNonTtyOrTtyOnVolteEnabled(this);
51192ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen        mButton4glte.setChecked(enh4glteMode);
512e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
513f67832f67f330e645ea6109feb108bf7dd854155Wink Saville        mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
514e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
515e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("onResume:-");
516e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
5173c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    }
5183c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
519579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak    private boolean hasActiveSubscriptions() {
520579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak        return mActiveSubInfos.size() > 0;
521579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak    }
522579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak
5233c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest    private void updateBody() {
5243c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        final Context context = getApplicationContext();
5253c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        PreferenceScreen prefSet = getPreferenceScreen();
5267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        boolean isLteOnCdma = mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
5273c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        final int phoneSubId = mPhone.getSubId();
5283c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
529ddb5d20f8bf79a464f4ec28e16941ab977c35331Wink Saville        if (DBG) {
530ddb5d20f8bf79a464f4ec28e16941ab977c35331Wink Saville            log("updateBody: isLteOnCdma=" + isLteOnCdma + " phoneSubId=" + phoneSubId);
531ddb5d20f8bf79a464f4ec28e16941ab977c35331Wink Saville        }
532ddb5d20f8bf79a464f4ec28e16941ab977c35331Wink Saville
5333c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        if (prefSet != null) {
5343c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            prefSet.removeAll();
5353c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            prefSet.addPreference(mButtonDataRoam);
5363c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            prefSet.addPreference(mButtonPreferredNetworkMode);
5373c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest            prefSet.addPreference(mButtonEnabledNetworks);
538e3c2f8ff055bda4932d10b96c82a494ae67e6424PauloftheWest            prefSet.addPreference(mButton4glte);
5393c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        }
5403c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
5413c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        int settingsNetworkMode = android.provider.Settings.Global.getInt(
5423c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                mPhone.getContext().getContentResolver(),
5433c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
5443c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                preferredNetworkMode);
5453c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
546c31f1f32963534763aaf82ae2544f3a94f13edcaJonathan Basseri        PersistableBundle carrierConfig =
547c31f1f32963534763aaf82ae2544f3a94f13edcaJonathan Basseri                PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());
5487060fbfbc3528f7f78cb8811820bb9d02cf771baJonathan Basseri        mIsGlobalCdma = isLteOnCdma
5499504c6b5c5c7072f72d8a9e6df59dbda8a6ccbe4Jonathan Basseri                && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
550a9ba9d4f7062762343c65fede42d0e60cfacf404Junda Liu        if (carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {
55189e89d47f249a1e910d6d726dbfcbedfc193cb83Derek Tan            prefSet.removePreference(mButtonPreferredNetworkMode);
55289e89d47f249a1e910d6d726dbfcbedfc193cb83Derek Tan            prefSet.removePreference(mButtonEnabledNetworks);
55389e89d47f249a1e910d6d726dbfcbedfc193cb83Derek Tan            prefSet.removePreference(mLteDataServicePref);
5549504c6b5c5c7072f72d8a9e6df59dbda8a6ccbe4Jonathan Basseri        } else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL) == true) {
5552127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            prefSet.removePreference(mButtonEnabledNetworks);
5567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // set the listener for the mButtonPreferredNetworkMode list preference so we can issue
5577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // change Preferred Network Mode.
5587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mButtonPreferredNetworkMode.setOnPreferenceChangeListener(this);
5597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
5607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mCdmaOptions = new CdmaOptions(this, prefSet, mPhone);
561375e27d8a9dff087ed6e2e6be3738e708cd423f6PauloftheWest            mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet, phoneSubId);
5627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else {
5634e9f0aa23c3304cb2bb964ef41fe0866ee15b57cSungmin Choi            prefSet.removePreference(mButtonPreferredNetworkMode);
5648ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan            final int phoneType = mPhone.getPhoneType();
5657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
5668ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                int lteForced = android.provider.Settings.Global.getInt(
5678ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        mPhone.getContext().getContentResolver(),
5688ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        android.provider.Settings.Global.LTE_SERVICE_FORCED + mPhone.getSubId(),
5698ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        0);
5708ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan
5712127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                if (isLteOnCdma) {
5728ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                    if (lteForced == 0) {
5738ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        mButtonEnabledNetworks.setEntries(
5748ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                R.array.enabled_networks_cdma_choices);
5758ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        mButtonEnabledNetworks.setEntryValues(
5768ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                R.array.enabled_networks_cdma_values);
5778ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                    } else {
5788ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        switch (settingsNetworkMode) {
5798ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_CDMA:
5808ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_CDMA_NO_EVDO:
5818ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_EVDO_NO_CDMA:
5828ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                mButtonEnabledNetworks.setEntries(
5838ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                        R.array.enabled_networks_cdma_no_lte_choices);
5848ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                mButtonEnabledNetworks.setEntryValues(
5858ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                        R.array.enabled_networks_cdma_no_lte_values);
5868ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                break;
5878ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_GLOBAL:
5888ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
5898ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
5908ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            case Phone.NT_MODE_LTE_ONLY:
5918ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                mButtonEnabledNetworks.setEntries(
5928ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                        R.array.enabled_networks_cdma_only_lte_choices);
5938ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                mButtonEnabledNetworks.setEntryValues(
5948ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                        R.array.enabled_networks_cdma_only_lte_values);
5958ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                break;
5968ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                            default:
5978ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                mButtonEnabledNetworks.setEntries(
5988ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                        R.array.enabled_networks_cdma_choices);
5998ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                mButtonEnabledNetworks.setEntryValues(
6008ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                        R.array.enabled_networks_cdma_values);
6018ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                                break;
6028ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                        }
6038ea782a7a0edd1ec96b9c98290554bb775aecfaaAmit Mahajan                    }
6042127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                }
6057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mCdmaOptions = new CdmaOptions(this, prefSet, mPhone);
60648f6fea3612c04f6e2980705409756595f57805bPauloftheWest
60748f6fea3612c04f6e2980705409756595f57805bPauloftheWest                // In World mode force a refresh of GSM Options.
60848f6fea3612c04f6e2980705409756595f57805bPauloftheWest                if (isWorldMode()) {
60948f6fea3612c04f6e2980705409756595f57805bPauloftheWest                    mGsmUmtsOptions = null;
61048f6fea3612c04f6e2980705409756595f57805bPauloftheWest                }
6117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
6129504c6b5c5c7072f72d8a9e6df59dbda8a6ccbe4Jonathan Basseri                if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
6132127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        && !getResources().getBoolean(R.bool.config_enabled_lte)) {
6142127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntries(
6152127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_except_gsm_lte_choices);
6162127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntryValues(
6172127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_except_gsm_lte_values);
6189504c6b5c5c7072f72d8a9e6df59dbda8a6ccbe4Jonathan Basseri                } else if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
6192127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    int select = (mShow4GForLTE == true) ?
6207060fbfbc3528f7f78cb8811820bb9d02cf771baJonathan Basseri                            R.array.enabled_networks_except_gsm_4g_choices
6217060fbfbc3528f7f78cb8811820bb9d02cf771baJonathan Basseri                            : R.array.enabled_networks_except_gsm_choices;
6222127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntries(select);
6232127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntryValues(
6242127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_except_gsm_values);
6252127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                } else if (!getResources().getBoolean(R.bool.config_enabled_lte)) {
6262127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntries(
6272127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_except_lte_choices);
6282127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntryValues(
6292127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_except_lte_values);
6306bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                } else if (mIsGlobalCdma) {
6312127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntries(
6322127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_cdma_choices);
6332127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntryValues(
6342127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_cdma_values);
6352127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                } else {
6362127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    int select = (mShow4GForLTE == true) ? R.array.enabled_networks_4g_choices
6377060fbfbc3528f7f78cb8811820bb9d02cf771baJonathan Basseri                            : R.array.enabled_networks_choices;
6382127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntries(select);
6392127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mButtonEnabledNetworks.setEntryValues(
6402127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                            R.array.enabled_networks_values);
6412127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                }
642375e27d8a9dff087ed6e2e6be3738e708cd423f6PauloftheWest                mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet, phoneSubId);
6437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            } else {
6447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                throw new IllegalStateException("Unexpected phone type: " + phoneType);
6457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
6463a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            if (isWorldMode()) {
6473a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                mButtonEnabledNetworks.setEntries(
6483a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                        R.array.preferred_network_mode_choices_world_mode);
6493a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                mButtonEnabledNetworks.setEntryValues(
6503a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                        R.array.preferred_network_mode_values_world_mode);
6513a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            }
6522127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            mButtonEnabledNetworks.setOnPreferenceChangeListener(this);
6532127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            if (DBG) log("settingsNetworkMode: " + settingsNetworkMode);
6547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
6557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
6567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        final boolean missingDataServiceUrl = TextUtils.isEmpty(
6577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                android.provider.Settings.Global.getString(getContentResolver(),
6587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        android.provider.Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL));
6597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (!isLteOnCdma || missingDataServiceUrl) {
6607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            prefSet.removePreference(mLteDataServicePref);
6617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else {
6627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            android.util.Log.d(LOG_TAG, "keep ltePref");
6637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
6647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
665f5f0daec7eee6b1e27dd98fdd88bc54fa72d4bceEtan Cohen        // Enable enhanced 4G LTE mode settings depending on whether exists on platform
66631a0c71081d871b3162413c050188921498fff50Etan Cohen        if (!(ImsManager.isVolteEnabledByPlatform(this)
66731a0c71081d871b3162413c050188921498fff50Etan Cohen                && ImsManager.isVolteProvisionedOnDevice(this))) {
668f830f760271fe847fa20085e48380aaf17c6869dHyejin Kim            Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY);
669f830f760271fe847fa20085e48380aaf17c6869dHyejin Kim            if (pref != null) {
670f830f760271fe847fa20085e48380aaf17c6869dHyejin Kim                prefSet.removePreference(pref);
671f830f760271fe847fa20085e48380aaf17c6869dHyejin Kim            }
672f830f760271fe847fa20085e48380aaf17c6869dHyejin Kim        }
673f830f760271fe847fa20085e48380aaf17c6869dHyejin Kim
6747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        ActionBar actionBar = getActionBar();
6757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (actionBar != null) {
6767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // android.R.id.home will be triggered in onOptionsItemSelected()
6777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            actionBar.setDisplayHomeAsUpEnabled(true);
6787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
6795f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest
6805f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
6815f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        // Enable link to CMAS app settings depending on the value in config.xml.
6825f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        final boolean isCellBroadcastAppLinkEnabled = this.getResources().getBoolean(
6835f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                com.android.internal.R.bool.config_cellBroadcastAppLinks);
6845f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        if (isSecondaryUser || !isCellBroadcastAppLinkEnabled
6855f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
6865f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            PreferenceScreen root = getPreferenceScreen();
6875f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            Preference ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
6885f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            if (ps != null) {
6895f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                root.removePreference(ps);
6905f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            }
6915f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        }
692a4ca38a6127b9ce87240bffbddf0f095fbec233fJulia Reynolds
693e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        // Get the networkMode from Settings.System and displays it
6947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mButtonDataRoam.setChecked(mPhone.getDataRoamingEnabled());
6953c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode));
6963c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
6973c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        UpdatePreferredNetworkModeSummary(settingsNetworkMode);
6983c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        UpdateEnabledNetworksValueAndSummary(settingsNetworkMode);
699708cf312cbbd1ba7523574141e8ca419dc0778e4Sanket Padawe        // Display preferred network type based on what modem returns b/18676277
700708cf312cbbd1ba7523574141e8ca419dc0778e4Sanket Padawe        mPhone.setPreferredNetworkType(settingsNetworkMode, mHandler
701708cf312cbbd1ba7523574141e8ca419dc0778e4Sanket Padawe                .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
702e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
703e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        /**
704e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         * Enable/disable depending upon if there are any active subscriptions.
705e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         *
706e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         * I've decided to put this enable/disable code at the bottom as the
707e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         * code above works even when there are no active subscriptions, thus
708e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         * putting it afterwards is a smaller change. This can be refined later,
709e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         * but you do need to remember that this all needs to work when subscriptions
710e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         * change dynamically such as when hot swapping sims.
711e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville         */
712579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak        boolean hasActiveSubscriptions = hasActiveSubscriptions();
713579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak        TelephonyManager tm = (TelephonyManager) getSystemService(
714579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak                Context.TELEPHONY_SERVICE);
715579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak        boolean canChange4glte = (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) &&
716579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak                ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext());
717e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mButtonDataRoam.setEnabled(hasActiveSubscriptions);
718e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mButtonPreferredNetworkMode.setEnabled(hasActiveSubscriptions);
719e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mButtonEnabledNetworks.setEnabled(hasActiveSubscriptions);
720579ef55c610f88b1b8b78a1b69db599f9e0dfbf4Pavel Zhamaitsiak        mButton4glte.setEnabled(hasActiveSubscriptions && canChange4glte);
721e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mLteDataServicePref.setEnabled(hasActiveSubscriptions);
722e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        Preference ps;
723e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        PreferenceScreen root = getPreferenceScreen();
724e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
725e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (ps != null) {
726e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            ps.setEnabled(hasActiveSubscriptions);
727e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
728e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        ps = findPreference(BUTTON_APN_EXPAND_KEY);
729e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (ps != null) {
730e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            ps.setEnabled(hasActiveSubscriptions);
731e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
732e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        ps = findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY);
733e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (ps != null) {
734e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            ps.setEnabled(hasActiveSubscriptions);
735e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
736e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        ps = findPreference(BUTTON_CARRIER_SETTINGS_KEY);
737e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (ps != null) {
738e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            ps.setEnabled(hasActiveSubscriptions);
739e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
740e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        ps = findPreference(BUTTON_CDMA_SYSTEM_SELECT_KEY);
741e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (ps != null) {
742e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            ps.setEnabled(hasActiveSubscriptions);
743e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        }
7447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
7457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
7467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
7477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onPause() {
7487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        super.onPause();
749e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("onPause:+");
75024c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen
75131a0c71081d871b3162413c050188921498fff50Etan Cohen        if (ImsManager.isVolteEnabledByPlatform(this)
75231a0c71081d871b3162413c050188921498fff50Etan Cohen                && ImsManager.isVolteProvisionedOnDevice(this)) {
75324c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen            TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
75424c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen            tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
75524c7ea60ce73408f7e491be9c78950fe7db8f960Etan Cohen        }
756e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville
757e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        mSubscriptionManager
758f67832f67f330e645ea6109feb108bf7dd854155Wink Saville            .removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
759e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville        if (DBG) log("onPause:-");
7607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
7617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
7627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    /**
7637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * Implemented to support onPreferenceChangeListener to look for preference
7647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * changes specifically on CLIR.
7657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     *
7667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * @param preference is the preference to be changed, should be mButtonCLIR.
7677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * @param objValue should be the value of the selection, NOT its localized
7687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     * display value.
7697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon     */
7707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public boolean onPreferenceChange(Preference preference, Object objValue) {
7713c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest        final int phoneSubId = mPhone.getSubId();
7727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (preference == mButtonPreferredNetworkMode) {
7737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //NOTE onPreferenceChange seems to be called even if there is no change
7747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //Check if the button value is changed from the System.Setting
7757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mButtonPreferredNetworkMode.setValue((String) objValue);
7767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            int buttonNetworkMode;
7777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            buttonNetworkMode = Integer.valueOf((String) objValue).intValue();
7787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            int settingsNetworkMode = android.provider.Settings.Global.getInt(
7797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    mPhone.getContext().getContentResolver(),
7803c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
7813c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    preferredNetworkMode);
7827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (buttonNetworkMode != settingsNetworkMode) {
7837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                int modemNetworkMode;
7847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                // if new mode is invalid ignore it
7857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                switch (buttonNetworkMode) {
7867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_WCDMA_PREF:
7877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_GSM_ONLY:
7887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_WCDMA_ONLY:
7897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_GSM_UMTS:
7907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_CDMA:
7917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_CDMA_NO_EVDO:
7927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_EVDO_NO_CDMA:
7937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_GLOBAL:
7947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
7957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_LTE_GSM_WCDMA:
796e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby                    case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
7977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_LTE_ONLY:
7987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case Phone.NT_MODE_LTE_WCDMA:
7997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        // This is one of the modes we recognize
8007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        modemNetworkMode = buttonNetworkMode;
8017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        break;
8027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    default:
8037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        loge("Invalid Network Mode (" + buttonNetworkMode + ") chosen. Ignore.");
8047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        return true;
8057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                }
8067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
8077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
8083c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                        android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
8097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        buttonNetworkMode );
8107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                //Set the modem network mode
8117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
8127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
8137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
8142127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        } else if (preference == mButtonEnabledNetworks) {
8152127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            mButtonEnabledNetworks.setValue((String) objValue);
8162127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            int buttonNetworkMode;
8172127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            buttonNetworkMode = Integer.valueOf((String) objValue).intValue();
8182127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            if (DBG) log("buttonNetworkMode: " + buttonNetworkMode);
8192127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            int settingsNetworkMode = android.provider.Settings.Global.getInt(
8202127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    mPhone.getContext().getContentResolver(),
8213c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
8223c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                    preferredNetworkMode);
8232127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            if (buttonNetworkMode != settingsNetworkMode) {
8242127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                int modemNetworkMode;
8252127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                // if new mode is invalid ignore it
8262127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                switch (buttonNetworkMode) {
8272127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    case Phone.NT_MODE_WCDMA_PREF:
8282127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    case Phone.NT_MODE_GSM_ONLY:
8292127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    case Phone.NT_MODE_LTE_GSM_WCDMA:
830e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby                    case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
8312127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    case Phone.NT_MODE_CDMA:
8322127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    case Phone.NT_MODE_CDMA_NO_EVDO:
8332127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
8342127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        // This is one of the modes we recognize
8352127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        modemNetworkMode = buttonNetworkMode;
8362127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        break;
8372127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                    default:
8382127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        loge("Invalid Network Mode (" + buttonNetworkMode + ") chosen. Ignore.");
8392127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        return true;
8402127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                }
8412127037244d2d035fd3f5f250067c2225647f996Sungmin Choi
8426bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                UpdateEnabledNetworksValueAndSummary(buttonNetworkMode);
8432127037244d2d035fd3f5f250067c2225647f996Sungmin Choi
8442127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
8453c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest                        android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
8462127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        buttonNetworkMode );
8472127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                //Set the modem network mode
8482127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
8492127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                        .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
8502127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            }
8515f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        } else if (preference == mButton4glte) {
85292ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen            SwitchPreference enhanced4gModePref = (SwitchPreference) preference;
85392ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen            boolean enhanced4gMode = !enhanced4gModePref.isChecked();
85492ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen            enhanced4gModePref.setChecked(enhanced4gMode);
85592ecec7fb3c0a9a4881c91b830ca917f2c2d73beEtan Cohen            ImsManager.setEnhanced4gLteModeSetting(this, enhanced4gModePref.isChecked());
8565f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest        } else if (preference == mButtonDataRoam) {
8575f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
8585f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest
8595f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            //normally called on the toggle click
8605f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            if (!mButtonDataRoam.isChecked()) {
8615f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                // First confirm with a warning dialog about charges
8625f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                mOkClicked = false;
8635f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                new AlertDialog.Builder(this).setMessage(
8645f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                        getResources().getString(R.string.roaming_warning))
865539be08e169bb261fee3d1ba1f0d1a9af1659e55Sanket Padawe                        .setTitle(R.string.roaming_alert_title)
8665f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                        .setIconAttribute(android.R.attr.alertDialogIcon)
8675f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                        .setPositiveButton(android.R.string.yes, this)
8685f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                        .setNegativeButton(android.R.string.no, this)
8695f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                        .show()
8705f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                        .setOnDismissListener(this);
8715f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            } else {
8725f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest                mPhone.setDataRoamingEnabled(false);
8735f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            }
8745f907c3de6c24256c9157fed6412c9af45eb3c4bPauloftheWest            return true;
8757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
8767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
877c0fae3a9a63baaeea9e61d84553d95b857fef450PauloftheWest        updateBody();
8787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // always let the preference setting proceed.
8797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        return true;
8807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
8817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
8827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private class MyHandler extends Handler {
8837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
884410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 0;
8857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
8867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        @Override
8877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        public void handleMessage(Message msg) {
8887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            switch (msg.what) {
8897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case MESSAGE_SET_PREFERRED_NETWORK_TYPE:
8907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    handleSetPreferredNetworkTypeResponse(msg);
8917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
8927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
8937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
8947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
895410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        private void handleSetPreferredNetworkTypeResponse(Message msg) {
8967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            AsyncResult ar = (AsyncResult) msg.obj;
897410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa            final int phoneSubId = mPhone.getSubId();
8987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
8997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (ar.exception == null) {
900410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                int networkMode;
901410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                if (getPreferenceScreen().findPreference(BUTTON_PREFERED_NETWORK_MODE) != null)  {
902410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                    networkMode =  Integer.valueOf(
903410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                            mButtonPreferredNetworkMode.getValue()).intValue();
904410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                    android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
905410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                            android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
906410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                            networkMode );
9077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                }
908410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                if (getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null)  {
909410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                    networkMode = Integer.valueOf(
910410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                            mButtonEnabledNetworks.getValue()).intValue();
911410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                    android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
912410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                            android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
913410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                            networkMode );
9147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                }
915410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa            } else {
916410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                if (DBG) {
917410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                    log("handleSetPreferredNetworkTypeResponse: exception in setting network mode.");
9187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                }
919410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                updatePreferredNetworkUIFromDb();
9207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
9217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
922410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa    }
9237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
924410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa    private void updatePreferredNetworkUIFromDb() {
925410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        final int phoneSubId = mPhone.getSubId();
9267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
927410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        int settingsNetworkMode = android.provider.Settings.Global.getInt(
928410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                mPhone.getContext().getContentResolver(),
929410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
930410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                preferredNetworkMode);
9317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
932410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        if (DBG) {
933410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa            log("updatePreferredNetworkUIFromDb: settingsNetworkMode = " +
934410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa                    settingsNetworkMode);
9357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
936410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa
937410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        UpdatePreferredNetworkModeSummary(settingsNetworkMode);
938410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        UpdateEnabledNetworksValueAndSummary(settingsNetworkMode);
939410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        // changes the mButtonPreferredNetworkMode accordingly to settingsNetworkMode
940410f74211df682826d5366ac49748dd710da5a1eAbhishek Adappa        mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode));
9417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
9427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
9437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private void UpdatePreferredNetworkModeSummary(int NetworkMode) {
9447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        switch(NetworkMode) {
9457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_WCDMA_PREF:
9467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_wcdma_perf_summary);
9487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_GSM_ONLY:
9507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_gsm_only_summary);
9527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_WCDMA_ONLY:
9547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_wcdma_only_summary);
9567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_GSM_UMTS:
9587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_gsm_wcdma_summary);
9607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_CDMA:
9627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                switch (mPhone.getLteOnCdmaMode()) {
9637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case PhoneConstants.LTE_ON_CDMA_TRUE:
9647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        mButtonPreferredNetworkMode.setSummary(
9657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                            R.string.preferred_network_mode_cdma_summary);
9667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
9677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    case PhoneConstants.LTE_ON_CDMA_FALSE:
9687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    default:
9697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        mButtonPreferredNetworkMode.setSummary(
9707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                            R.string.preferred_network_mode_cdma_evdo_summary);
9717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        break;
9727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                }
9737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_CDMA_NO_EVDO:
9757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_cdma_only_summary);
9777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_EVDO_NO_CDMA:
9797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_evdo_only_summary);
9817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_LTE_ONLY:
9837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_lte_summary);
9857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_LTE_GSM_WCDMA:
9877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_lte_gsm_wcdma_summary);
9897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
9907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
9917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
9927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_lte_cdma_evdo_summary);
9937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
994e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby            case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
99594846fea8b88b76955982112cb4d0e3ce6672e51Amit Mahajan                if (mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA ||
99694846fea8b88b76955982112cb4d0e3ce6672e51Amit Mahajan                        mIsGlobalCdma ||
99794846fea8b88b76955982112cb4d0e3ce6672e51Amit Mahajan                        isWorldMode()) {
998af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                    mButtonPreferredNetworkMode.setSummary(
999af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                            R.string.preferred_network_mode_global_summary);
1000af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                } else {
1001af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                    mButtonPreferredNetworkMode.setSummary(
1002af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                            R.string.preferred_network_mode_lte_summary);
1003af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                }
10047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
10057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_GLOBAL:
10067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
10077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_cdma_evdo_gsm_wcdma_summary);
10087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
10097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case Phone.NT_MODE_LTE_WCDMA:
10107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
10117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_lte_wcdma_summary);
10127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
10137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            default:
10147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mButtonPreferredNetworkMode.setSummary(
10157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                        R.string.preferred_network_mode_global_summary);
10167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
10177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
10187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
10196bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi    private void UpdateEnabledNetworksValueAndSummary(int NetworkMode) {
10206bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi        switch (NetworkMode) {
10216bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi            case Phone.NT_MODE_WCDMA_ONLY:
10226bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi            case Phone.NT_MODE_GSM_UMTS:
10232127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_WCDMA_PREF:
10246bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                if (!mIsGlobalCdma) {
10256bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                    mButtonEnabledNetworks.setValue(
10266bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                            Integer.toString(Phone.NT_MODE_WCDMA_PREF));
1027b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                    mButtonEnabledNetworks.setSummary(R.string.network_3G);
10286bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                } else {
10296bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                    mButtonEnabledNetworks.setValue(
1030e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby                            Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
1031b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                    mButtonEnabledNetworks.setSummary(R.string.network_global);
10326bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                }
10332127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
10342127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_GSM_ONLY:
10356bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                if (!mIsGlobalCdma) {
10366bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                    mButtonEnabledNetworks.setValue(
10376bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                            Integer.toString(Phone.NT_MODE_GSM_ONLY));
1038b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                    mButtonEnabledNetworks.setSummary(R.string.network_2G);
10396bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                } else {
10406bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                    mButtonEnabledNetworks.setValue(
1041e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby                            Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
1042b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                    mButtonEnabledNetworks.setSummary(R.string.network_global);
10436bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                }
10442127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
10452127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_LTE_GSM_WCDMA:
1046dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                if (isWorldMode()) {
10473a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                    mButtonEnabledNetworks.setSummary(
10483a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                            R.string.preferred_network_mode_lte_gsm_umts_summary);
1049dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                    controlCdmaOptions(false);
1050dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                    controlGsmOptions(true);
10513a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                    break;
10523a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                }
10536bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi            case Phone.NT_MODE_LTE_ONLY:
10546bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi            case Phone.NT_MODE_LTE_WCDMA:
10556bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                if (!mIsGlobalCdma) {
10566bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                    mButtonEnabledNetworks.setValue(
10576bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                            Integer.toString(Phone.NT_MODE_LTE_GSM_WCDMA));
1058b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                    mButtonEnabledNetworks.setSummary((mShow4GForLTE == true)
1059b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                            ? R.string.network_4G : R.string.network_lte);
10606bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                } else {
10616bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                    mButtonEnabledNetworks.setValue(
1062e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby                            Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
1063b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                    mButtonEnabledNetworks.setSummary(R.string.network_global);
10646bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                }
10652127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
10662127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
1067dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                if (isWorldMode()) {
10683a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                    mButtonEnabledNetworks.setSummary(
10693a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                            R.string.preferred_network_mode_lte_cdma_summary);
1070dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                    controlCdmaOptions(true);
1071dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                    controlGsmOptions(false);
10723a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                } else {
10733a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                    mButtonEnabledNetworks.setValue(
10743a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                            Integer.toString(Phone.NT_MODE_LTE_CDMA_AND_EVDO));
10753a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                    mButtonEnabledNetworks.setSummary(R.string.network_lte);
10763a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                }
10772127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
10782127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_CDMA:
10796bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi            case Phone.NT_MODE_EVDO_NO_CDMA:
10802127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_GLOBAL:
10816bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                mButtonEnabledNetworks.setValue(
10826bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                        Integer.toString(Phone.NT_MODE_CDMA));
1083b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                mButtonEnabledNetworks.setSummary(R.string.network_3G);
10842127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
10852127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            case Phone.NT_MODE_CDMA_NO_EVDO:
10866bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                mButtonEnabledNetworks.setValue(
10876bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                        Integer.toString(Phone.NT_MODE_CDMA_NO_EVDO));
1088b0449b3f154aa0cb6a5c59233c2dd7bed699d6aeSungmin Choi                mButtonEnabledNetworks.setSummary(R.string.network_1x);
10892127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
1090e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby            case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
1091dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                if (isWorldMode()) {
1092dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                    controlCdmaOptions(true);
1093dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                    controlGsmOptions(false);
1094dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                }
10956bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                mButtonEnabledNetworks.setValue(
1096e994d46a1f951b496441a42d1eabd2a0e026ceaeJake Hamby                        Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
109794846fea8b88b76955982112cb4d0e3ce6672e51Amit Mahajan                if (mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA ||
109894846fea8b88b76955982112cb4d0e3ce6672e51Amit Mahajan                        mIsGlobalCdma ||
109994846fea8b88b76955982112cb4d0e3ce6672e51Amit Mahajan                        isWorldMode()) {
1100af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                    mButtonEnabledNetworks.setSummary(R.string.network_global);
1101af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                } else {
1102af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                    mButtonEnabledNetworks.setSummary((mShow4GForLTE == true)
1103af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                            ? R.string.network_4G : R.string.network_lte);
1104af65e4fb687d9412d65f1250cfee7c202e9ef319Amit Mahajan                }
11052127037244d2d035fd3f5f250067c2225647f996Sungmin Choi                break;
11062127037244d2d035fd3f5f250067c2225647f996Sungmin Choi            default:
11076bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                String errMsg = "Invalid Network Mode (" + NetworkMode + "). Ignore.";
11086bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                loge(errMsg);
11096bb4d4454cf105b0d3037aae5f224c33c2828c2eSungmin Choi                mButtonEnabledNetworks.setSummary(errMsg);
11102127037244d2d035fd3f5f250067c2225647f996Sungmin Choi        }
11112127037244d2d035fd3f5f250067c2225647f996Sungmin Choi    }
11122127037244d2d035fd3f5f250067c2225647f996Sungmin Choi
11137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
11147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
11157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        switch(requestCode) {
11167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        case REQUEST_CODE_EXIT_ECM:
11177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Boolean isChoiceYes =
11187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                data.getBooleanExtra(EmergencyCallbackModeExitDialog.EXTRA_EXIT_ECM_RESULT, false);
11197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (isChoiceYes) {
11207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                // If the phone exits from ECM mode, show the CDMA Options
11217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                mCdmaOptions.showDialog(mClickedPreference);
11227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            } else {
11237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                // do nothing
11247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
11257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            break;
11267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
11277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        default:
11287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            break;
11297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
11307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
11317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
11327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static void log(String msg) {
11337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.d(LOG_TAG, msg);
11347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
11357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
11367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static void loge(String msg) {
11377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.e(LOG_TAG, msg);
11387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
11397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
11407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
11417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public boolean onOptionsItemSelected(MenuItem item) {
11427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        final int itemId = item.getItemId();
11437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (itemId == android.R.id.home) {  // See ActionBar#setDisplayHomeAsUpEnabled()
11447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Commenting out "logical up" capability. This is a workaround for issue 5278083.
11457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //
11467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Settings app may not launch this activity via UP_ACTIVITY_CLASS but the other
11477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Activity that looks exactly same as UP_ACTIVITY_CLASS ("SubSettings" Activity).
11487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // At that moment, this Activity launches UP_ACTIVITY_CLASS on top of the Activity.
11497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // which confuses users.
11507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // TODO: introduce better mechanism for "up" capability here.
11517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            /*Intent intent = new Intent(Intent.ACTION_MAIN);
11527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            intent.setClassName(UP_ACTIVITY_PACKAGE, UP_ACTIVITY_CLASS);
11537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
11547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            startActivity(intent);*/
11557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            finish();
11567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            return true;
11577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
11587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        return super.onOptionsItemSelected(item);
11597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
11603a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a
11613a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a    private boolean isWorldMode() {
11623a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        boolean worldModeOn = false;
11633a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
11643a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        final String configString = getResources().getString(R.string.config_world_mode);
11653a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a
11663a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        if (!TextUtils.isEmpty(configString)) {
11673a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            String[] configArray = configString.split(";");
11683a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            // Check if we have World mode configuration set to True only or config is set to True
11693a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            // and SIM GID value is also set and matches to the current SIM GID.
11703a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            if (configArray != null &&
11713a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                   ((configArray.length == 1 && configArray[0].equalsIgnoreCase("true")) ||
11723a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                       (configArray.length == 2 && !TextUtils.isEmpty(configArray[1]) &&
11733a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                           tm != null && configArray[1].equalsIgnoreCase(tm.getGroupIdLevel1())))) {
11743a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a                               worldModeOn = true;
11753a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a            }
11763a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        }
11773a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a
11783a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        if (DBG) {
1179e31492a6d1a9c6eada391f49d89bec7046961ffeWink Saville            log("isWorldMode=" + worldModeOn);
11803a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        }
11813a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a
11823a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a        return worldModeOn;
11833a4447b532a883e4303b0719005e76c0d70b38f8Rohit Sisodia (a    }
1184dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a
1185dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    private void controlGsmOptions(boolean enable) {
1186dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        PreferenceScreen prefSet = getPreferenceScreen();
1187dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (prefSet == null) {
1188dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a            return;
1189dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1190dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a
11915236f3ae1e7b4d2b07079fbf12b1666a82e1099cPauloftheWest        if (mGsmUmtsOptions == null) {
1192375e27d8a9dff087ed6e2e6be3738e708cd423f6PauloftheWest            mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet, mPhone.getSubId());
1193dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1194dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        PreferenceScreen apnExpand =
1195dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                (PreferenceScreen) prefSet.findPreference(BUTTON_APN_EXPAND_KEY);
1196dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        PreferenceScreen operatorSelectionExpand =
1197dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                (PreferenceScreen) prefSet.findPreference(BUTTON_OPERATOR_SELECTION_EXPAND_KEY);
1198dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        PreferenceScreen carrierSettings =
1199dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                (PreferenceScreen) prefSet.findPreference(BUTTON_CARRIER_SETTINGS_KEY);
1200dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (apnExpand != null) {
12015236f3ae1e7b4d2b07079fbf12b1666a82e1099cPauloftheWest            apnExpand.setEnabled(isWorldMode() || enable);
1202dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1203dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (operatorSelectionExpand != null) {
1204dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a            operatorSelectionExpand.setEnabled(enable);
1205dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1206dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (carrierSettings != null) {
1207dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a            prefSet.removePreference(carrierSettings);
1208dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1209dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    }
1210dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a
1211dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    private void controlCdmaOptions(boolean enable) {
1212dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        PreferenceScreen prefSet = getPreferenceScreen();
1213dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (prefSet == null) {
1214dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a            return;
1215dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1216dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (enable && mCdmaOptions == null) {
1217dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a            mCdmaOptions = new CdmaOptions(this, prefSet, mPhone);
1218dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1219dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        CdmaSystemSelectListPreference systemSelect =
1220dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                (CdmaSystemSelectListPreference)prefSet.findPreference
1221dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a                        (BUTTON_CDMA_SYSTEM_SELECT_KEY);
1222dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        if (systemSelect != null) {
1223dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a            systemSelect.setEnabled(enable);
1224dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a        }
1225dfa0410fffd9097053ef0c14f99444ebca912407Rohit Sisodia (a    }
12263c6ce5e6e05cedb43c62508152dc39e60b03ccacPauloftheWest
12277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon}
1228