diff options
author | vandwalle <vandwalle@google.com> | 2014-11-07 17:29:10 -0800 |
---|---|---|
committer | vandwalle <vandwalle@google.com> | 2014-11-10 13:57:08 -0800 |
commit | d30127db46224e45554f8964209221bba8ad41d9 (patch) | |
tree | 5a35c792e52d809c3aae7aac94d1ab5f78b0f095 /service/java/com | |
parent | 6b7f403e4cef10029159c75bc311142a56099aef (diff) | |
download | android_frameworks_opt_net_wifi-d30127db46224e45554f8964209221bba8ad41d9.tar.gz android_frameworks_opt_net_wifi-d30127db46224e45554f8964209221bba8ad41d9.tar.bz2 android_frameworks_opt_net_wifi-d30127db46224e45554f8964209221bba8ad41d9.zip |
dont blacklist wifi config that have had validated internet status in the past
Change-Id: I4498888ffb1d3189204a553462ff4342239ed2af
Diffstat (limited to 'service/java/com')
3 files changed, 50 insertions, 17 deletions
diff --git a/service/java/com/android/server/wifi/WifiAutoJoinController.java b/service/java/com/android/server/wifi/WifiAutoJoinController.java index f6741b446..2242da6c1 100644 --- a/service/java/com/android/server/wifi/WifiAutoJoinController.java +++ b/service/java/com/android/server/wifi/WifiAutoJoinController.java @@ -1387,12 +1387,16 @@ public class WifiAutoJoinController { } } } - if (config.noInternetAccess && !isLastSelected) { - // Avoid autojoining this network because last time we used it, it didn't - // have internet access + if (config.numNoInternetAccessReports > 0 + && !isLastSelected + && !config.validatedInternetAccess) { + // Avoid autoJoining this network because last time we used it, it didn't + // have internet access, and we never manage to validate internet access on this + // network configuration if (DBG) { - logDbg("attemptAutoJoin skip candidate due to noInternetAccess flag " - + config.configKey(true)); + logDbg("attemptAutoJoin skip candidate due to no InternetAccess " + + config.configKey(true) + + " num reports " + config.numNoInternetAccessReports); } continue; } diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java index 536aae700..f074f3ed7 100644 --- a/service/java/com/android/server/wifi/WifiConfigStore.java +++ b/service/java/com/android/server/wifi/WifiConfigStore.java @@ -196,7 +196,8 @@ public class WifiConfigStore extends IpConfigStore { private static final String NUM_AUTH_FAILURES_KEY = "AUTH_FAILURES: "; private static final String SCORER_OVERRIDE_KEY = "SCORER_OVERRIDE: "; private static final String SCORER_OVERRIDE_AND_SWITCH_KEY = "SCORER_OVERRIDE_AND_SWITCH: "; - private static final String NO_INTERNET_ACCESS_KEY = "NO_INTERNET_ACCESS: "; + private static final String VALIDATED_INTERNET_ACCESS_KEY = "VALIDATED_INTERNET_ACCESS: "; + private static final String NO_INTERNET_ACCESS_REPORTS_KEY = "NO_INTERNET_ACCESS_REPORTS : "; private static final String EPHEMERAL_KEY = "EPHEMERAL: "; private static final String NUM_ASSOCIATION_KEY = "NUM_ASSOCIATION: "; private static final String JOIN_ATTEMPT_BOOST_KEY = "JOIN_ATTEMPT_BOOST: "; @@ -1627,8 +1628,11 @@ public class WifiConfigStore extends IpConfigStore { + SEPARATOR_KEY); out.writeUTF(DID_SELF_ADD_KEY + Boolean.toString(config.didSelfAdd) + SEPARATOR_KEY); - out.writeUTF(NO_INTERNET_ACCESS_KEY - + Boolean.toString(config.noInternetAccess) + out.writeUTF(NO_INTERNET_ACCESS_REPORTS_KEY + + Integer.toString(config.numNoInternetAccessReports) + + SEPARATOR_KEY); + out.writeUTF(VALIDATED_INTERNET_ACCESS_KEY + + Boolean.toString(config.validatedInternetAccess) + SEPARATOR_KEY); out.writeUTF(EPHEMERAL_KEY + Boolean.toString(config.ephemeral) @@ -1740,6 +1744,7 @@ public class WifiConfigStore extends IpConfigStore { selected.numConnectionFailures = 0; selected.numIpConfigFailures = 0; selected.numAuthFailures = 0; + selected.numNoInternetAccessReports = 0; if (VDBG) { loge("setLastSelectedConfiguration now: " + lastSelectedConfiguration); } @@ -1857,10 +1862,16 @@ public class WifiConfigStore extends IpConfigStore { config.didSelfAdd = Boolean.parseBoolean(didSelfAdd); } - if (key.startsWith(NO_INTERNET_ACCESS_KEY)) { - String access = key.replace(NO_INTERNET_ACCESS_KEY, ""); + if (key.startsWith(NO_INTERNET_ACCESS_REPORTS_KEY)) { + String access = key.replace(NO_INTERNET_ACCESS_REPORTS_KEY, ""); + access = access.replace(SEPARATOR_KEY, ""); + config.numNoInternetAccessReports = Integer.parseInt(access); + } + + if (key.startsWith(VALIDATED_INTERNET_ACCESS_KEY)) { + String access = key.replace(VALIDATED_INTERNET_ACCESS_KEY, ""); access = access.replace(SEPARATOR_KEY, ""); - config.noInternetAccess = Boolean.parseBoolean(access); + config.validatedInternetAccess = Boolean.parseBoolean(access); } if (key.startsWith(EPHEMERAL_KEY)) { diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index 9f74f8e9d..f02248413 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -616,6 +616,8 @@ public class WifiStateMachine extends StateMachine { static final int CMD_ASSOCIATED_BSSID = BASE + 147; + static final int CMD_NETWORK_STATUS = BASE + 148; + /* Wifi state machine modes of operation */ /* CONNECT_MODE - connect to any 'known' AP when it becomes available */ public static final int CONNECT_MODE = 1; @@ -5726,6 +5728,9 @@ public class WifiStateMachine extends StateMachine { case CMD_UNWANTED_NETWORK: s = "CMD_UNWANTED_NETWORK"; break; + case CMD_NETWORK_STATUS: + s = "CMD_NETWORK_STATUS"; + break; case CMD_GET_LINK_LAYER_STATS: s = "CMD_GET_LINK_LAYER_STATS"; break; @@ -5945,7 +5950,6 @@ public class WifiStateMachine extends StateMachine { config.numIpConfigFailures = 0; config.numAuthFailures = 0; config.numAssociation++; - config.noInternetAccess = false; } mBadLinkspeedcount = 0; } @@ -6412,9 +6416,6 @@ public class WifiStateMachine extends StateMachine { // Make sure the network is enabled, since supplicant will not reenable it mWifiConfigStore.enableNetworkWithoutBroadcast(netId, false); - // Loose the no Internet Access state, as user is re-trying to connect - config.noInternetAccess = false; - if (mWifiConfigStore.selectNetwork(netId) && mWifiNative.reconnect()) { lastConnectAttempt = System.currentTimeMillis(); @@ -6612,9 +6613,13 @@ public class WifiStateMachine extends StateMachine { protected void networkStatus(int status) { if (status == NetworkAgent.INVALID_NETWORK) { - if (DBG) log("WifiNetworkAgent -> Wifi networkStatus invalid score " + if (DBG) log("WifiNetworkAgent -> Wifi networkStatus invalid, score=" + Integer.toString(mWifiInfo.score)); unwantedNetwork(network_status_unwanted_disable_autojoin); + } else if (status == NetworkAgent.VALID_NETWORK) { + if (DBG && mWifiInfo != null) log("WifiNetworkAgent -> Wifi networkStatus valid, score= " + + Integer.toString(mWifiInfo.score)); + doNetworkStatus(status); } } } @@ -6623,6 +6628,9 @@ public class WifiStateMachine extends StateMachine { sendMessage(CMD_UNWANTED_NETWORK, reason); } + void doNetworkStatus(int status) { + sendMessage(CMD_NETWORK_STATUS, status); + } boolean startScanForConfiguration(WifiConfiguration config, boolean restrictChannelList) { if (config == null) @@ -7381,7 +7389,17 @@ public class WifiStateMachine extends StateMachine { config = getCurrentWifiConfiguration(); if (config != null) { // Disable autojoin - config.noInternetAccess = true; + config.numNoInternetAccessReports += 1; + } + } + return HANDLED; + case CMD_NETWORK_STATUS: + if (message.arg1 == NetworkAgent.VALID_NETWORK) { + config = getCurrentWifiConfiguration(); + if (config != null) { + // re-enable autojoin + config.numNoInternetAccessReports = 0; + config.validatedInternetAccess = true; } } return HANDLED; |