WirelessSettings.java revision 0cb3743e93aef81e7669f1e6c81184559e0f8154
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2007 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 190cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.bluetooth.BluetoothAdapter; 2071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport android.content.Intent; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiManager; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 230cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.os.IBinder; 240cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.os.ServiceManager; 2571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport android.os.SystemProperties; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 2783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.preference.Preference; 2883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.preference.PreferenceActivity; 290cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.preference.PreferenceScreen; 3083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.provider.Settings; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport com.android.internal.telephony.TelephonyIntents; 3371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport com.android.internal.telephony.TelephonyProperties; 340cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport com.android.settings.bluetooth.BluetoothEnabler; 350cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport com.android.settings.wifi.WifiEnabler; 3671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class WirelessSettings extends PreferenceActivity { 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane"; 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth"; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_TOGGLE_WIFI = "toggle_wifi"; 4283bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood private static final String KEY_WIFI_SETTINGS = "wifi_settings"; 430cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan private static final String KEY_BT_SETTINGS = "bt_settings"; 4483bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood private static final String KEY_VPN_SETTINGS = "vpn_settings"; 4571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang public static final String EXIT_ECM_RESULT = "exit_ecm_result"; 4671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang public static final int REQUEST_CODE_EXIT_ECM = 1; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private WifiEnabler mWifiEnabler; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private AirplaneModeEnabler mAirplaneModeEnabler; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private BluetoothEnabler mBtEnabler; 5171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang private CheckBoxPreference mAirplaneModePreference; 5271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang 5371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang /** 5471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang * Invoked on each preference click in this hierarchy, overrides 5571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang * PreferenceActivity's implementation. Used to make sure we track the 5671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang * preference click events. 5771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang */ 5871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang @Override 5971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 6071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang if ( (preference == mAirplaneModePreference) && 6171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang (Boolean.parseBoolean( 6271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) ) { 6371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang // In ECM mode launch ECM app dialog 6471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang startActivityForResult( 6571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null), 6671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang REQUEST_CODE_EXIT_ECM); 6771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang 6871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang return true; 6971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang } 7071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang else { 7171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang // Let the intents be launched by the Preference manager 7271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang return false; 7371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang } 7471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang } 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.wireless_settings); 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project initToggles(); 8371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE); 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiEnabler.resume(); 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mBtEnabler.resume(); 92d3da3379a480ce16cac735d88855b6e3d76597d3Michael Chan mAirplaneModeEnabler.resume(); 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onPause() { 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiEnabler.pause(); 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAirplaneModeEnabler.pause(); 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mBtEnabler.pause(); 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void initToggles() { 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 10683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Preference airplanePreference = findPreference(KEY_TOGGLE_AIRPLANE); 10783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Preference wifiPreference = findPreference(KEY_TOGGLE_WIFI); 10883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Preference btPreference = findPreference(KEY_TOGGLE_BLUETOOTH); 10983bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Preference wifiSettings = findPreference(KEY_WIFI_SETTINGS); 11083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Preference vpnSettings = findPreference(KEY_VPN_SETTINGS); 11183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood 1120cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan IBinder b = ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE); 1130cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan if (b == null) { 1140cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan // Disable BT Settings if BT service is not available. 1150cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan Preference btSettings = findPreference(KEY_BT_SETTINGS); 1160cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan btSettings.setEnabled(false); 1170cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan } 1180cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiEnabler = new WifiEnabler( 12083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood this, (WifiManager) getSystemService(WIFI_SERVICE), 12183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood (CheckBoxPreference) wifiPreference); 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAirplaneModeEnabler = new AirplaneModeEnabler( 12383bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood this, (CheckBoxPreference) airplanePreference); 12483bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood mBtEnabler = new BluetoothEnabler(this, (CheckBoxPreference) btPreference); 12583bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood 12683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood // manually set up dependencies for Wifi if its radio is not toggleable in airplane mode 12783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood String toggleableRadios = Settings.System.getString(getContentResolver(), 12883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS); 12983bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood if (toggleableRadios == null || !toggleableRadios.contains(Settings.System.RADIO_WIFI)) { 13083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood wifiPreference.setDependency(airplanePreference.getKey()); 13183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood wifiSettings.setDependency(airplanePreference.getKey()); 13283bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood vpnSettings.setDependency(airplanePreference.getKey()); 13383bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood } 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 13583bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood 13671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang @Override 13771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang protected void onActivityResult(int requestCode, int resultCode, Intent data) { 13871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang switch(requestCode) { 13971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang case REQUEST_CODE_EXIT_ECM: 14071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang Boolean isChoiceYes = 14171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang data.getBooleanExtra(EXIT_ECM_RESULT, false); 14271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang // Set Airplane mode based on the return value and checkbox state 14371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes, 14471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang mAirplaneModePreference.isChecked()); 14571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang break; 14671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang 14771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang default: 14871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang break; 14971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang } 15071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang } 15171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 153