summaryrefslogtreecommitdiffstats
path: root/service
diff options
context:
space:
mode:
authorvandwalle <vandwalle@google.com>2014-12-04 23:26:03 -0800
committerPavel Zhamaitsiak <pavelz@google.com>2014-12-05 17:12:34 -0800
commitabd1740f753ac14e9dec8fced8d3de5059122c2a (patch)
tree40bc22278fa17fb7b66e9a1fc7b63cad3361cb63 /service
parente3939cb40d9ba3842be105a6e85172dc06e14758 (diff)
downloadandroid_frameworks_opt_net_wifi-abd1740f753ac14e9dec8fced8d3de5059122c2a.tar.gz
android_frameworks_opt_net_wifi-abd1740f753ac14e9dec8fced8d3de5059122c2a.tar.bz2
android_frameworks_opt_net_wifi-abd1740f753ac14e9dec8fced8d3de5059122c2a.zip
reenable disabled config after a few minutes
This change also loose stale user selection which prevents device to re-join potentially reenabled configs Bug:18571727 Change-Id: I0acacd3fb1fbb64a48d0407d7b9e4e5403a93726
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiAutoJoinController.java34
-rw-r--r--service/java/com/android/server/wifi/WifiConfigStore.java3
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java10
3 files changed, 45 insertions, 2 deletions
diff --git a/service/java/com/android/server/wifi/WifiAutoJoinController.java b/service/java/com/android/server/wifi/WifiAutoJoinController.java
index a971dcd56..b8f68a1c8 100644
--- a/service/java/com/android/server/wifi/WifiAutoJoinController.java
+++ b/service/java/com/android/server/wifi/WifiAutoJoinController.java
@@ -1261,6 +1261,40 @@ public class WifiAutoJoinController {
if (config.autoJoinStatus >=
WifiConfiguration.AUTO_JOIN_DISABLED_ON_AUTH_FAILURE) {
+ // Wait for 5 minutes before reenabling config that have known,
+ // repeated connection or DHCP failures
+ if (config.disableReason == WifiConfiguration.DISABLED_DHCP_FAILURE
+ || config.disableReason
+ == WifiConfiguration.DISABLED_ASSOCIATION_REJECT
+ || config.disableReason
+ == WifiConfiguration.DISABLED_AUTH_FAILURE) {
+ if (config.blackListTimestamp == 0
+ || (config.blackListTimestamp > now)) {
+ // Sanitize the timestamp
+ config.blackListTimestamp = now;
+ }
+ if ((now - config.blackListTimestamp) >
+ mWifiConfigStore.wifiConfigBlacklistMinTimeMilli) {
+ // Re-enable the WifiConfiguration
+ config.status = WifiConfiguration.Status.ENABLED;
+
+ // Reset the blacklist condition
+ config.numConnectionFailures = 0;
+ config.numIpConfigFailures = 0;
+ config.numAuthFailures = 0;
+ config.setAutoJoinStatus(WifiConfiguration.AUTO_JOIN_ENABLED);
+
+ config.dirty = true;
+ } else {
+ if (VDBG) {
+ long delay = mWifiConfigStore.wifiConfigBlacklistMinTimeMilli
+ - (now - config.blackListTimestamp);
+ logDbg("attemptautoJoin " + config.configKey()
+ + " dont unblacklist yet, waiting for "
+ + delay + " ms");
+ }
+ }
+ }
// Avoid networks disabled because of AUTH failure altogether
if (DBG) {
logDbg("attemptAutoJoin skip candidate due to auto join status "
diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java
index c7b8ab301..ffa4a9f50 100644
--- a/service/java/com/android/server/wifi/WifiConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiConfigStore.java
@@ -346,6 +346,9 @@ public class WifiConfigStore extends IpConfigStore {
public int maxConnectionErrorsToBlacklist = 4;
public int wifiConfigBlacklistMinTimeMilli = 1000 * 60 * 5;
+ // How long a disconnected config remain considered as the last user selection
+ public int wifiConfigLastSelectionHysteresis = 1000 * 60 * 3;
+
// Boost RSSI values of associated networks
public int associatedHysteresisHigh = +14;
public int associatedHysteresisLow = +8;
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 09920f5d1..7b554dc67 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -3389,8 +3389,8 @@ public class WifiStateMachine extends StateMachine {
if (attemptAutoJoin) {
messageHandlingStatus = MESSAGE_HANDLING_STATUS_PROCESSED;
}
- // Loose last selected configuration if we have been disconnected for 30 minutes
- if (getDisconnectedTimeMilli() > 1000 * 60 * 30) {
+ // Loose last selected configuration if we have been disconnected for 5 minutes
+ if (getDisconnectedTimeMilli() > mWifiConfigStore.wifiConfigLastSelectionHysteresis) {
mWifiConfigStore.setLastSelectedConfiguration(WifiConfiguration.INVALID_NETWORK_ID);
}
@@ -5057,6 +5057,8 @@ public class WifiStateMachine extends StateMachine {
break;
case CMD_SET_OPERATIONAL_MODE:
mOperationalMode = message.arg1;
+ mWifiConfigStore.
+ setLastSelectedConfiguration(WifiConfiguration.INVALID_NETWORK_ID);
break;
case CMD_TARGET_BSSID:
// Trying to associate to this BSSID
@@ -5643,6 +5645,10 @@ public class WifiStateMachine extends StateMachine {
startScan(ENABLE_WIFI, 0, null, null);
}
+ // Loose last selection choice since user toggled WiFi
+ mWifiConfigStore.
+ setLastSelectedConfiguration(WifiConfiguration.INVALID_NETWORK_ID);
+
mOperationalMode = CONNECT_MODE;
transitionTo(mDisconnectedState);
} else {