summaryrefslogtreecommitdiffstats
path: root/service/java/com
diff options
context:
space:
mode:
authorvandwalle <vandwalle@google.com>2014-11-07 17:29:10 -0800
committervandwalle <vandwalle@google.com>2014-11-10 13:57:08 -0800
commitd30127db46224e45554f8964209221bba8ad41d9 (patch)
tree5a35c792e52d809c3aae7aac94d1ab5f78b0f095 /service/java/com
parent6b7f403e4cef10029159c75bc311142a56099aef (diff)
downloadandroid_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')
-rw-r--r--service/java/com/android/server/wifi/WifiAutoJoinController.java14
-rw-r--r--service/java/com/android/server/wifi/WifiConfigStore.java23
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java30
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;