blob: 99e9ac59f1aed8caff379bacb4b98074d99616d6 [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.app.admin.DevicePolicyManager;
Paul Jensend96c5fc2014-10-17 22:09:37 -040024import android.content.ActivityNotFoundException;
Amith Yamasanid7993472010-08-18 13:59:28 -070025import android.content.Context;
Wink Saville5d5a2692013-06-29 07:54:13 -070026import android.content.DialogInterface;
Amith Yamasanid7993472010-08-18 13:59:28 -070027import android.content.Intent;
Wink Saville5d5a2692013-06-29 07:54:13 -070028import android.content.res.Resources;
Amith Yamasanid7993472010-08-18 13:59:28 -070029import android.net.ConnectivityManager;
Wink Saville5d5a2692013-06-29 07:54:13 -070030import android.net.NetworkInfo;
Paul Jensend96c5fc2014-10-17 22:09:37 -040031import android.net.Uri;
Nick Pellya57eace2010-10-15 01:19:43 -070032import android.nfc.NfcAdapter;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070033import android.nfc.NfcManager;
Amith Yamasanid7993472010-08-18 13:59:28 -070034import android.os.Bundle;
Sudheer Shanka9e9e63b2016-02-11 18:48:14 +000035import android.os.UserHandle;
Julia Reynoldsee27b9d2014-05-09 13:36:20 -040036import android.os.UserManager;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070037import android.provider.SearchIndexableResource;
Amith Yamasanid7993472010-08-18 13:59:28 -070038import android.provider.Settings;
Jason Monk39b46742015-09-10 15:52:51 -040039import android.support.v14.preference.SwitchPreference;
40import android.support.v7.preference.Preference;
41import android.support.v7.preference.PreferenceScreen;
Wink Saville5d5a2692013-06-29 07:54:13 -070042import android.telephony.TelephonyManager;
43import android.text.TextUtils;
44import android.util.Log;
David Braun4e9f04d2013-09-16 13:45:42 -070045
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -080046import com.android.ims.ImsManager;
Chris Wren9d1bfd12016-01-26 18:04:01 -050047import com.android.internal.logging.MetricsProto.MetricsEvent;
Gilles Debunnee78c1872011-06-20 15:00:07 -070048import com.android.internal.telephony.TelephonyIntents;
Fan Zhang7f1a4b52016-10-12 12:35:52 -070049import com.android.settings.network.AirplaneModePreferenceController;
50import com.android.settings.network.MobileNetworkPreferenceController;
51import com.android.settings.network.TetherPreferenceController;
52import com.android.settings.network.VpnPreferenceController;
Gilles Debunnee78c1872011-06-20 15:00:07 -070053import com.android.settings.nfc.NfcEnabler;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070054import com.android.settings.search.BaseSearchIndexProvider;
55import com.android.settings.search.Indexable;
Sudheer Shanka8b868302016-01-26 13:50:23 +000056import com.android.settingslib.RestrictedLockUtils;
Sudheer Shanka682a9162016-01-13 22:10:18 +000057import com.android.settingslib.RestrictedPreference;
Jason Monk73a24962015-04-13 20:58:05 -040058
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070059import java.util.ArrayList;
60import java.util.Arrays;
Fyodor Kupolovca060e32016-06-24 13:01:11 -070061import java.util.Collections;
Fabrice Di Megliodba577f2014-06-06 16:31:45 -070062import java.util.List;
David Braun4e9f04d2013-09-16 13:45:42 -070063
Jason Monk73a24962015-04-13 20:58:05 -040064public class WirelessSettings extends SettingsPreferenceFragment implements Indexable {
Robert Greenwalt4929e912013-07-16 13:09:24 -070065 private static final String TAG = "WirelessSettings";
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080066
Nick Pellyad50ba02010-09-22 10:55:13 -070067 private static final String KEY_TOGGLE_NFC = "toggle_nfc";
tk.mun7c5c1652011-10-13 22:56:18 +090068 private static final String KEY_WIMAX_SETTINGS = "wimax_settings";
Jeff Hamilton3d670de2011-09-21 16:44:36 -050069 private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
Fan Zhang7f1a4b52016-10-12 12:35:52 -070070
Oscar Montemayor05411892010-08-03 16:56:09 -070071 private static final String KEY_PROXY_SETTINGS = "proxy_settings";
Fan Zhang7f1a4b52016-10-12 12:35:52 -070072
Wink Saville5d5a2692013-06-29 07:54:13 -070073 private static final String KEY_MANAGE_MOBILE_PLAN = "manage_mobile_plan";
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -080074 private static final String KEY_WFC_SETTINGS = "wifi_calling_settings";
Doris Linge6f635f2016-06-07 17:56:00 -070075 private static final String KEY_NETWORK_RESET = "network_reset";
Nick Pellyad50ba02010-09-22 10:55:13 -070076 private NfcEnabler mNfcEnabler;
Martijn Coenenbb4bdc22011-07-27 17:31:41 -050077 private NfcAdapter mNfcAdapter;
Chouting Zhang71cc49e2009-08-28 14:36:35 -050078
Wink Saville5d5a2692013-06-29 07:54:13 -070079 private ConnectivityManager mCm;
80 private TelephonyManager mTm;
Julia Reynoldsee27b9d2014-05-09 13:36:20 -040081 private UserManager mUm;
Wink Saville5d5a2692013-06-29 07:54:13 -070082
83 private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
84 private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
85
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -080086 private PreferenceScreen mButtonWfc;
Fan Zhang7f1a4b52016-10-12 12:35:52 -070087 private AirplaneModePreferenceController mAirplaneModePreferenceController;
88 private TetherPreferenceController mTetherPreferenceController;
89 private MobileNetworkPreferenceController mMobileNetworkPreferenceController;
90 private VpnPreferenceController mVpnPreferenceController;
David Braun4e9f04d2013-09-16 13:45:42 -070091
Chouting Zhang71cc49e2009-08-28 14:36:35 -050092 /**
93 * Invoked on each preference click in this hierarchy, overrides
Fabrice Di Meglio263bcc82014-01-17 19:17:58 -080094 * PreferenceFragment's implementation. Used to make sure we track the
Chouting Zhang71cc49e2009-08-28 14:36:35 -050095 * preference click events.
96 */
97 @Override
Jason Monk39b46742015-09-10 15:52:51 -040098 public boolean onPreferenceTreeClick(Preference preference) {
Wink Saville5d5a2692013-06-29 07:54:13 -070099 log("onPreferenceTreeClick: preference=" + preference);
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700100 if (mAirplaneModePreferenceController.handlePreferenceTreeClick(preference)) {
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500101 return true;
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700102 }
103 if (preference == findPreference(KEY_MANAGE_MOBILE_PLAN)) {
Wink Saville5d5a2692013-06-29 07:54:13 -0700104 onManageMobilePlanClick();
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500105 }
Chia-chi Yeh4e142112009-12-25 14:48:46 +0800106 // Let the intents be launched by the Preference manager
Jason Monk39b46742015-09-10 15:52:51 -0400107 return super.onPreferenceTreeClick(preference);
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500108 }
Chia-chi Yehb90452f2010-01-13 06:11:29 +0800109
Wink Saville5d5a2692013-06-29 07:54:13 -0700110 private String mManageMobilePlanMessage;
Wink Saville5d5a2692013-06-29 07:54:13 -0700111 public void onManageMobilePlanClick() {
112 log("onManageMobilePlanClick:");
113 mManageMobilePlanMessage = null;
114 Resources resources = getActivity().getResources();
115
Paul Jensen6953eea2015-06-11 10:26:33 -0400116 NetworkInfo ni = mCm.getActiveNetworkInfo();
Wink Saville5d5a2692013-06-29 07:54:13 -0700117 if (mTm.hasIccCard() && (ni != null)) {
Andrew Flynn17c008e2013-10-11 09:06:22 -0700118 // Check for carrier apps that can handle provisioning first
119 Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
Diego Pontorieroff9f67d2014-08-11 18:25:51 -0700120 List<String> carrierPackages =
Diego Pontorierobe7adcc2014-08-28 13:52:24 -0700121 mTm.getCarrierPackageNamesForIntent(provisioningIntent);
Diego Pontorieroff9f67d2014-08-11 18:25:51 -0700122 if (carrierPackages != null && !carrierPackages.isEmpty()) {
123 if (carrierPackages.size() != 1) {
124 Log.w(TAG, "Multiple matching carrier apps found, launching the first.");
125 }
126 provisioningIntent.setPackage(carrierPackages.get(0));
Andrew Flynn17c008e2013-10-11 09:06:22 -0700127 startActivity(provisioningIntent);
128 return;
129 }
130
Wink Saville5d5a2692013-06-29 07:54:13 -0700131 // Get provisioning URL
Robert Greenwalt4929e912013-07-16 13:09:24 -0700132 String url = mCm.getMobileProvisioningUrl();
Wink Saville5d5a2692013-06-29 07:54:13 -0700133 if (!TextUtils.isEmpty(url)) {
Paul Jensend96c5fc2014-10-17 22:09:37 -0400134 Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
135 Intent.CATEGORY_APP_BROWSER);
136 intent.setData(Uri.parse(url));
137 intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
138 Intent.FLAG_ACTIVITY_NEW_TASK);
139 try {
140 startActivity(intent);
141 } catch (ActivityNotFoundException e) {
142 Log.w(TAG, "onManageMobilePlanClick: startActivity failed" + e);
143 }
Wink Saville5d5a2692013-06-29 07:54:13 -0700144 } else {
145 // No provisioning URL
146 String operatorName = mTm.getSimOperatorName();
147 if (TextUtils.isEmpty(operatorName)) {
148 // Use NetworkOperatorName as second choice in case there is no
149 // SPN (Service Provider Name on the SIM). Such as with T-mobile.
150 operatorName = mTm.getNetworkOperatorName();
151 if (TextUtils.isEmpty(operatorName)) {
152 mManageMobilePlanMessage = resources.getString(
153 R.string.mobile_unknown_sim_operator);
154 } else {
155 mManageMobilePlanMessage = resources.getString(
156 R.string.mobile_no_provisioning_url, operatorName);
157 }
158 } else {
159 mManageMobilePlanMessage = resources.getString(
160 R.string.mobile_no_provisioning_url, operatorName);
161 }
162 }
163 } else if (mTm.hasIccCard() == false) {
164 // No sim card
165 mManageMobilePlanMessage = resources.getString(R.string.mobile_insert_sim_card);
166 } else {
167 // NetworkInfo is null, there is no connection
168 mManageMobilePlanMessage = resources.getString(R.string.mobile_connect_to_internet);
169 }
170 if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
171 log("onManageMobilePlanClick: message=" + mManageMobilePlanMessage);
172 showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
173 }
174 }
175
Wink Saville5d5a2692013-06-29 07:54:13 -0700176 @Override
177 public Dialog onCreateDialog(int dialogId) {
178 log("onCreateDialog: dialogId=" + dialogId);
179 switch (dialogId) {
180 case MANAGE_MOBILE_PLAN_DIALOG_ID:
181 return new AlertDialog.Builder(getActivity())
182 .setMessage(mManageMobilePlanMessage)
183 .setCancelable(false)
184 .setPositiveButton(com.android.internal.R.string.ok,
185 new DialogInterface.OnClickListener() {
186 @Override
187 public void onClick(DialogInterface dialog, int id) {
188 log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
189 mManageMobilePlanMessage = null;
190 }
191 })
192 .create();
193 }
194 return super.onCreateDialog(dialogId);
195 }
196
Fan Zhang20374fd2016-09-23 12:10:38 -0700197 @Override
198 public int getDialogMetricsCategory(int dialogId) {
199 if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
200 return MetricsEvent.DIALOG_MANAGE_MOBILE_PLAN;
201 }
202 return 0;
203 }
204
Wink Saville5d5a2692013-06-29 07:54:13 -0700205 private void log(String s) {
206 Log.d(TAG, s);
207 }
208
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800209 @Override
Fan Zhang65076132016-08-08 10:25:13 -0700210 public int getMetricsCategory() {
Chris Wren9d1bfd12016-01-26 18:04:01 -0500211 return MetricsEvent.WIRELESS;
Chris Wren8a963ba2015-03-20 10:29:14 -0400212 }
213
214 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700215 public void onCreate(Bundle savedInstanceState) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800216 super.onCreate(savedInstanceState);
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700217
Wink Saville5d5a2692013-06-29 07:54:13 -0700218 if (savedInstanceState != null) {
219 mManageMobilePlanMessage = savedInstanceState.getString(SAVED_MANAGE_MOBILE_PLAN_MSG);
220 }
221 log("onCreate: mManageMobilePlanMessage=" + mManageMobilePlanMessage);
222
223 mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
224 mTm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Julia Reynoldsee27b9d2014-05-09 13:36:20 -0400225 mUm = (UserManager) getSystemService(Context.USER_SERVICE);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800226
227 addPreferencesFromResource(R.xml.wireless_settings);
228
Xiaohui Chen6f038292015-09-02 16:54:00 -0700229 final boolean isAdmin = mUm.isAdminUser();
Amith Yamasani9627a8e2012-09-23 12:54:14 -0700230
Amith Yamasanid7993472010-08-18 13:59:28 -0700231 final Activity activity = getActivity();
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700232
233 final PreferenceScreen screen = getPreferenceScreen();
234 mAirplaneModePreferenceController = new AirplaneModePreferenceController(activity, this);
235 mTetherPreferenceController = new TetherPreferenceController(activity);
236 mMobileNetworkPreferenceController = new MobileNetworkPreferenceController(activity);
237 mVpnPreferenceController = new VpnPreferenceController(activity);
238
239 mAirplaneModePreferenceController.displayPreference(screen);
240 mTetherPreferenceController.displayPreference(screen);
241 mMobileNetworkPreferenceController.displayPreference(screen);
242 mVpnPreferenceController.displayPreference(screen);
243
Fabrice Di Meglio4325f802014-08-15 14:14:17 -0700244 SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC);
Sudheer Shanka682a9162016-01-13 22:10:18 +0000245 RestrictedPreference androidBeam = (RestrictedPreference) findPreference(
246 KEY_ANDROID_BEAM_SETTINGS);
Chia-chi Yeh4e142112009-12-25 14:48:46 +0800247
Jeff Hamilton3d670de2011-09-21 16:44:36 -0500248 mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
Irfan Sheriff936e3fa2012-05-07 15:51:37 -0700249
Pavel Zhamaitsiak3e7e2c52015-07-23 09:31:58 -0700250 mButtonWfc = (PreferenceScreen) findPreference(KEY_WFC_SETTINGS);
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -0800251
Christopher Tate6a5929b2012-09-10 15:39:05 -0700252 String toggleable = Settings.Global.getString(activity.getContentResolver(),
253 Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
Chia-chi Yeh4e142112009-12-25 14:48:46 +0800254
tk.mun7c5c1652011-10-13 22:56:18 +0900255 //enable/disable wimax depending on the value in config.xml
Xiaohui Chen6f038292015-09-02 16:54:00 -0700256 final boolean isWimaxEnabled = isAdmin && this.getResources().getBoolean(
tk.mun7c5c1652011-10-13 22:56:18 +0900257 com.android.internal.R.bool.config_wimaxEnabled);
Sudheer Shanka9e9e63b2016-02-11 18:48:14 +0000258 if (!isWimaxEnabled || RestrictedLockUtils.hasBaseUserRestriction(activity,
259 UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
tk.mun7c5c1652011-10-13 22:56:18 +0900260 PreferenceScreen root = getPreferenceScreen();
Xiaohui Chen6f038292015-09-02 16:54:00 -0700261 Preference ps = findPreference(KEY_WIMAX_SETTINGS);
tk.mun7c5c1652011-10-13 22:56:18 +0900262 if (ps != null) root.removePreference(ps);
263 } else {
Christopher Tate6a5929b2012-09-10 15:39:05 -0700264 if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX )
tk.mun7c5c1652011-10-13 22:56:18 +0900265 && isWimaxEnabled) {
Xiaohui Chen6f038292015-09-02 16:54:00 -0700266 Preference ps = findPreference(KEY_WIMAX_SETTINGS);
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700267 ps.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
tk.mun7c5c1652011-10-13 22:56:18 +0900268 }
269 }
Geoffrey Borggaardfe21d9a2013-08-02 18:16:27 -0400270
Nick Pelly9894d4a2011-08-09 07:10:16 -0700271 // Manually set dependencies for NFC when not toggleable.
Christopher Tate6a5929b2012-09-10 15:39:05 -0700272 if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) {
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700273 findPreference(KEY_TOGGLE_NFC).setDependency(
274 AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
275 findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency(
276 AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
Nick Pelly9894d4a2011-08-09 07:10:16 -0700277 }
278
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700279 // Remove NFC if not available
Martijn Coenenbb4bdc22011-07-27 17:31:41 -0500280 mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
281 if (mNfcAdapter == null) {
Nick Pellyad50ba02010-09-22 10:55:13 -0700282 getPreferenceScreen().removePreference(nfc);
Jeff Hamilton3d670de2011-09-21 16:44:36 -0500283 getPreferenceScreen().removePreference(androidBeam);
Nick Pelly9894d4a2011-08-09 07:10:16 -0700284 mNfcEnabler = null;
Chia-chi Yeh4e142112009-12-25 14:48:46 +0800285 }
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800286
Julia Reynoldsee27b9d2014-05-09 13:36:20 -0400287 // Remove Mobile Network Settings and Manage Mobile Plan for secondary users,
Sudheer Shanka8b868302016-01-26 13:50:23 +0000288 // if it's a wifi-only device.
Sudheer Shanka9e9e63b2016-02-11 18:48:14 +0000289 if (!isAdmin || Utils.isWifiOnly(getActivity()) ||
290 RestrictedLockUtils.hasBaseUserRestriction(activity,
291 UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
Wink Saville5d5a2692013-06-29 07:54:13 -0700292 removePreference(KEY_MANAGE_MOBILE_PLAN);
Amith Yamasani0f85c482011-02-23 17:19:11 -0800293 }
Sungmin Choi24903152013-10-15 16:11:55 -0700294 // Remove Mobile Network Settings and Manage Mobile Plan
295 // if config_show_mobile_plan sets false.
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700296 final boolean isMobilePlanEnabled = this.getResources().getBoolean(
Sungmin Choi24903152013-10-15 16:11:55 -0700297 R.bool.config_show_mobile_plan);
298 if (!isMobilePlanEnabled) {
299 Preference pref = findPreference(KEY_MANAGE_MOBILE_PLAN);
300 if (pref != null) {
301 removePreference(KEY_MANAGE_MOBILE_PLAN);
302 }
303 }
Amith Yamasani0f85c482011-02-23 17:19:11 -0800304
Oscar Montemayor05411892010-08-03 16:56:09 -0700305 // Enable Proxy selector settings if allowed.
306 Preference mGlobalProxy = findPreference(KEY_PROXY_SETTINGS);
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700307 final DevicePolicyManager mDPM = (DevicePolicyManager)
Amith Yamasanid7993472010-08-18 13:59:28 -0700308 activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
Robert Greenwalt6f3a98b2010-12-28 16:11:12 -0800309 // proxy UI disabled until we have better app support
310 getPreferenceScreen().removePreference(mGlobalProxy);
Oscar Montemayor05411892010-08-03 16:56:09 -0700311 mGlobalProxy.setEnabled(mDPM.getGlobalProxyAdmin() == null);
312
Doris Linge6f635f2016-06-07 17:56:00 -0700313 // Remove network reset if not allowed
314 if (RestrictedLockUtils.hasBaseUserRestriction(activity,
315 UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
316 removePreference(KEY_NETWORK_RESET);
317 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800318 }
Robert Greenwaltc4764d22010-02-12 14:21:37 -0800319
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800320 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700321 public void onResume() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800322 super.onResume();
Danica Chang32711b62010-08-10 18:41:29 -0700323
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700324 mAirplaneModePreferenceController.onResume();
Nick Pelly9894d4a2011-08-09 07:10:16 -0700325 if (mNfcEnabler != null) {
326 mNfcEnabler.resume();
Martijn Coenenbb4bdc22011-07-27 17:31:41 -0500327 }
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -0800328
Pavel Zhamaitsiak3e7e2c52015-07-23 09:31:58 -0700329 // update WFC setting
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -0800330 final Context context = getActivity();
Pavel Zhamaitsiake2f59b92016-06-20 17:52:48 -0700331 if (ImsManager.isWfcEnabledByPlatform(context) &&
332 ImsManager.isWfcProvisionedOnDevice(context)) {
Pavel Zhamaitsiak3e7e2c52015-07-23 09:31:58 -0700333 getPreferenceScreen().addPreference(mButtonWfc);
334
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -0800335 mButtonWfc.setSummary(WifiCallingSettings.getWfcModeSummary(
Meng Wangfe3749d2016-09-19 14:53:24 -0700336 context, ImsManager.getWfcMode(context, mTm.isNetworkRoaming())));
Pavel Zhamaitsiak3e7e2c52015-07-23 09:31:58 -0700337 } else {
338 removePreference(KEY_WFC_SETTINGS);
Pavel Zhamaitsiak4ab32562015-02-23 15:34:07 -0800339 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800340 }
Danica Chang32711b62010-08-10 18:41:29 -0700341
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800342 @Override
Wink Saville5d5a2692013-06-29 07:54:13 -0700343 public void onSaveInstanceState(Bundle outState) {
344 super.onSaveInstanceState(outState);
345
346 if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
347 outState.putString(SAVED_MANAGE_MOBILE_PLAN_MSG, mManageMobilePlanMessage);
348 }
349 }
350
351 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700352 public void onPause() {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800353 super.onPause();
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700354 mAirplaneModePreferenceController.onPause();
Nick Pelly9894d4a2011-08-09 07:10:16 -0700355 if (mNfcEnabler != null) {
356 mNfcEnabler.pause();
357 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800358 }
Danica Chang32711b62010-08-10 18:41:29 -0700359
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500360 @Override
Amith Yamasanid7993472010-08-18 13:59:28 -0700361 public void onActivityResult(int requestCode, int resultCode, Intent data) {
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700362 mAirplaneModePreferenceController.onActivityResult(requestCode, resultCode, data);
Geoffrey Borggaardfe21d9a2013-08-02 18:16:27 -0400363 super.onActivityResult(requestCode, resultCode, data);
Chouting Zhang71cc49e2009-08-28 14:36:35 -0500364 }
Amith Yamasanib0b37ae2012-04-23 15:35:36 -0700365
366 @Override
367 protected int getHelpResource() {
368 return R.string.help_url_more_networks;
369 }
David Braun4e9f04d2013-09-16 13:45:42 -0700370
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700371 /**
372 * For Search.
373 */
374 public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
375 new BaseSearchIndexProvider() {
376 @Override
377 public List<SearchIndexableResource> getXmlResourcesToIndex(
378 Context context, boolean enabled) {
Fyodor Kupolovca060e32016-06-24 13:01:11 -0700379 // Remove wireless settings from search in demo mode
380 if (UserManager.isDeviceInDemoMode(context)) {
381 return Collections.emptyList();
382 }
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700383 SearchIndexableResource sir = new SearchIndexableResource(context);
384 sir.xmlResId = R.xml.wireless_settings;
385 return Arrays.asList(sir);
386 }
387
388 @Override
389 public List<String> getNonIndexableKeys(Context context) {
390 final ArrayList<String> result = new ArrayList<String>();
391
Julia Reynolds00d19c72014-06-24 15:22:50 -0400392 final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
Xiaohui Chen44879a32015-07-22 13:53:22 -0700393 final boolean isSecondaryUser = !um.isAdminUser();
Amith Yamasani32505ac2014-11-12 13:46:43 -0800394 final boolean isWimaxEnabled = !isSecondaryUser
395 && context.getResources().getBoolean(
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700396 com.android.internal.R.bool.config_wimaxEnabled);
Sudheer Shanka8b868302016-01-26 13:50:23 +0000397 if (!isWimaxEnabled) {
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700398 result.add(KEY_WIMAX_SETTINGS);
399 }
400
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700401 new VpnPreferenceController(context).updateNonIndexableKeys(result);
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700402
403 // Remove NFC if not available
Amith Yamasani32505ac2014-11-12 13:46:43 -0800404 final NfcManager manager = (NfcManager)
405 context.getSystemService(Context.NFC_SERVICE);
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700406 if (manager != null) {
407 NfcAdapter adapter = manager.getDefaultAdapter();
408 if (adapter == null) {
409 result.add(KEY_TOGGLE_NFC);
410 result.add(KEY_ANDROID_BEAM_SETTINGS);
411 }
412 }
413
414 // Remove Mobile Network Settings and Manage Mobile Plan if it's a wifi-only device.
415 if (isSecondaryUser || Utils.isWifiOnly(context)) {
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700416 result.add(KEY_MANAGE_MOBILE_PLAN);
417 }
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700418 new MobileNetworkPreferenceController(context).updateNonIndexableKeys(result);
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700419
420 // Remove Mobile Network Settings and Manage Mobile Plan
421 // if config_show_mobile_plan sets false.
422 final boolean isMobilePlanEnabled = context.getResources().getBoolean(
423 R.bool.config_show_mobile_plan);
424 if (!isMobilePlanEnabled) {
425 result.add(KEY_MANAGE_MOBILE_PLAN);
426 }
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700427 // Remove Airplane Mode settings if it's a stationary device such as a TV.
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700428 new AirplaneModePreferenceController(context, null /* fragment */)
429 .updateNonIndexableKeys(result);
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700430
431 // proxy UI disabled until we have better app support
432 result.add(KEY_PROXY_SETTINGS);
433
Fan Zhang7f1a4b52016-10-12 12:35:52 -0700434 new TetherPreferenceController(context)
435 .updateNonIndexableKeys(result);
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700436
Pavel Zhamaitsiake2f59b92016-06-20 17:52:48 -0700437 if (!ImsManager.isWfcEnabledByPlatform(context) ||
438 !ImsManager.isWfcProvisionedOnDevice(context)) {
Anju Mathapatiec4706a2015-07-27 17:14:14 +0530439 result.add(KEY_WFC_SETTINGS);
440 }
441
Doris Linge6f635f2016-06-07 17:56:00 -0700442 if (RestrictedLockUtils.hasBaseUserRestriction(context,
443 UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
444 result.add(KEY_NETWORK_RESET);
445 }
446
Fabrice Di Megliodba577f2014-06-06 16:31:45 -0700447 return result;
448 }
449 };
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800450}