diff options
author | Randy Pan <zpan@google.com> | 2016-10-03 13:41:25 -0700 |
---|---|---|
committer | Randy Pan <zpan@google.com> | 2016-10-06 11:28:44 -0700 |
commit | 2dfadf313b3e5194d56d2fa24b9270086cda165a (patch) | |
tree | c5eef0e5a1bbfe4c66600e9c391dd4159a4dd904 /service | |
parent | 2e4c946e15dff5a207816ea21c0c3e8d5de01f08 (diff) |
Move WifiNetworkSelector to WifiInjector
While there, move WifiInfo to be an input parameter of
WifiNetworkSelector#selectNetwork and make WifiInfo the
sole source for obtaining information of the currently
connected network.
Bug: 31383992
Test: Wifi framework unit tests
Change-Id: I107ba600165b008079cebf230865f8b2082740a8
Diffstat (limited to 'service')
4 files changed, 30 insertions, 30 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index 3c2971210..e763472b6 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -227,7 +227,7 @@ public class WifiConnectivityManager { localLog(listenerName + " onResults: start network selection"); WifiConfiguration candidate = - mNetworkSelector.selectNetwork(scanDetails, + mNetworkSelector.selectNetwork(scanDetails, mWifiInfo, mStateMachine.isConnected(), mStateMachine.isDisconnected(), mUntrustedConnectionAllowed); mWifiLastResortWatchdog.updateAvailableNetworks( diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 53e089d56..711c03b54 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -83,6 +83,7 @@ public class WifiInjector { private final IpConfigStore mIpConfigStore; private final WifiConfigStoreLegacy mWifiConfigStoreLegacy; private final WifiConfigManager mWifiConfigManager; + private final WifiNetworkSelector mWifiNetworkSelector; private WifiScanner mWifiScanner; private final boolean mUseRealLogger; @@ -139,6 +140,7 @@ public class WifiInjector { mWifiConfigManager = new WifiConfigManager(mContext, mFrameworkFacade, mClock, UserManager.get(mContext), TelephonyManager.from(mContext), mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy); + mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiConfigManager, mClock); mWifiStateMachine = new WifiStateMachine(mContext, mFrameworkFacade, mWifiStateMachineHandlerThread.getLooper(), UserManager.get(mContext), @@ -322,4 +324,11 @@ public class WifiInjector { } return mWifiScanner; } + + /** + * Obtain an instance of WifiNetworkSelector. + */ + public WifiNetworkSelector getWifiNetworkSelector() { + return mWifiNetworkSelector; + } } diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java index fec10eec7..9f19b32d7 100644 --- a/service/java/com/android/server/wifi/WifiNetworkSelector.java +++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java @@ -56,10 +56,7 @@ public class WifiNetworkSelector { public static final int BSSID_BLACKLIST_EXPIRE_TIME_MS = 5 * 60 * 1000; private WifiConfigManager mWifiConfigManager; - private WifiInfo mWifiInfo; private Clock mClock; - private WifiConfiguration mCurrentNetwork = null; - private String mCurrentBssid = null; private static class BssidBlacklistStatus { // Number of times this BSSID has been rejected for association. public int counter; @@ -152,7 +149,10 @@ public class WifiNetworkSelector { mLocalLog.log(log); } - private boolean isCurrentNetworkSufficient(WifiConfiguration network) { + private boolean isCurrentNetworkSufficient(WifiInfo wifiInfo) { + WifiConfiguration network = + mWifiConfigManager.getConfiguredNetwork(wifiInfo.getNetworkId()); + // Currently connected? if (network == null) { localLog("No current connected network."); @@ -175,16 +175,16 @@ public class WifiNetworkSelector { } // 2.4GHz networks is not qualified. - if (mWifiInfo.is24GHz()) { + if (wifiInfo.is24GHz()) { localLog("Current network is 2.4GHz."); return false; } // Is the current network's singnal strength qualified? It can only // be a 5GHz network if we reach here. - int currentRssi = mWifiInfo.getRssi(); - if (mWifiInfo.is5GHz() && currentRssi < mThresholdQualifiedRssi5) { - localLog("Current network band=" + (mWifiInfo.is5GHz() ? "5GHz" : "2.4GHz") + int currentRssi = wifiInfo.getRssi(); + if (wifiInfo.is5GHz() && currentRssi < mThresholdQualifiedRssi5) { + localLog("Current network band=" + (wifiInfo.is5GHz() ? "5GHz" : "2.4GHz") + ", RSSI[" + currentRssi + "]-acceptable but not qualified."); return false; } @@ -192,7 +192,7 @@ public class WifiNetworkSelector { return true; } - private boolean isNetworkSelectionNeeded(List<ScanDetail> scanDetails, + private boolean isNetworkSelectionNeeded(List<ScanDetail> scanDetails, WifiInfo wifiInfo, boolean connected, boolean disconnected) { if (scanDetails.size() == 0) { localLog("Empty connectivity scan results. Skip network selection."); @@ -218,15 +218,15 @@ public class WifiNetworkSelector { } } - if (isCurrentNetworkSufficient(mCurrentNetwork)) { + if (isCurrentNetworkSufficient(wifiInfo)) { localLog("Current connected network already sufficient. Skip network selection."); return false; } else { localLog("Current connected network is not sufficient."); + return true; } } else if (disconnected) { - mCurrentNetwork = null; - mCurrentBssid = null; + return true; } else { // No network selection if WifiStateMachine is in a state other than // CONNECTED or DISCONNECTED. @@ -234,8 +234,6 @@ public class WifiNetworkSelector { + " Skip network selection."); return false; } - - return true; } /** @@ -446,7 +444,7 @@ public class WifiNetworkSelector { * */ @Nullable - public WifiConfiguration selectNetwork(List<ScanDetail> scanDetails, + public WifiConfiguration selectNetwork(List<ScanDetail> scanDetails, WifiInfo wifiInfo, boolean connected, boolean disconnected, boolean untrustedNetworkAllowed) { mConnectableNetworks.clear(); if (scanDetails.size() == 0) { @@ -454,17 +452,15 @@ public class WifiNetworkSelector { return null; } - if (mCurrentNetwork == null) { - mCurrentNetwork = - mWifiConfigManager.getConfiguredNetwork(mWifiInfo.getNetworkId()); - } + WifiConfiguration currentNetwork = + mWifiConfigManager.getConfiguredNetwork(wifiInfo.getNetworkId()); // Always get the current BSSID from WifiInfo in case that firmware initiated // roaming happened. - mCurrentBssid = mWifiInfo.getBSSID(); + String currentBssid = wifiInfo.getBSSID(); // Shall we start network selection at all? - if (!isNetworkSelectionNeeded(scanDetails, connected, disconnected)) { + if (!isNetworkSelectionNeeded(scanDetails, wifiInfo, connected, disconnected)) { return null; } @@ -490,7 +486,7 @@ public class WifiNetworkSelector { for (NetworkEvaluator registeredEvaluator : mEvaluators) { if (registeredEvaluator != null) { selectedNetwork = registeredEvaluator.evaluateNetworks(scanDetails, - mCurrentNetwork, mCurrentBssid, connected, + currentNetwork, currentBssid, connected, untrustedNetworkAllowed, mConnectableNetworks); if (selectedNetwork != null) { break; @@ -499,8 +495,6 @@ public class WifiNetworkSelector { } if (selectedNetwork != null) { - mCurrentNetwork = selectedNetwork; - mCurrentBssid = selectedNetwork.getNetworkSelectionStatus().getCandidate().BSSID; mLastNetworkSelectionTimeStamp = mClock.getElapsedSinceBootMillis(); } @@ -552,10 +546,8 @@ public class WifiNetworkSelector { return false; } - WifiNetworkSelector(Context context, WifiConfigManager configManager, - WifiInfo wifiInfo, Clock clock) { + WifiNetworkSelector(Context context, WifiConfigManager configManager, Clock clock) { mWifiConfigManager = configManager; - mWifiInfo = wifiInfo; mClock = clock; mThresholdQualifiedRssi24 = context.getResources().getInteger( diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index 807f20133..7ddd6a238 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -877,8 +877,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss mWifiDiagnostics = mWifiInjector.makeWifiDiagnostics(mWifiNative); mWifiInfo = new WifiInfo(); - mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiConfigManager, - mWifiInfo, mWifiInjector.getClock()); + mWifiNetworkSelector = mWifiInjector.getWifiNetworkSelector(); mSupplicantStateTracker = mFacade.makeSupplicantStateTracker(context, mWifiConfigManager, getHandler()); |