diff options
3 files changed, 65 insertions, 1 deletions
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/unit/WifiClientTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/unit/WifiClientTest.java index e22b0189f1dc..e44023bff472 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/unit/WifiClientTest.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/unit/WifiClientTest.java @@ -271,4 +271,46 @@ public class WifiClientTest extends AndroidTestCase { } + // Test case 6: test configured network status + @LargeTest + public void testWifiConfiguredNetworkStatus() { + + /* Initialize */ + mWifiManager.setWifiEnabled(false); + sleepAfterWifiEnable(); + + /* Ensure no network is CURRENT */ + List<WifiConfiguration> configList = mWifiManager.getConfiguredNetworks(); + for (WifiConfiguration c : configList) { + assertTrue(c.status != WifiConfiguration.Status.CURRENT); + } + + /* Enable wifi */ + mWifiManager.setWifiEnabled(true); + sleepAfterWifiEnable(); + + /* Ensure connected network is CURRENT */ + String connectedSSID = mWifiManager.getConnectionInfo().getSSID(); + configList = mWifiManager.getConfiguredNetworks(); + for (WifiConfiguration c : configList) { + if (c.SSID.contains(connectedSSID)) { + assertTrue(c.status == WifiConfiguration.Status.CURRENT); + } else { + assertTrue(c.status != WifiConfiguration.Status.CURRENT); + } + } + + /* Disable wifi */ + mWifiManager.setWifiEnabled(false); + sleepAfterWifiEnable(); + + /* Ensure no network is CURRENT */ + configList = mWifiManager.getConfiguredNetworks(); + for (WifiConfiguration c : configList) { + assertTrue(c.status != WifiConfiguration.Status.CURRENT); + } + } + + + } diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java index af48c7c870e2..d34541195d40 100644 --- a/wifi/java/android/net/wifi/WifiConfigStore.java +++ b/wifi/java/android/net/wifi/WifiConfigStore.java @@ -22,6 +22,7 @@ import android.net.DhcpInfoInternal; import android.net.LinkAddress; import android.net.LinkProperties; import android.net.NetworkUtils; +import android.net.NetworkInfo.DetailedState; import android.net.ProxyProperties; import android.net.RouteInfo; import android.net.wifi.WifiConfiguration.IpAssignment; @@ -276,6 +277,24 @@ class WifiConfigStore { return result; } + static void updateStatus(int netId, DetailedState state) { + if (netId != INVALID_NETWORK_ID) { + WifiConfiguration config = sConfiguredNetworks.get(netId); + if (config == null) return; + switch (state) { + case CONNECTED: + config.status = Status.CURRENT; + break; + case DISCONNECTED: + config.status = Status.ENABLED; + break; + default: + //do nothing, retain the existing state + break; + } + } + } + /** * Forget the specified network and save config * diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index 21dad82a3808..71d7c01e52de 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -1642,8 +1642,10 @@ public class WifiStateMachine extends StateMachine { mWifiInfo.setRssi(MIN_RSSI); mWifiInfo.setLinkSpeed(-1); - /* send event to CM & network change broadcast */ setNetworkDetailedState(DetailedState.DISCONNECTED); + WifiConfigStore.updateStatus(mLastNetworkId, DetailedState.DISCONNECTED); + + /* send event to CM & network change broadcast */ sendNetworkStateChangeBroadcast(mLastBssid); /* Clear network properties */ @@ -1726,6 +1728,7 @@ public class WifiStateMachine extends StateMachine { } else { configureLinkProperties(); setNetworkDetailedState(DetailedState.CONNECTED); + WifiConfigStore.updateStatus(mLastNetworkId, DetailedState.CONNECTED); sendNetworkStateChangeBroadcast(mLastBssid); } } |