From 582ab4d414c21f71cf1e4df658b304d1a409c155 Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Tue, 23 Nov 2010 07:43:19 -0800 Subject: [PATCH] Act on supplicant changes only when disconnected When wifi network state is disconnected, supplicant state changes provide more fine grained information to display. When network is connected, the UI should ignore supplicant state changes. Change-Id: I46aa8c2ba80303aae5c74415825102a13cc41380 --- src/com/android/settings/wifi/WifiSettings.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index fefbdfcd2c7..ff4f390638a 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -59,6 +59,7 @@ import android.widget.Toast; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; /** * This currently provides three types of UI. @@ -95,6 +96,8 @@ public class WifiSettings extends SettingsPreferenceFragment private DetailedState mLastState; private WifiInfo mLastInfo; + private AtomicBoolean mConnected = new AtomicBoolean(false); + private int mKeyStoreNetworkId = INVALID_NETWORK_ID; private WifiDialog mDialog; @@ -423,11 +426,20 @@ public class WifiSettings extends SettingsPreferenceFragment WifiManager.SUPPLICANT_CONFIG_CHANGED_ACTION.equals(action)) { updateAccessPoints(); } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { - updateConnectionState(WifiInfo.getDetailedStateOf((SupplicantState) - intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); + //Ignore supplicant state changes when network is connected + //TODO: we should deprecate SUPPLICANT_STATE_CHANGED_ACTION and + //introduce a broadcast that combines the supplicant and network + //network state change events so the apps dont have to worry about + //ignoring supplicant state change when network is connected + //to get more fine grained information. + if (!mConnected.get()) { + updateConnectionState(WifiInfo.getDetailedStateOf((SupplicantState) + intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); + } } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { NetworkInfo info = (NetworkInfo) intent.getParcelableExtra( WifiManager.EXTRA_NETWORK_INFO); + mConnected.set(info.isConnected()); changeNextButtonState(info.isConnected()); updateConnectionState(info.getDetailedState()); } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {