diff options
author | Roshan Pius <rpius@google.com> | 2018-11-01 12:54:23 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-11-16 12:10:31 -0800 |
commit | b378580253db6c2671a735da2c27abd5228e63cf (patch) | |
tree | 0235a909681733ca2e893dfa7990210672837db5 /service/java/com/android | |
parent | ea2711baef165448c172c45d4cf68fb9b95a081c (diff) | |
download | android_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/android')
-rw-r--r-- | service/java/com/android/server/wifi/WifiConnectivityManager.java | 34 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkFactory.java | 8 |
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); } } |