1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
24e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh * Copyright (C) 2009 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard
20d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport android.app.Activity;
215d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.app.AlertDialog;
225d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.app.Dialog;
2305411893af4afc4bf7b8530d787c5b9e0bbeed39Oscar Montemayorimport android.app.admin.DevicePolicyManager;
24d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensenimport android.content.ActivityNotFoundException;
25b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yehimport android.content.Context;
265d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.content.DialogInterface;
2771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport android.content.Intent;
28167d7186a73b1126a8baa4fd3c8b9156b2712c60Irfan Sheriffimport android.content.pm.PackageManager;
295d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.content.res.Resources;
30c4764d24837cf297440f0ee97fe8adb943c56fe0Robert Greenwaltimport android.net.ConnectivityManager;
315d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.net.NetworkInfo;
32d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensenimport android.net.Uri;
33a57eacef3c7d267a534bb1d01471a9a9c12471ceNick Pellyimport android.nfc.NfcAdapter;
34dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport android.nfc.NfcManager;
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
3671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport android.os.SystemProperties;
379e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shankaimport android.os.UserHandle;
38ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynoldsimport android.os.UserManager;
39dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport android.provider.SearchIndexableResource;
4083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.provider.Settings;
4139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference;
4239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference;
4339b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen;
445d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.telephony.TelephonyManager;
455d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.text.TextUtils;
465d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Savilleimport android.util.Log;
474e9f04de0a6511086f47479addb53b84c3bb9763David Braun
484ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiakimport com.android.ims.ImsManager;
499d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
50e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.internal.telephony.TelephonyIntents;
51e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.internal.telephony.TelephonyProperties;
52e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.settings.nfc.NfcEnabler;
53dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport com.android.settings.search.BaseSearchIndexProvider;
54dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport com.android.settings.search.Indexable;
558b8683068fd95010104acc30781a9cfa294f2545Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils;
56682a916836f5e108289a70579f671f9d4a880993Sudheer Shankaimport com.android.settingslib.RestrictedPreference;
5773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
58dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport java.util.ArrayList;
59dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport java.util.Arrays;
60ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport java.util.Collections;
61dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglioimport java.util.List;
624e9f04de0a6511086f47479addb53b84c3bb9763David Braun
6373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkpublic class WirelessSettings extends SettingsPreferenceFragment implements Indexable {
644929e912c00cca290488b3dbbdb645fffe8d2443Robert Greenwalt    private static final String TAG = "WirelessSettings";
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane";
67ad50ba065d31f3d8ec53c512b6ba5cf94d15d1e3Nick Pelly    private static final String KEY_TOGGLE_NFC = "toggle_nfc";
687c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun    private static final String KEY_WIMAX_SETTINGS = "wimax_settings";
693d670de5ce9180e0a75d0884832c4714cb56e1b5Jeff Hamilton    private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
7083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood    private static final String KEY_VPN_SETTINGS = "vpn_settings";
71c4764d24837cf297440f0ee97fe8adb943c56fe0Robert Greenwalt    private static final String KEY_TETHER_SETTINGS = "tether_settings";
7205411893af4afc4bf7b8530d787c5b9e0bbeed39Oscar Montemayor    private static final String KEY_PROXY_SETTINGS = "proxy_settings";
730f85c48d6c77e811f4d949503f0aa3efd908834dAmith Yamasani    private static final String KEY_MOBILE_NETWORK_SETTINGS = "mobile_network_settings";
745d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private static final String KEY_MANAGE_MOBILE_PLAN = "manage_mobile_plan";
754ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak    private static final String KEY_WFC_SETTINGS = "wifi_calling_settings";
76e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling    private static final String KEY_NETWORK_RESET = "network_reset";
77ad50ba065d31f3d8ec53c512b6ba5cf94d15d1e3Nick Pelly
7871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    public static final String EXIT_ECM_RESULT = "exit_ecm_result";
7971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    public static final int REQUEST_CODE_EXIT_ECM = 1;
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private AirplaneModeEnabler mAirplaneModeEnabler;
82e3bced2cdaf70812f658c45c170e4943ed79dfafFabrice Di Meglio    private SwitchPreference mAirplaneModePreference;
83ad50ba065d31f3d8ec53c512b6ba5cf94d15d1e3Nick Pelly    private NfcEnabler mNfcEnabler;
84bb4bdc29d64714546255681fcd9c9d92efa9328fMartijn Coenen    private NfcAdapter mNfcAdapter;
8571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang
865d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private ConnectivityManager mCm;
875d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private TelephonyManager mTm;
8817c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn    private PackageManager mPm;
89ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds    private UserManager mUm;
905d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
915d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
925d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
935d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
944ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak    private PreferenceScreen mButtonWfc;
954e9f04de0a6511086f47479addb53b84c3bb9763David Braun
9671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    /**
9771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     * Invoked on each preference click in this hierarchy, overrides
98263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Meglio     * PreferenceFragment's implementation.  Used to make sure we track the
9971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     * preference click events.
10071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     */
10171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    @Override
10239b467482d1bf256a111c757e9b7621c6f523271Jason Monk    public boolean onPreferenceTreeClick(Preference preference) {
1035d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        log("onPreferenceTreeClick: preference=" + preference);
1044e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        if (preference == mAirplaneModePreference && Boolean.parseBoolean(
1054e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh                SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
10671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            // In ECM mode launch ECM app dialog
10771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            startActivityForResult(
10871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
10971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                REQUEST_CODE_EXIT_ECM);
11071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            return true;
1115d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        } else if (preference == findPreference(KEY_MANAGE_MOBILE_PLAN)) {
1125d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            onManageMobilePlanClick();
11371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        }
1144e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        // Let the intents be launched by the Preference manager
11539b467482d1bf256a111c757e9b7621c6f523271Jason Monk        return super.onPreferenceTreeClick(preference);
11671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    }
117b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh
1185d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private String mManageMobilePlanMessage;
1195d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    public void onManageMobilePlanClick() {
1205d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        log("onManageMobilePlanClick:");
1215d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        mManageMobilePlanMessage = null;
1225d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        Resources resources = getActivity().getResources();
1235d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
1246953eea28b64bc68f6c7a196380e3dcf9b110f55Paul Jensen        NetworkInfo ni = mCm.getActiveNetworkInfo();
1255d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        if (mTm.hasIccCard() && (ni != null)) {
12617c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn            // Check for carrier apps that can handle provisioning first
12717c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn            Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
128ff9f67dddd97756dffe2059aa186acd29fc67527Diego Pontoriero            List<String> carrierPackages =
129be7adcc9894f34bf4f1721a7a9a7b6354cadb26dDiego Pontoriero                    mTm.getCarrierPackageNamesForIntent(provisioningIntent);
130ff9f67dddd97756dffe2059aa186acd29fc67527Diego Pontoriero            if (carrierPackages != null && !carrierPackages.isEmpty()) {
131ff9f67dddd97756dffe2059aa186acd29fc67527Diego Pontoriero                if (carrierPackages.size() != 1) {
132ff9f67dddd97756dffe2059aa186acd29fc67527Diego Pontoriero                    Log.w(TAG, "Multiple matching carrier apps found, launching the first.");
133ff9f67dddd97756dffe2059aa186acd29fc67527Diego Pontoriero                }
134ff9f67dddd97756dffe2059aa186acd29fc67527Diego Pontoriero                provisioningIntent.setPackage(carrierPackages.get(0));
13517c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn                startActivity(provisioningIntent);
13617c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn                return;
13717c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn            }
13817c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn
1395d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            // Get provisioning URL
1404929e912c00cca290488b3dbbdb645fffe8d2443Robert Greenwalt            String url = mCm.getMobileProvisioningUrl();
1415d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            if (!TextUtils.isEmpty(url)) {
142d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
143d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                        Intent.CATEGORY_APP_BROWSER);
144d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                intent.setData(Uri.parse(url));
145d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
146d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                        Intent.FLAG_ACTIVITY_NEW_TASK);
147d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                try {
148d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                    startActivity(intent);
149d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                } catch (ActivityNotFoundException e) {
150d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                    Log.w(TAG, "onManageMobilePlanClick: startActivity failed" + e);
151d96c5fc70a7b595358cf020dcbbba559eb50d4f1Paul Jensen                }
1525d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            } else {
1535d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                // No provisioning URL
1545d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                String operatorName = mTm.getSimOperatorName();
1555d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                if (TextUtils.isEmpty(operatorName)) {
1565d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    // Use NetworkOperatorName as second choice in case there is no
1575d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    // SPN (Service Provider Name on the SIM). Such as with T-mobile.
1585d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    operatorName = mTm.getNetworkOperatorName();
1595d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    if (TextUtils.isEmpty(operatorName)) {
1605d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                        mManageMobilePlanMessage = resources.getString(
1615d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                R.string.mobile_unknown_sim_operator);
1625d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    } else {
1635d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                        mManageMobilePlanMessage = resources.getString(
1645d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                R.string.mobile_no_provisioning_url, operatorName);
1655d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    }
1665d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                } else {
1675d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                    mManageMobilePlanMessage = resources.getString(
1685d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                            R.string.mobile_no_provisioning_url, operatorName);
1695d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                }
1705d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            }
1715d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        } else if (mTm.hasIccCard() == false) {
1725d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            // No sim card
1735d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            mManageMobilePlanMessage = resources.getString(R.string.mobile_insert_sim_card);
1745d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        } else {
1755d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            // NetworkInfo is null, there is no connection
1765d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            mManageMobilePlanMessage = resources.getString(R.string.mobile_connect_to_internet);
1775d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        }
1785d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
1795d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            log("onManageMobilePlanClick: message=" + mManageMobilePlanMessage);
1805d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
1815d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        }
1825d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    }
1835d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
1845d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    @Override
1855d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    public Dialog onCreateDialog(int dialogId) {
1865d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        log("onCreateDialog: dialogId=" + dialogId);
1875d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        switch (dialogId) {
1885d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            case MANAGE_MOBILE_PLAN_DIALOG_ID:
1895d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                return new AlertDialog.Builder(getActivity())
1905d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                            .setMessage(mManageMobilePlanMessage)
1915d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                            .setCancelable(false)
1925d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                            .setPositiveButton(com.android.internal.R.string.ok,
1935d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                    new DialogInterface.OnClickListener() {
1945d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                @Override
1955d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                public void onClick(DialogInterface dialog, int id) {
1965d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                    log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
1975d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                    mManageMobilePlanMessage = null;
1985d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                                }
1995d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                            })
2005d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville                            .create();
2015d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        }
2025d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        return super.onCreateDialog(dialogId);
2035d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    }
2045d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
2055d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    private void log(String s) {
2065d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        Log.d(TAG, s);
2075d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    }
2085d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
2108a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    protected int getMetricsCategory() {
2119d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        return MetricsEvent.WIRELESS;
2128a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
2138a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
2148a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
215d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onCreate(Bundle savedInstanceState) {
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(savedInstanceState);
2175d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        if (savedInstanceState != null) {
2185d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            mManageMobilePlanMessage = savedInstanceState.getString(SAVED_MANAGE_MOBILE_PLAN_MSG);
2195d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        }
2205d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        log("onCreate: mManageMobilePlanMessage=" + mManageMobilePlanMessage);
2215d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
2225d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
2235d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        mTm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
22417c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn        mPm = getPackageManager();
225ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds        mUm = (UserManager) getSystemService(Context.USER_SERVICE);
226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.wireless_settings);
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
2296f03829e746aa3f505d71723001a7f84a806452fXiaohui Chen        final boolean isAdmin = mUm.isAdminUser();
2309627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
231d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani        final Activity activity = getActivity();
232e3bced2cdaf70812f658c45c170e4943ed79dfafFabrice Di Meglio        mAirplaneModePreference = (SwitchPreference) findPreference(KEY_TOGGLE_AIRPLANE);
2334325f8080888bd3b15246f5bbd9db878aced030cFabrice Di Meglio        SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC);
234682a916836f5e108289a70579f671f9d4a880993Sudheer Shanka        RestrictedPreference androidBeam = (RestrictedPreference) findPreference(
235682a916836f5e108289a70579f671f9d4a880993Sudheer Shanka                KEY_ANDROID_BEAM_SETTINGS);
2364e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh
237e78c1879058571c00879f0d3e756951302adf513Gilles Debunne        mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
2383d670de5ce9180e0a75d0884832c4714cb56e1b5Jeff Hamilton        mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
239936e3faae11441fad05bf244fa44a29515edd1d8Irfan Sheriff
2403e7e2c57d4074d707161cea0736678311ff5b22ePavel Zhamaitsiak        mButtonWfc = (PreferenceScreen) findPreference(KEY_WFC_SETTINGS);
2414ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak
2426a5929b086a61a955a4a2f43f5fa251e8754ff4aChristopher Tate        String toggleable = Settings.Global.getString(activity.getContentResolver(),
2436a5929b086a61a955a4a2f43f5fa251e8754ff4aChristopher Tate                Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
2444e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh
2457c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun        //enable/disable wimax depending on the value in config.xml
2466f03829e746aa3f505d71723001a7f84a806452fXiaohui Chen        final boolean isWimaxEnabled = isAdmin && this.getResources().getBoolean(
2477c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun                com.android.internal.R.bool.config_wimaxEnabled);
2489e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka        if (!isWimaxEnabled || RestrictedLockUtils.hasBaseUserRestriction(activity,
2499e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
2507c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun            PreferenceScreen root = getPreferenceScreen();
2516f03829e746aa3f505d71723001a7f84a806452fXiaohui Chen            Preference ps = findPreference(KEY_WIMAX_SETTINGS);
2527c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun            if (ps != null) root.removePreference(ps);
2537c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun        } else {
2546a5929b086a61a955a4a2f43f5fa251e8754ff4aChristopher Tate            if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX )
2557c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun                    && isWimaxEnabled) {
2566f03829e746aa3f505d71723001a7f84a806452fXiaohui Chen                Preference ps = findPreference(KEY_WIMAX_SETTINGS);
2577c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun                ps.setDependency(KEY_TOGGLE_AIRPLANE);
2587c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun            }
2597c5c16565eccde0b98f7ad08a0f06ff51e8e90cetk.mun        }
260fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard
261b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh        // Manually set dependencies for Wifi when not toggleable.
2626a5929b086a61a955a4a2f43f5fa251e8754ff4aChristopher Tate        if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIFI)) {
2634e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh            findPreference(KEY_VPN_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
2644e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        }
265ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds        // Disable VPN.
2666f03829e746aa3f505d71723001a7f84a806452fXiaohui Chen        // TODO: http://b/23693383
2679e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka        if (!isAdmin || RestrictedLockUtils.hasBaseUserRestriction(activity,
2689e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                UserManager.DISALLOW_CONFIG_VPN, UserHandle.myUserId())) {
2699627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            removePreference(KEY_VPN_SETTINGS);
2709627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
271ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds
2724e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        // Manually set dependencies for Bluetooth when not toggleable.
2736a5929b086a61a955a4a2f43f5fa251e8754ff4aChristopher Tate        if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_BLUETOOTH)) {
274e78c1879058571c00879f0d3e756951302adf513Gilles Debunne            // No bluetooth-dependent items in the list. Code kept in case one is added later.
275ad50ba065d31f3d8ec53c512b6ba5cf94d15d1e3Nick Pelly        }
276ad50ba065d31f3d8ec53c512b6ba5cf94d15d1e3Nick Pelly
2779894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly        // Manually set dependencies for NFC when not toggleable.
2786a5929b086a61a955a4a2f43f5fa251e8754ff4aChristopher Tate        if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) {
2799894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly            findPreference(KEY_TOGGLE_NFC).setDependency(KEY_TOGGLE_AIRPLANE);
2803d670de5ce9180e0a75d0884832c4714cb56e1b5Jeff Hamilton            findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
2819894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly        }
2829894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly
283dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio        // Remove NFC if not available
284bb4bdc29d64714546255681fcd9c9d92efa9328fMartijn Coenen        mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
285bb4bdc29d64714546255681fcd9c9d92efa9328fMartijn Coenen        if (mNfcAdapter == null) {
286ad50ba065d31f3d8ec53c512b6ba5cf94d15d1e3Nick Pelly            getPreferenceScreen().removePreference(nfc);
2873d670de5ce9180e0a75d0884832c4714cb56e1b5Jeff Hamilton            getPreferenceScreen().removePreference(androidBeam);
2889894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly            mNfcEnabler = null;
2894e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        }
290c4764d24837cf297440f0ee97fe8adb943c56fe0Robert Greenwalt
291ee27b9de8f2ab17d50b90dd8c13546aebb4e9fc1Julia Reynolds        // Remove Mobile Network Settings and Manage Mobile Plan for secondary users,
2928b8683068fd95010104acc30781a9cfa294f2545Sudheer Shanka        // if it's a wifi-only device.
2939e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka        if (!isAdmin || Utils.isWifiOnly(getActivity()) ||
2949e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                RestrictedLockUtils.hasBaseUserRestriction(activity,
2959e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                        UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
2969627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            removePreference(KEY_MOBILE_NETWORK_SETTINGS);
2975d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            removePreference(KEY_MANAGE_MOBILE_PLAN);
2980f85c48d6c77e811f4d949503f0aa3efd908834dAmith Yamasani        }
2992490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi        // Remove Mobile Network Settings and Manage Mobile Plan
3002490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi        // if config_show_mobile_plan sets false.
301dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio        final boolean isMobilePlanEnabled = this.getResources().getBoolean(
3022490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi                R.bool.config_show_mobile_plan);
3032490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi        if (!isMobilePlanEnabled) {
3042490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi            Preference pref = findPreference(KEY_MANAGE_MOBILE_PLAN);
3052490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi            if (pref != null) {
3062490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi                removePreference(KEY_MANAGE_MOBILE_PLAN);
3072490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi            }
3082490315e49d235a1ba9a84600a21febf85959a1aSungmin Choi        }
3090f85c48d6c77e811f4d949503f0aa3efd908834dAmith Yamasani
3102e41e3db43ab0e05b70158a4939dabdce270c261Jaewan Kim        // Remove Airplane Mode settings if it's a stationary device such as a TV.
31117c008e9d0037373305f4c51442da7532b145dd1Andrew Flynn        if (mPm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
3122e41e3db43ab0e05b70158a4939dabdce270c261Jaewan Kim            removePreference(KEY_TOGGLE_AIRPLANE);
3132e41e3db43ab0e05b70158a4939dabdce270c261Jaewan Kim        }
3142e41e3db43ab0e05b70158a4939dabdce270c261Jaewan Kim
31505411893af4afc4bf7b8530d787c5b9e0bbeed39Oscar Montemayor        // Enable Proxy selector settings if allowed.
31605411893af4afc4bf7b8530d787c5b9e0bbeed39Oscar Montemayor        Preference mGlobalProxy = findPreference(KEY_PROXY_SETTINGS);
317dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio        final DevicePolicyManager mDPM = (DevicePolicyManager)
318d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani                activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
3196f3a98bb00f12851682c28d265be4f66fad85fd6Robert Greenwalt        // proxy UI disabled until we have better app support
3206f3a98bb00f12851682c28d265be4f66fad85fd6Robert Greenwalt        getPreferenceScreen().removePreference(mGlobalProxy);
32105411893af4afc4bf7b8530d787c5b9e0bbeed39Oscar Montemayor        mGlobalProxy.setEnabled(mDPM.getGlobalProxyAdmin() == null);
32205411893af4afc4bf7b8530d787c5b9e0bbeed39Oscar Montemayor
3230f85c48d6c77e811f4d949503f0aa3efd908834dAmith Yamasani        // Disable Tethering if it's not allowed or if it's a wifi-only device
324dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio        final ConnectivityManager cm =
325d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani                (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
326682a916836f5e108289a70579f671f9d4a880993Sudheer Shanka
3279e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka        final boolean adminDisallowedTetherConfig = RestrictedLockUtils.checkIfRestrictionEnforced(
3289e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                activity, UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()) != null;
3299e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka        if ((!cm.isTetheringSupported() && !adminDisallowedTetherConfig) ||
3309e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                RestrictedLockUtils.hasBaseUserRestriction(activity,
3319e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka                        UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) {
332c4764d24837cf297440f0ee97fe8adb943c56fe0Robert Greenwalt            getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS));
3338b8683068fd95010104acc30781a9cfa294f2545Sudheer Shanka        } else if (!adminDisallowedTetherConfig) {
334e434bfb216682a6ca331fa54ce58a2bff7adf8d7Robert Greenwalt            Preference p = findPreference(KEY_TETHER_SETTINGS);
3356e58d516f05bbceabdddd3aa08a94fcc32858e71Wei Liu            p.setTitle(com.android.settingslib.Utils.getTetheringLabel(cm));
33629aab7a2ad3cabdc1681fdc93a0f00b20072d385PauloftheWest
33729aab7a2ad3cabdc1681fdc93a0f00b20072d385PauloftheWest            // Grey out if provisioning is not available.
33829aab7a2ad3cabdc1681fdc93a0f00b20072d385PauloftheWest            p.setEnabled(!TetherSettings
33929aab7a2ad3cabdc1681fdc93a0f00b20072d385PauloftheWest                    .isProvisioningNeededButUnavailable(getActivity()));
340c4764d24837cf297440f0ee97fe8adb943c56fe0Robert Greenwalt        }
341e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling
342e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling        // Remove network reset if not allowed
343e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling        if (RestrictedLockUtils.hasBaseUserRestriction(activity,
344e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling                UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
345e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling            removePreference(KEY_NETWORK_RESET);
346e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling        }
347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
348c4764d24837cf297440f0ee97fe8adb943c56fe0Robert Greenwalt
349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
350d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onResume() {
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
35232711b6752eb73324e1b10db975ac956888eda96Danica Chang
3534e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        mAirplaneModeEnabler.resume();
3549894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly        if (mNfcEnabler != null) {
3559894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly            mNfcEnabler.resume();
356bb4bdc29d64714546255681fcd9c9d92efa9328fMartijn Coenen        }
3574ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak
3583e7e2c57d4074d707161cea0736678311ff5b22ePavel Zhamaitsiak        // update WFC setting
3594ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak        final Context context = getActivity();
360e2f59b90ad21ecc07a584a06575a4c4ba75e1eb6Pavel Zhamaitsiak        if (ImsManager.isWfcEnabledByPlatform(context) &&
361e2f59b90ad21ecc07a584a06575a4c4ba75e1eb6Pavel Zhamaitsiak                ImsManager.isWfcProvisionedOnDevice(context)) {
3623e7e2c57d4074d707161cea0736678311ff5b22ePavel Zhamaitsiak            getPreferenceScreen().addPreference(mButtonWfc);
3633e7e2c57d4074d707161cea0736678311ff5b22ePavel Zhamaitsiak
3644ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak            mButtonWfc.setSummary(WifiCallingSettings.getWfcModeSummary(
365fe3749dd0bfa4856332f1a20177b29fe968127b2Meng Wang                    context, ImsManager.getWfcMode(context, mTm.isNetworkRoaming())));
3663e7e2c57d4074d707161cea0736678311ff5b22ePavel Zhamaitsiak        } else {
3673e7e2c57d4074d707161cea0736678311ff5b22ePavel Zhamaitsiak            removePreference(KEY_WFC_SETTINGS);
3684ab32563f1cd7d018ee7cdaec8d5a527964a05b9Pavel Zhamaitsiak        }
369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
37032711b6752eb73324e1b10db975ac956888eda96Danica Chang
371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
3725d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    public void onSaveInstanceState(Bundle outState) {
3735d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        super.onSaveInstanceState(outState);
3745d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
3755d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
3765d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville            outState.putString(SAVED_MANAGE_MOBILE_PLAN_MSG, mManageMobilePlanMessage);
3775d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville        }
3785d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    }
3795d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville
3805d5a269f59aa5caa986eff3cb988d7585b2cd43cWink Saville    @Override
381d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onPause() {
382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
38332711b6752eb73324e1b10db975ac956888eda96Danica Chang
384afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mAirplaneModeEnabler.pause();
3859894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly        if (mNfcEnabler != null) {
3869894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly            mNfcEnabler.pause();
3879894d4ade475392f665bf87bf7f91d3cbed3eaa4Nick Pelly        }
388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
38932711b6752eb73324e1b10db975ac956888eda96Danica Chang
39071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    @Override
391d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onActivityResult(int requestCode, int resultCode, Intent data) {
3924e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh        if (requestCode == REQUEST_CODE_EXIT_ECM) {
3934e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh            Boolean isChoiceYes = data.getBooleanExtra(EXIT_ECM_RESULT, false);
39471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            // Set Airplane mode based on the return value and checkbox state
39571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes,
39671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                    mAirplaneModePreference.isChecked());
39771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        }
398fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard        super.onActivityResult(requestCode, resultCode, data);
39971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    }
400b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani
401b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani    @Override
402b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani    protected int getHelpResource() {
403b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani        return R.string.help_url_more_networks;
404b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani    }
4054e9f04de0a6511086f47479addb53b84c3bb9763David Braun
406dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio    /**
407dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio     * For Search.
408dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio     */
409dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
410dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio        new BaseSearchIndexProvider() {
411dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio            @Override
412dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio            public List<SearchIndexableResource> getXmlResourcesToIndex(
413dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    Context context, boolean enabled) {
414ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov                // Remove wireless settings from search in demo mode
415ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov                if (UserManager.isDeviceInDemoMode(context)) {
416ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov                    return Collections.emptyList();
417ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov                }
418dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                SearchIndexableResource sir = new SearchIndexableResource(context);
419dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                sir.xmlResId = R.xml.wireless_settings;
420dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                return Arrays.asList(sir);
421dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio            }
422dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
423dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio            @Override
424dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio            public List<String> getNonIndexableKeys(Context context) {
425dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                final ArrayList<String> result = new ArrayList<String>();
426dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
42700d19c7426b08a1bc54694c886086b738ecd6116Julia Reynolds                final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
42844879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen                final boolean isSecondaryUser = !um.isAdminUser();
42932505ac6992207367bf9a0fb05e8928602c9391bAmith Yamasani                final boolean isWimaxEnabled = !isSecondaryUser
43032505ac6992207367bf9a0fb05e8928602c9391bAmith Yamasani                        && context.getResources().getBoolean(
431dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                        com.android.internal.R.bool.config_wimaxEnabled);
4328b8683068fd95010104acc30781a9cfa294f2545Sudheer Shanka                if (!isWimaxEnabled) {
433dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_WIMAX_SETTINGS);
434dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
435dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
436dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                if (isSecondaryUser) { // Disable VPN
437dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_VPN_SETTINGS);
438dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
439dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
440dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // Remove NFC if not available
44132505ac6992207367bf9a0fb05e8928602c9391bAmith Yamasani                final NfcManager manager = (NfcManager)
44232505ac6992207367bf9a0fb05e8928602c9391bAmith Yamasani                        context.getSystemService(Context.NFC_SERVICE);
443dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                if (manager != null) {
444dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    NfcAdapter adapter = manager.getDefaultAdapter();
445dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    if (adapter == null) {
446dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                        result.add(KEY_TOGGLE_NFC);
447dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                        result.add(KEY_ANDROID_BEAM_SETTINGS);
448dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    }
449dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
450dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
451dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // Remove Mobile Network Settings and Manage Mobile Plan if it's a wifi-only device.
452dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                if (isSecondaryUser || Utils.isWifiOnly(context)) {
453dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_MOBILE_NETWORK_SETTINGS);
454dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_MANAGE_MOBILE_PLAN);
455dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
456dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
457dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // Remove Mobile Network Settings and Manage Mobile Plan
458dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // if config_show_mobile_plan sets false.
459dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                final boolean isMobilePlanEnabled = context.getResources().getBoolean(
460dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                        R.bool.config_show_mobile_plan);
461dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                if (!isMobilePlanEnabled) {
462dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_MANAGE_MOBILE_PLAN);
463dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
464dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
465dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                final PackageManager pm = context.getPackageManager();
466dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
467dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // Remove Airplane Mode settings if it's a stationary device such as a TV.
468dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                if (pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
469dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_TOGGLE_AIRPLANE);
470dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
471dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
472dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // proxy UI disabled until we have better app support
473dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                result.add(KEY_PROXY_SETTINGS);
474dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
475dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                // Disable Tethering if it's not allowed or if it's a wifi-only device
47632505ac6992207367bf9a0fb05e8928602c9391bAmith Yamasani                ConnectivityManager cm = (ConnectivityManager)
47732505ac6992207367bf9a0fb05e8928602c9391bAmith Yamasani                        context.getSystemService(Context.CONNECTIVITY_SERVICE);
478dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                if (isSecondaryUser || !cm.isTetheringSupported()) {
479dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                    result.add(KEY_TETHER_SETTINGS);
480dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                }
481dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio
482e2f59b90ad21ecc07a584a06575a4c4ba75e1eb6Pavel Zhamaitsiak                if (!ImsManager.isWfcEnabledByPlatform(context) ||
483e2f59b90ad21ecc07a584a06575a4c4ba75e1eb6Pavel Zhamaitsiak                        !ImsManager.isWfcProvisionedOnDevice(context)) {
484ec4706a2279ec440b66f6ee9b47051c2b94e8102Anju Mathapati                    result.add(KEY_WFC_SETTINGS);
485ec4706a2279ec440b66f6ee9b47051c2b94e8102Anju Mathapati                }
486ec4706a2279ec440b66f6ee9b47051c2b94e8102Anju Mathapati
487e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling                if (RestrictedLockUtils.hasBaseUserRestriction(context,
488e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling                        UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
489e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling                    result.add(KEY_NETWORK_RESET);
490e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling                }
491e6f635ff823499203ef8ab4c01de07ea0eb33ad9Doris Ling
492dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio                return result;
493dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio            }
494dba577f8f017baac0086c185579340db1c9281d9Fabrice Di Meglio        };
495afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
496