WifiEnabler.java revision b90452f3d26201ea6a231f2150204241e66cd3fb
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh * Copyright (C) 2010 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.wifi; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.settings.R; 20b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yehimport com.android.settings.WirelessSettings; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.NetworkInfo; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiManager; 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 3083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.provider.Settings; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils; 32b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yehimport android.widget.Toast; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class WifiEnabler implements Preference.OnPreferenceChangeListener { 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final Context mContext; 36b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private final CheckBoxPreference mCheckBox; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final CharSequence mOriginalSummary; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 39b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private final WifiManager mWifiManager; 40b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private final IntentFilter mIntentFilter; 41b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 44b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh String action = intent.getAction(); 45b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { 46b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh handleWifiStateChanged(intent.getIntExtra( 47b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)); 48b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { 49b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh handleNetworkStateChanged((NetworkInfo) 50b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO)); 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 544e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh 55b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh public WifiEnabler(Context context, CheckBoxPreference checkBox) { 564e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh this(context, (WifiManager) context.getSystemService(Context.WIFI_SERVICE), 57b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh checkBox); 584e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh } 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public WifiEnabler(Context context, WifiManager wifiManager, 61b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh CheckBoxPreference checkBox) { 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mContext = context; 63b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox = checkBox; 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiManager = wifiManager; 65b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mOriginalSummary = checkBox.getSummary(); 66b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh checkBox.setPersistent(false); 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 68b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); 69b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void resume() { 73b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh // Wi-Fi state is sticky, so just let the receiver update UI 74b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mContext.registerReceiver(mReceiver, mIntentFilter); 75b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setOnPreferenceChangeListener(this); 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void pause() { 79b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mContext.unregisterReceiver(mReceiver); 80b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setOnPreferenceChangeListener(null); 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceChange(Preference preference, Object value) { 84b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh boolean enable = (Boolean) value; 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 86b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh // Show toast message if Wi-Fi is not allowed in airplane mode 87b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh if (enable && !WirelessSettings 88b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh .isRadioAllowed(mContext, Settings.System.RADIO_WIFI)) { 89b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh Toast.makeText(mContext, R.string.wifi_in_airplane_mode, 90b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh Toast.LENGTH_SHORT).show(); 91b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh return false; 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 94b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh if (mWifiManager.setWifiEnabled(enable)) { 95b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setEnabled(false); 96b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh } else { 97b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(R.string.wifi_error); 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 991c4e96864f054f0d3d754d21eb4803fe0df6d89fJeff Sharkey 100b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh // Don't update UI to opposite state until we're sure 101b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh return false; 102b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh } 103b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh 104b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private void handleWifiStateChanged(int state) { 105b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh switch (state) { 106b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_ENABLING: 107b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(R.string.wifi_starting); 108b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setEnabled(false); 109b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 110b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_ENABLED: 111b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setChecked(true); 112b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(null); 113b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setEnabled(true); 114b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 115b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_DISABLING: 116b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(R.string.wifi_stopping); 117b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setEnabled(false); 118b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 119b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_DISABLED: 120b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setChecked(false); 121b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(mOriginalSummary); 122b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setEnabled(true); 123b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 124b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh default: 125b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setChecked(false); 126b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(R.string.wifi_error); 127b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setEnabled(true); 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void handleNetworkStateChanged(NetworkInfo networkInfo) { 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (mWifiManager.isWifiEnabled()) { 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String summary = WifiStatus.getStatus(mContext, 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiManager.getConnectionInfo().getSSID(), networkInfo.getDetailedState()); 135b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mCheckBox.setSummary(summary); 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 139