blob: 32dc0c357118cfbb676ff988ea83702b5a2a07e0 [file] [log] [blame]
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001/*
Chia-chi Yeh4e142112009-12-25 14:48:46 +08002 * Copyright (C) 2009 The Android Open Source Project
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settings;
18
Geoffrey Borggaardfe21d9a2013-08-02 18:16:27 -040019
Amith Yamasanid7993472010-08-18 13:59:28 -070020import android.app.Activity;
Wink Saville5d5a2692013-06-29 07:54:13 -070021import android.app.AlertDialog;
22import android.app.Dialog;
Amith Yamasanid7993472010-08-18 13:59:28 -070023import android.content.Context;
Wink Saville5d5a2692013-06-29 07:54:13 -070024import android.content.DialogInterface;
Amith Yamasanid7993472010-08-18 13:59:28 -070025import android.content.Intent;
Amith Yamasanid7993472010-08-18 13:59:28 -070026import android.os.Bundle;
Sudheer Shanka9e9e63b2016-02-11 18:48:14 +000027import android.os.UserHandle;
Julia Reynoldsee27b9d2014-05-09 13:36:20 -040028import android.os.UserManager;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070029import android.provider.SearchIndexableResource;
Amith Yamasanid7993472010-08-18 13:59:28 -070030import android.provider.Settings;
Jason Monk39b46742015-09-10 15:52:51 -040031import android.support.v7.preference.Preference;
32import android.support.v7.preference.PreferenceScreen;
Wink Saville5d5a2692013-06-29 07:54:13 -070033import android.util.Log;
David Braun4e9f04d2013-09-16 13:45:42 -070034
Tamas Berghammer265d3c22016-06-22 15:34:45 +010035import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Fan Zhang7f1a4b52016-10-12 12:35:52 -070036import com.android.settings.network.AirplaneModePreferenceController;
37import com.android.settings.network.MobileNetworkPreferenceController;
Fan Zhangf1acdd32016-10-13 09:53:38 -070038import com.android.settings.network.MobilePlanPreferenceController;
Fan Zhangf1acdd32016-10-13 09:53:38 -070039import com.android.settings.network.ProxyPreferenceController;
Fan Zhang7f1a4b52016-10-12 12:35:52 -070040import com.android.settings.network.TetherPreferenceController;
41import com.android.settings.network.VpnPreferenceController;
Fan Zhangf1acdd32016-10-13 09:53:38 -070042import com.android.settings.network.WifiCallingPreferenceController;
Doris Linge2145702016-10-13 17:16:07 -070043import com.android.settings.nfc.NfcPreferenceController;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070044import com.android.settings.search.BaseSearchIndexProvider;
45import com.android.settings.search.Indexable;
Sudheer Shanka8b868302016-01-26 13:50:23 +000046import com.android.settingslib.RestrictedLockUtils;
Jason Monk73a24962015-04-13 20:58:05 -040047
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070048import java.util.ArrayList;
49import java.util.Arrays;
Fyodor Kupolovca060e32016-06-24 13:01:11 -070050import java.util.Collections;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070051import java.util.List;
David Braun4e9f04d2013-09-16 13:45:42 -070052
Fan Zhangf1acdd32016-10-13 09:53:38 -070053import static com.android.settings.network.MobilePlanPreferenceController
54 .MANAGE_MOBILE_PLAN_DIALOG_ID;
55
56public class WirelessSettings extends SettingsPreferenceFragment implements Indexable,
57 MobilePlanPreferenceController.MobilePlanPreferenceHost {
Robert Greenwalt4929e912013-07-16 13:09:24 -070058 private static final String TAG = "WirelessSettings";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080059
tk.mun7c5c1652011-10-13 22:56:18 +090060 private static final String KEY_WIMAX_SETTINGS = "wimax_settings";
Fan Zhang7f1a4b52016-10-12 12:35:52 -070061
Julia Reynoldsee27b9d2014-05-09 13:36:20 -040062 private UserManager mUm;
Wink Saville5d5a2692013-06-29 07:54:13 -070063
Fan Zhang7f1a4b52016-10-12 12:35:52 -070064 private AirplaneModePreferenceController mAirplaneModePreferenceController;
65 private TetherPreferenceController mTetherPreferenceController;
66 private MobileNetworkPreferenceController mMobileNetworkPreferenceController;
67 private VpnPreferenceController mVpnPreferenceController;
Fan Zhangf1acdd32016-10-13 09:53:38 -070068 private WifiCallingPreferenceController mWifiCallingPreferenceController;
69 private ProxyPreferenceController mProxyPreferenceController;
70 private MobilePlanPreferenceController mMobilePlanPreferenceController;
Doris Linge2145702016-10-13 17:16:07 -070071 private NfcPreferenceController mNfcPreferenceController;
David Braun4e9f04d2013-09-16 13:45:42 -070072
Chouting Zhang71cc49e2009-08-28 14:36:35 -050073 /**
74 * Invoked on each preference click in this hierarchy, overrides
Fabrice Di Meglio263bcc82014-01-17 19:17:58 -080075 * PreferenceFragment's implementation. Used to make sure we track the
Chouting Zhang71cc49e2009-08-28 14:36:35 -050076 * preference click events.
77 */
78 @Override
Jason Monk39b46742015-09-10 15:52:51 -040079 public boolean onPreferenceTreeClick(Preference preference) {
Wink Saville5d5a2692013-06-29 07:54:13 -070080 log("onPreferenceTreeClick: preference=" + preference);
Fan Zhang7f1a4b52016-10-12 12:35:52 -070081 if (mAirplaneModePreferenceController.handlePreferenceTreeClick(preference)) {
Chouting Zhang71cc49e2009-08-28 14:36:35 -050082 return true;
Fan Zhang7f1a4b52016-10-12 12:35:52 -070083 }
Fan Zhangf1acdd32016-10-13 09:53:38 -070084 if (mMobilePlanPreferenceController.handlePreferenceTreeClick(preference)) {
85 return true;
Chouting Zhang71cc49e2009-08-28 14:36:35 -050086 }
Chia-chi Yeh4e142112009-12-25 14:48:46 +080087 // Let the intents be launched by the Preference manager
Jason Monk39b46742015-09-10 15:52:51 -040088 return super.onPreferenceTreeClick(preference);
Chouting Zhang71cc49e2009-08-28 14:36:35 -050089 }
Chia-chi Yehb90452f2010-01-13 06:11:29 +080090
Wink Saville5d5a2692013-06-29 07:54:13 -070091 @Override
92 public Dialog onCreateDialog(int dialogId) {
93 log("onCreateDialog: dialogId=" + dialogId);
94 switch (dialogId) {
95 case MANAGE_MOBILE_PLAN_DIALOG_ID:
96 return new AlertDialog.Builder(getActivity())
Fan Zhangf1acdd32016-10-13 09:53:38 -070097 .setMessage(mMobilePlanPreferenceController.getMobilePlanDialogMessage())
98 .setCancelable(false)
99 .setPositiveButton(com.android.internal.R.string.ok,
100 new DialogInterface.OnClickListener() {
101 @Override
102 public void onClick(DialogInterface dialog, int id) {
103 log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
104 mMobilePlanPreferenceController
105 .setMobilePlanDialogMessage(null);
106 }
107 })
108 .create();
Wink Saville5d5a2692013-06-29 07:54:13 -0700109 }
110 return super.onCreateDialog(dialogId);
111 }
112
Fan Zhang20374fd2016-09-23 12:10:38 -0700113 @Override
114 public int getDialogMetricsCategory(int dialogId) {
115 if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
116 return MetricsEvent.DIALOG_MANAGE_MOBILE_PLAN;
117 }
118 return 0;
119 }
120
Wink Saville5d5a2692013-06-29 07:54:13 -0700121 private void log(String s) {
122 Log.d(TAG, s);
123 }
124
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800125 @Override
Fan Zhang65076132016-08-08 10:25:13 -0700126 public int getMetricsCategory() {
Chris Wren9d1bfd12016-01-26 18:04:01 -0500127 return MetricsEvent.WIRELESS;
Chris Wren8a963ba2015-03-20 10:29:14 -0400128 }
129
130 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700131 public void onCreate(Bundle savedInstanceState) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800132 super.onCreate(savedInstanceState);
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700133
Julia Reynoldsee27b9d2014-05-09 13:36:20 -0400134 mUm = (UserManager) getSystemService(Context.USER_SERVICE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800135
136 addPreferencesFromResource(R.xml.wireless_settings);
137
Xiaohui Chen6f038292015-09-02 16:54:00 -0700138 final boolean isAdmin = mUm.isAdminUser();
Amith Yamasani9627a8e2012-09-23 12:54:14 -0700139
Amith Yamasanid7993472010-08-18 13:59:28 -0700140 final Activity activity = getActivity();
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700141
142 final PreferenceScreen screen = getPreferenceScreen();
143 mAirplaneModePreferenceController = new AirplaneModePreferenceController(activity, this);
144 mTetherPreferenceController = new TetherPreferenceController(activity);
145 mMobileNetworkPreferenceController = new MobileNetworkPreferenceController(activity);
146 mVpnPreferenceController = new VpnPreferenceController(activity);
Fan Zhangf1acdd32016-10-13 09:53:38 -0700147 mWifiCallingPreferenceController = new WifiCallingPreferenceController(activity);
Fan Zhangf1acdd32016-10-13 09:53:38 -0700148 mProxyPreferenceController = new ProxyPreferenceController(activity);
149 mMobilePlanPreferenceController = new MobilePlanPreferenceController(activity, this);
Doris Linge2145702016-10-13 17:16:07 -0700150 mNfcPreferenceController = new NfcPreferenceController(activity);
Fan Zhangf1acdd32016-10-13 09:53:38 -0700151
152 mMobilePlanPreferenceController.onCreate(savedInstanceState);
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700153
154 mAirplaneModePreferenceController.displayPreference(screen);
155 mTetherPreferenceController.displayPreference(screen);
156 mMobileNetworkPreferenceController.displayPreference(screen);
157 mVpnPreferenceController.displayPreference(screen);
Fan Zhangf1acdd32016-10-13 09:53:38 -0700158 mWifiCallingPreferenceController.displayPreference(screen);
Fan Zhangf1acdd32016-10-13 09:53:38 -0700159 mProxyPreferenceController.displayPreference(screen);
160 mMobilePlanPreferenceController.displayPreference(screen);
Doris Linge2145702016-10-13 17:16:07 -0700161 mNfcPreferenceController.displayPreference(screen);
Irfan Sheriff936e3fa2012-05-07 15:51:37 -0700162
Christopher Tate6a5929b2012-09-10 15:39:05 -0700163 String toggleable = Settings.Global.getString(activity.getContentResolver(),
164 Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
Chia-chi Yeh4e142112009-12-25 14:48:46 +0800165
tk.mun7c5c1652011-10-13 22:56:18 +0900166 //enable/disable wimax depending on the value in config.xml
Xiaohui Chen6f038292015-09-02 16:54:00 -0700167 final boolean isWimaxEnabled = isAdmin && this.getResources().getBoolean(
tk.mun7c5c1652011-10-13 22:56:18 +0900168 com.android.internal.R.bool.config_wimaxEnabled);
Sudheer Shanka9e9e63b2016-02-11 18:48:14 +0000169 if (!isWimaxEnabled || RestrictedLockUtils.hasBaseUserRestriction(activity,
170 UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
tk.mun7c5c1652011-10-13 22:56:18 +0900171 PreferenceScreen root = getPreferenceScreen();
Xiaohui Chen6f038292015-09-02 16:54:00 -0700172 Preference ps = findPreference(KEY_WIMAX_SETTINGS);
tk.mun7c5c1652011-10-13 22:56:18 +0900173 if (ps != null) root.removePreference(ps);
174 } else {
Fan Zhangf1acdd32016-10-13 09:53:38 -0700175 if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX)
tk.mun7c5c1652011-10-13 22:56:18 +0900176 && isWimaxEnabled) {
Xiaohui Chen6f038292015-09-02 16:54:00 -0700177 Preference ps = findPreference(KEY_WIMAX_SETTINGS);
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700178 ps.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
tk.mun7c5c1652011-10-13 22:56:18 +0900179 }
180 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800181 }
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800182
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800183 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700184 public void onResume() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800185 super.onResume();
Danica Chang32711b62010-08-10 18:41:29 -0700186
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700187 mAirplaneModePreferenceController.onResume();
Doris Linge2145702016-10-13 17:16:07 -0700188 mNfcPreferenceController.onResume();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800189 }
Danica Chang32711b62010-08-10 18:41:29 -0700190
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800191 @Override
Wink Saville5d5a2692013-06-29 07:54:13 -0700192 public void onSaveInstanceState(Bundle outState) {
193 super.onSaveInstanceState(outState);
Fan Zhangf1acdd32016-10-13 09:53:38 -0700194 mMobilePlanPreferenceController.onSaveInstanceState(outState);
Wink Saville5d5a2692013-06-29 07:54:13 -0700195 }
196
197 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700198 public void onPause() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800199 super.onPause();
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700200 mAirplaneModePreferenceController.onPause();
Doris Linge2145702016-10-13 17:16:07 -0700201 mNfcPreferenceController.onPause();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800202 }
Danica Chang32711b62010-08-10 18:41:29 -0700203
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500204 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700205 public void onActivityResult(int requestCode, int resultCode, Intent data) {
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700206 mAirplaneModePreferenceController.onActivityResult(requestCode, resultCode, data);
Geoffrey Borggaardfe21d9a2013-08-02 18:16:27 -0400207 super.onActivityResult(requestCode, resultCode, data);
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500208 }
Amith Yamasanib0b37ae2012-04-23 15:35:36 -0700209
210 @Override
Fan Zhangf1acdd32016-10-13 09:53:38 -0700211 public void showMobilePlanMessageDialog() {
212 showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
213 }
214
215 @Override
Amith Yamasanib0b37ae2012-04-23 15:35:36 -0700216 protected int getHelpResource() {
217 return R.string.help_url_more_networks;
218 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800219}