WirelessSettings.java revision 32711b6752eb73324e1b10db975ac956888eda96
1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 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 19import android.app.admin.DevicePolicyManager; 20import android.bluetooth.BluetoothAdapter; 21import android.content.Context; 22import android.content.Intent; 23import android.net.ConnectivityManager; 24import android.net.wifi.WifiManager; 25import android.os.Bundle; 26import android.os.ServiceManager; 27import android.os.SystemProperties; 28import android.preference.CheckBoxPreference; 29import android.preference.Preference; 30import android.preference.PreferenceActivity; 31import android.preference.PreferenceScreen; 32import android.provider.Settings; 33import android.util.Log; 34 35import com.android.internal.telephony.TelephonyIntents; 36import com.android.internal.telephony.TelephonyProperties; 37import com.android.settings.bluetooth.BluetoothEnabler; 38import com.android.settings.wifi.WifiEnabler; 39 40public class WirelessSettings extends PreferenceActivity { 41 42 private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane"; 43 private static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth"; 44 private static final String KEY_TOGGLE_WIFI = "toggle_wifi"; 45 private static final String KEY_WIFI_SETTINGS = "wifi_settings"; 46 private static final String KEY_BT_SETTINGS = "bt_settings"; 47 private static final String KEY_VPN_SETTINGS = "vpn_settings"; 48 private static final String KEY_TETHER_SETTINGS = "tether_settings"; 49 private static final String KEY_PROXY_SETTINGS = "proxy_settings"; 50 public static final String EXIT_ECM_RESULT = "exit_ecm_result"; 51 public static final int REQUEST_CODE_EXIT_ECM = 1; 52 53 private AirplaneModeEnabler mAirplaneModeEnabler; 54 private CheckBoxPreference mAirplaneModePreference; 55 private WifiEnabler mWifiEnabler; 56 private BluetoothEnabler mBtEnabler; 57 58 /** 59 * Invoked on each preference click in this hierarchy, overrides 60 * PreferenceActivity's implementation. Used to make sure we track the 61 * preference click events. 62 */ 63 @Override 64 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 65 if (preference == mAirplaneModePreference && Boolean.parseBoolean( 66 SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { 67 // In ECM mode launch ECM app dialog 68 startActivityForResult( 69 new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null), 70 REQUEST_CODE_EXIT_ECM); 71 return true; 72 } 73 // Let the intents be launched by the Preference manager 74 return false; 75 } 76 77 public static boolean isRadioAllowed(Context context, String type) { 78 if (!AirplaneModeEnabler.isAirplaneModeOn(context)) { 79 return true; 80 } 81 // Here we use the same logic in onCreate(). 82 String toggleable = Settings.System.getString(context.getContentResolver(), 83 Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS); 84 return toggleable != null && toggleable.contains(type); 85 } 86 87 @Override 88 protected void onCreate(Bundle savedInstanceState) { 89 super.onCreate(savedInstanceState); 90 91 addPreferencesFromResource(R.xml.wireless_settings); 92 93 CheckBoxPreference airplane = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE); 94 CheckBoxPreference wifi = (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI); 95 CheckBoxPreference bt = (CheckBoxPreference) findPreference(KEY_TOGGLE_BLUETOOTH); 96 97 mAirplaneModeEnabler = new AirplaneModeEnabler(this, airplane); 98 mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE); 99 mWifiEnabler = new WifiEnabler(this, wifi); 100 mBtEnabler = new BluetoothEnabler(this, bt); 101 102 String toggleable = Settings.System.getString(getContentResolver(), 103 Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS); 104 105 // Manually set dependencies for Wifi when not toggleable. 106 if (toggleable == null || !toggleable.contains(Settings.System.RADIO_WIFI)) { 107 wifi.setDependency(KEY_TOGGLE_AIRPLANE); 108 findPreference(KEY_WIFI_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE); 109 findPreference(KEY_VPN_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE); 110 } 111 112 // Manually set dependencies for Bluetooth when not toggleable. 113 if (toggleable == null || !toggleable.contains(Settings.System.RADIO_BLUETOOTH)) { 114 bt.setDependency(KEY_TOGGLE_AIRPLANE); 115 findPreference(KEY_BT_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE); 116 } 117 118 // Disable Bluetooth Settings if Bluetooth service is not available. 119 if (ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE) == null) { 120 findPreference(KEY_BT_SETTINGS).setEnabled(false); 121 } 122 123 // Enable Proxy selector settings if allowed. 124 Preference mGlobalProxy = findPreference(KEY_PROXY_SETTINGS); 125 DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 126 mGlobalProxy.setEnabled(mDPM.getGlobalProxyAdmin() == null); 127 128 // Disable Tethering if it's not allowed 129 ConnectivityManager cm = 130 (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 131 if (!cm.isTetheringSupported()) { 132 getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS)); 133 } else { 134 String[] usbRegexs = cm.getTetherableUsbRegexs(); 135 String[] wifiRegexs = cm.getTetherableWifiRegexs(); 136 String[] bluetoothRegexs = cm.getTetherableBluetoothRegexs(); 137 138 boolean usbAvailable = usbRegexs.length != 0; 139 boolean wifiAvailable = wifiRegexs.length != 0; 140 boolean bluetoothAvailable = bluetoothRegexs.length != 0; 141 142 Preference p = findPreference(KEY_TETHER_SETTINGS); 143 if (wifiAvailable && usbAvailable && bluetoothAvailable) { 144 p.setTitle(R.string.tether_settings_title_all); 145 p.setSummary(R.string.tether_settings_summary_all); 146 } else if (wifiAvailable && usbAvailable) { 147 p.setTitle(R.string.tether_settings_title_all); 148 p.setSummary(R.string.tether_settings_summary_usb_wifi); 149 } else if (wifiAvailable && bluetoothAvailable) { 150 p.setTitle(R.string.tether_settings_title_all); 151 p.setSummary(R.string.tether_settings_summary_wifi_bluetooth); 152 } else if (wifiAvailable) { 153 p.setTitle(R.string.tether_settings_title_wifi); 154 p.setSummary(R.string.tether_settings_summary_wifi); 155 } else if (usbAvailable && bluetoothAvailable) { 156 p.setTitle(R.string.tether_settings_title_usb_bluetooth); 157 p.setSummary(R.string.tether_settings_summary_usb_bluetooth); 158 } else if (usbAvailable) { 159 p.setTitle(R.string.tether_settings_title_usb); 160 p.setSummary(R.string.tether_settings_summary_usb); 161 } else { 162 p.setTitle(R.string.tether_settings_title_bluetooth); 163 p.setSummary(R.string.tether_settings_summary_bluetooth); 164 } 165 } 166 } 167 168 @Override 169 protected void onResume() { 170 super.onResume(); 171 172 mAirplaneModeEnabler.resume(); 173 mWifiEnabler.resume(); 174 mBtEnabler.resume(); 175 } 176 177 @Override 178 protected void onPause() { 179 super.onPause(); 180 181 mAirplaneModeEnabler.pause(); 182 mWifiEnabler.pause(); 183 mBtEnabler.pause(); 184 } 185 186 @Override 187 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 188 if (requestCode == REQUEST_CODE_EXIT_ECM) { 189 Boolean isChoiceYes = data.getBooleanExtra(EXIT_ECM_RESULT, false); 190 // Set Airplane mode based on the return value and checkbox state 191 mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes, 192 mAirplaneModePreference.isChecked()); 193 } 194 } 195} 196