WifiEnabler.java revision d9e2c946af8cebeaf9fa81ca5657d3932ee56d1b
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 android.content.BroadcastReceiver; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.NetworkInfo; 24feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yehimport android.net.wifi.SupplicantState; 25feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yehimport android.net.wifi.WifiInfo; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiManager; 27784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglioimport android.os.Handler; 28784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglioimport android.os.Message; 293f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Banimport android.os.UserHandle; 303f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Banimport android.os.UserManager; 3183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.provider.Settings; 32e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.widget.Switch; 33b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yehimport android.widget.Toast; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 359d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 36e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.settings.R; 37aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhangimport com.android.settings.core.instrumentation.MetricsFeatureProvider; 385f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglioimport com.android.settings.search.Index; 3941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglioimport com.android.settings.widget.SwitchBar; 403f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Banimport com.android.settingslib.RestrictedLockUtils; 413f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Banimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 42fc1b00cfe439b0c462b3acbba709c3cbc1132a1fJason Monkimport com.android.settingslib.WirelessUtils; 43e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 44cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriffimport java.util.concurrent.atomic.AtomicBoolean; 45cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff 4641937766981423c9252e12e3319b2e7532739627Fabrice Di Megliopublic class WifiEnabler implements SwitchBar.OnSwitchChangeListener { 47aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang 48aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang private final SwitchBar mSwitchBar; 49aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang private final WifiManager mWifiManager; 50aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang private final MetricsFeatureProvider mMetricsFeatureProvider; 51aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang 52d25314d3305ed1a07b53991a978cd71219ef2a10Fabrice Di Meglio private Context mContext; 53e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande private boolean mListeningToOnSwitchChange = false; 54cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff private AtomicBoolean mConnected = new AtomicBoolean(false); 55cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff 56aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang 57b1c0e0b1c93acbc71a2063411ae4ac86f9fc9fbfIrfan Sheriff private boolean mStateMachineEvent; 58b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private final IntentFilter mIntentFilter; 59b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 62b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh String action = intent.getAction(); 63b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { 64b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh handleWifiStateChanged(intent.getIntExtra( 65b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)); 66feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { 67cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff if (!mConnected.get()) { 68cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState) 69cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); 70cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff } 71b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { 72cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff NetworkInfo info = (NetworkInfo) intent.getParcelableExtra( 73cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff WifiManager.EXTRA_NETWORK_INFO); 74cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff mConnected.set(info.isConnected()); 75cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff handleStateChanged(info.getDetailedState()); 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 794e14211d21387d645ecdad406f3350d36e5a8643Chia-chi Yeh 80784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio private static final String EVENT_DATA_IS_WIFI_ON = "is_wifi_on"; 81784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio private static final int EVENT_UPDATE_INDEX = 0; 82784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio 83784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio private Handler mHandler = new Handler() { 84784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio @Override 85784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio public void handleMessage(Message msg) { 86784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio switch (msg.what) { 87784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio case EVENT_UPDATE_INDEX: 88784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio final boolean isWiFiOn = msg.getData().getBoolean(EVENT_DATA_IS_WIFI_ON); 89784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio Index.getInstance(mContext).updateFromClassNameResource( 90da0e6ff8c25fad17f71166bd14ca655eb11d13b4Fabrice Di Meglio WifiSettings.class.getName(), true, isWiFiOn); 91784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio break; 92784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio } 93784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio } 94784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio }; 95784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio 96aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang public WifiEnabler(Context context, SwitchBar switchBar, 97aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang MetricsFeatureProvider metricsFeatureProvider) { 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mContext = context; 9941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio mSwitchBar = switchBar; 100aa71afe5978b1340a2d702f3a75d22baf8c96348Fan Zhang mMetricsFeatureProvider = metricsFeatureProvider; 1019dee8a96c5682aebff50adc8c87519ee6c36e3efChia-chi Yeh mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 10292239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio 103b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); 104feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh // The order matters! We really should not depend on this. :( 105feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); 106b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 10792239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio 108204521626f63bef4a8ac2d76334b94dbb0f3aa3bFabrice Di Meglio setupSwitchBar(); 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 111138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio public void setupSwitchBar() { 11292239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio final int state = mWifiManager.getWifiState(); 11392239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio handleWifiStateChanged(state); 114e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande if (!mListeningToOnSwitchChange) { 115e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mSwitchBar.addOnSwitchChangeListener(this); 116e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mListeningToOnSwitchChange = true; 117e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande } 118138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio mSwitchBar.show(); 119138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio } 120138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio 121138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio public void teardownSwitchBar() { 122e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande if (mListeningToOnSwitchChange) { 123e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mSwitchBar.removeOnSwitchChangeListener(this); 124e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mListeningToOnSwitchChange = false; 125e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande } 126138ff8c0457c6e1345015973668d652fa17c7c3bFabrice Di Meglio mSwitchBar.hide(); 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 129d25314d3305ed1a07b53991a978cd71219ef2a10Fabrice Di Meglio public void resume(Context context) { 130d25314d3305ed1a07b53991a978cd71219ef2a10Fabrice Di Meglio mContext = context; 131b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh // Wi-Fi state is sticky, so just let the receiver update UI 132b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mContext.registerReceiver(mReceiver, mIntentFilter); 133e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande if (!mListeningToOnSwitchChange) { 134e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mSwitchBar.addOnSwitchChangeListener(this); 135e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mListeningToOnSwitchChange = true; 136e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande } 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 138cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void pause() { 140b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh mContext.unregisterReceiver(mReceiver); 141e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande if (mListeningToOnSwitchChange) { 142e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mSwitchBar.removeOnSwitchChangeListener(this); 143e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande mListeningToOnSwitchChange = false; 144e2c1d504fc02c08078284841424dc9e6ce49c7d7Vinit Deshpande } 145b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh } 146cb52d4b4ab1156aa326fc51c878c2e7ba3f1146cIrfan Sheriff 147b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh private void handleWifiStateChanged(int state) { 1483f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban // Clear any previous state 1493f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban mSwitchBar.setDisabledByAdmin(null); 1503f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban 151b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh switch (state) { 152b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_ENABLING: 15392239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setEnabled(false); 154b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 155b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_ENABLED: 15692239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio setSwitchBarChecked(true); 15792239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setEnabled(true); 1585f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglio updateSearchIndex(true); 159b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 160b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_DISABLING: 16192239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setEnabled(false); 162b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 163b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh case WifiManager.WIFI_STATE_DISABLED: 16492239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio setSwitchBarChecked(false); 16592239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setEnabled(true); 1665f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglio updateSearchIndex(false); 167b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh break; 168b90452f3d26201ea6a231f2150204241e66cd3fbChia-chi Yeh default: 16992239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio setSwitchBarChecked(false); 17092239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setEnabled(true); 1715f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglio updateSearchIndex(false); 172b1c0e0b1c93acbc71a2063411ae4ac86f9fc9fbfIrfan Sheriff } 1733f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban if (mayDisableTethering(!mSwitchBar.isChecked())) { 1743f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban if (RestrictedLockUtils.hasBaseUserRestriction(mContext, 1753f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) { 1763f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban mSwitchBar.setEnabled(false); 1773f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban } else { 1783f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(mContext, 1793f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()); 1803f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban mSwitchBar.setDisabledByAdmin(admin); 1813f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban } 1823f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban } 183b1c0e0b1c93acbc71a2063411ae4ac86f9fc9fbfIrfan Sheriff } 184b1c0e0b1c93acbc71a2063411ae4ac86f9fc9fbfIrfan Sheriff 1855f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglio private void updateSearchIndex(boolean isWiFiOn) { 186784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio mHandler.removeMessages(EVENT_UPDATE_INDEX); 187784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio 188784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio Message msg = new Message(); 189784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio msg.what = EVENT_UPDATE_INDEX; 190784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio msg.getData().putBoolean(EVENT_DATA_IS_WIFI_ON, isWiFiOn); 191784f266cbd0b5934bec8229cf8dbe87180afdda2Fabrice Di Meglio mHandler.sendMessage(msg); 1925f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglio } 1935f3442af6f1d1141f8f4dff033d4176214281b81Fabrice Di Meglio 19492239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio private void setSwitchBarChecked(boolean checked) { 19592239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mStateMachineEvent = true; 19692239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setChecked(checked); 19792239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mStateMachineEvent = false; 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 200e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private void handleStateChanged(@SuppressWarnings("unused") NetworkInfo.DetailedState state) { 201e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // After the refactoring from a CheckBoxPreference to a Switch, this method is useless since 202e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // there is nowhere to display a summary. 203e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // This code is kept in case a future change re-introduces an associated text. 204e78c1879058571c00879f0d3e756951302adf513Gilles Debunne /* 205feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh // WifiInfo is valid if and only if Wi-Fi is enabled. 206e78c1879058571c00879f0d3e756951302adf513Gilles Debunne // Here we use the state of the switch as an optimization. 207e78c1879058571c00879f0d3e756951302adf513Gilles Debunne if (state != null && mSwitch.isChecked()) { 208feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh WifiInfo info = mWifiManager.getConnectionInfo(); 209feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh if (info != null) { 210e78c1879058571c00879f0d3e756951302adf513Gilles Debunne //setSummary(Summary.get(mContext, info.getSSID(), state)); 211feeb75613241556ee2a6504a55a2f3849fb4ce4cChia-chi Yeh } 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 213e78c1879058571c00879f0d3e756951302adf513Gilles Debunne */ 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 21541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio 21641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio @Override 21741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio public void onSwitchChanged(Switch switchView, boolean isChecked) { 21841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio //Do nothing if called as a result of a state machine event 21941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio if (mStateMachineEvent) { 22041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio return; 22141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio } 22241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio // Show toast message if Wi-Fi is not allowed in airplane mode 223fc1b00cfe439b0c462b3acbba709c3cbc1132a1fJason Monk if (isChecked && !WirelessUtils.isRadioAllowed(mContext, Settings.Global.RADIO_WIFI)) { 22441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show(); 22541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio // Reset switch to off. No infinite check/listenenr loop. 22692239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setChecked(false); 22741937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio return; 22841937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio } 22941937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio 23041937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio // Disable tethering if enabling Wifi 2313f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban if (mayDisableTethering(isChecked)) { 23241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio mWifiManager.setWifiApEnabled(null, false); 23341937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio } 234d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen if (isChecked) { 235d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_WIFI_ON); 236d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen } else { 237d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen // Log if user was connected at the time of switching off. 238d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_WIFI_OFF, 239d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen mConnected.get()); 240d9e2c946af8cebeaf9fa81ca5657d3932ee56d1bStephen Chen } 24141937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio if (!mWifiManager.setWifiEnabled(isChecked)) { 24241937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio // Error 24392239ed799c81f3842302dd65f347d726c8c908dFabrice Di Meglio mSwitchBar.setEnabled(true); 24441937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio Toast.makeText(mContext, R.string.wifi_error, Toast.LENGTH_SHORT).show(); 24541937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio } 24641937766981423c9252e12e3319b2e7532739627Fabrice Di Meglio } 2473f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban 2483f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban private boolean mayDisableTethering(boolean isChecked) { 2493f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban final int wifiApState = mWifiManager.getWifiApState(); 2503f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban return isChecked && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) || 2513f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED)); 2523f6208170df1e8635a5d45947a2703c895da6970Zoltan Szatmary-Ban } 253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 254