summaryrefslogtreecommitdiffstats
path: root/service/java/com
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2018-11-01 12:54:23 -0700
committerRoshan Pius <rpius@google.com>2018-11-16 12:10:31 -0800
commitb378580253db6c2671a735da2c27abd5228e63cf (patch)
tree0235a909681733ca2e893dfa7990210672837db5 /service/java/com
parentea2711baef165448c172c45d4cf68fb9b95a081c (diff)
downloadandroid_frameworks_opt_net_wifi-b378580253db6c2671a735da2c27abd5228e63cf.tar.gz
android_frameworks_opt_net_wifi-b378580253db6c2671a735da2c27abd5228e63cf.tar.bz2
android_frameworks_opt_net_wifi-b378580253db6c2671a735da2c27abd5228e63cf.zip
WifiConnectivityManager: Refactor auto-join enable/disable
There are 3 factors which decide whether auto-join is enabled or not: a) No specific network request in progress, AND b.1) At-least one pending generic trusted network request. OR b.2) At-least one pending generic untrusted network request. Bug: 113878056 Test: ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh Change-Id: I13e0594ff1e28be42a8c992544bdac94bace9051
Diffstat (limited to 'service/java/com')
-rw-r--r--service/java/com/android/server/wifi/WifiConnectivityManager.java34
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java8
2 files changed, 28 insertions, 14 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java
index c226de58a..efc4fb067 100644
--- a/service/java/com/android/server/wifi/WifiConnectivityManager.java
+++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java
@@ -153,6 +153,7 @@ public class WifiConnectivityManager {
private int mWifiState = WIFI_STATE_UNKNOWN;
private boolean mUntrustedConnectionAllowed = false;
private boolean mTrustedConnectionAllowed = false;
+ private boolean mSpecificNetworkRequestInProgress = false;
private int mScanRestartCount = 0;
private int mSingleScanRestartCount = 0;
private int mTotalConnectivityAttemptsRateLimited = 0;
@@ -1139,32 +1140,48 @@ public class WifiConnectivityManager {
}
}
+ // Enable auto-join if we have any pending network request (trusted or untrusted) and no
+ // specific network request in progress.
+ private void checkStateAndEnable() {
+ enable(!mSpecificNetworkRequestInProgress
+ && (mUntrustedConnectionAllowed || mTrustedConnectionAllowed));
+ startConnectivityScan(SCAN_IMMEDIATELY);
+ }
+
/**
- * Handler when connectivity allows/disallows trusted connections (all of autojoin).
+ * Triggered when {@link WifiNetworkFactory} has a pending general network request.
*/
public void setTrustedConnectionAllowed(boolean allowed) {
localLog("setTrustedConnectionAllowed: allowed=" + allowed);
if (mTrustedConnectionAllowed != allowed) {
mTrustedConnectionAllowed = allowed;
- // Enable auto-join if we have any pending network request (trusted or untrusted).
- enable(mUntrustedConnectionAllowed || mTrustedConnectionAllowed);
- startConnectivityScan(SCAN_IMMEDIATELY);
+ checkStateAndEnable();
}
}
/**
- * Handler when connectivity allows/disallows untrusted connections (ephemeral networks).
+ * Triggered when {@link UntrustedWifiNetworkFactory} has a pending ephemeral network request.
*/
public void setUntrustedConnectionAllowed(boolean allowed) {
localLog("setUntrustedConnectionAllowed: allowed=" + allowed);
if (mUntrustedConnectionAllowed != allowed) {
mUntrustedConnectionAllowed = allowed;
- // Enable auto-join if we have any pending network request (trusted or untrusted).
- enable(mUntrustedConnectionAllowed || mTrustedConnectionAllowed);
- startConnectivityScan(SCAN_IMMEDIATELY);
+ checkStateAndEnable();
+ }
+ }
+
+ /**
+ * Triggered when {@link WifiNetworkFactory} is processing a specific network request.
+ */
+ public void setSpecificNetworkRequestInProgress(boolean inProgress) {
+ localLog("setsetSpecificNetworkRequestInProgress : inProgress=" + inProgress);
+
+ if (mSpecificNetworkRequestInProgress != inProgress) {
+ mSpecificNetworkRequestInProgress = inProgress;
+ checkStateAndEnable();
}
}
@@ -1383,7 +1400,6 @@ public class WifiConnectivityManager {
retrieveWifiScanner();
mConnectivityHelper.getFirmwareRoamingInfo();
clearBssidBlacklist();
- startConnectivityScan(SCAN_IMMEDIATELY);
mRunning = true;
}
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 9da64d231..aa9fbdfff 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -326,7 +326,7 @@ public class WifiNetworkFactory extends NetworkFactory {
startPeriodicScans();
// Disable Auto-join so that NetworkFactory can take control of the network selection.
// TODO(b/117979585): Defer turning off auto-join.
- mWifiConnectivityManager.enable(false);
+ mWifiConnectivityManager.setSpecificNetworkRequestInProgress(true);
}
}
@@ -357,10 +357,8 @@ public class WifiNetworkFactory extends NetworkFactory {
mActiveSpecificNetworkRequestSpecifier = null;
// Cancel the periodic scans.
cancelPeriodicScans();
- // Re-enable Auto-join (if there is a generic request pending).
- if (mGenericConnectionReqCount > 0) {
- mWifiConnectivityManager.enable(true);
- }
+ // Re-enable Auto-join.
+ mWifiConnectivityManager.setSpecificNetworkRequestInProgress(false);
}
}