From cb52d4b4ab1156aa326fc51c878c2e7ba3f1146c Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Thu, 16 Dec 2010 14:58:02 -0800 Subject: [PATCH] fix wifi checkbox status update Bug: 3277268 Change-Id: Idfabf1be41c5e54cd93695de1bb06164760d7fad --- .../android/settings/wifi/WifiEnabler.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java index ef9f3460a6c..7f1221e0d81 100644 --- a/src/com/android/settings/wifi/WifiEnabler.java +++ b/src/com/android/settings/wifi/WifiEnabler.java @@ -33,11 +33,15 @@ import android.provider.Settings; import android.text.TextUtils; import android.widget.Toast; +import java.util.concurrent.atomic.AtomicBoolean; + public class WifiEnabler implements Preference.OnPreferenceChangeListener { - private final Context mContext; + private final Context mContext; private final CheckBoxPreference mCheckBox; private final CharSequence mOriginalSummary; + private AtomicBoolean mConnected = new AtomicBoolean(false); + private final WifiManager mWifiManager; private final IntentFilter mIntentFilter; private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @@ -48,11 +52,15 @@ public class WifiEnabler implements Preference.OnPreferenceChangeListener { handleWifiStateChanged(intent.getIntExtra( WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)); } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { - handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState) - intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); + if (!mConnected.get()) { + handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState) + intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); + } } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { - handleStateChanged(((NetworkInfo) intent.getParcelableExtra( - WifiManager.EXTRA_NETWORK_INFO)).getDetailedState()); + NetworkInfo info = (NetworkInfo) intent.getParcelableExtra( + WifiManager.EXTRA_NETWORK_INFO); + mConnected.set(info.isConnected()); + handleStateChanged(info.getDetailedState()); } } }; @@ -75,15 +83,15 @@ public class WifiEnabler implements Preference.OnPreferenceChangeListener { mContext.registerReceiver(mReceiver, mIntentFilter); mCheckBox.setOnPreferenceChangeListener(this); } - + public void pause() { mContext.unregisterReceiver(mReceiver); mCheckBox.setOnPreferenceChangeListener(null); } - + public boolean onPreferenceChange(Preference preference, Object value) { boolean enable = (Boolean) value; - + // Show toast message if Wi-Fi is not allowed in airplane mode if (enable && !WirelessSettings .isRadioAllowed(mContext, Settings.System.RADIO_WIFI)) { @@ -109,7 +117,7 @@ public class WifiEnabler implements Preference.OnPreferenceChangeListener { // Don't update UI to opposite state until we're sure return false; } - + private void handleWifiStateChanged(int state) { switch (state) { case WifiManager.WIFI_STATE_ENABLING: