summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2019-05-22 19:39:21 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-05-22 19:39:21 +0000
commit080083b69d931a22bba4d26c85c05cab22e8d71a (patch)
tree6f5b3cbd08baca2ef596795e36c2d7d57db8cc32 /service
parentea1688cfc1965d9a61682173276cb9446ce101bb (diff)
parent641e23cc3366b5b3b41727b932f8222afe11f0c9 (diff)
Merge "WifiNetworkSelector: Clear all configured network status" into qt-dev
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/SavedNetworkEvaluator.java69
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSelector.java64
2 files changed, 63 insertions, 70 deletions
diff --git a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
index f77403b80..062fa5354 100644
--- a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
+++ b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
@@ -20,7 +20,6 @@ import android.annotation.NonNull;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
-import android.os.Process;
import android.telephony.SubscriptionManager;
import android.util.LocalLog;
@@ -105,73 +104,10 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
}
/**
- * Update all the saved networks' selection status
- */
- private void updateSavedNetworkSelectionStatus() {
- List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks(
- Process.WIFI_UID);
- if (savedNetworks.size() == 0) {
- localLog("No saved networks.");
- return;
- }
-
- StringBuffer sbuf = new StringBuffer();
- for (WifiConfiguration network : savedNetworks) {
- /**
- * Ignore Passpoint networks. Passpoint networks are also considered as "saved"
- * network, but without being persisted to the storage. They are managed
- * by {@link PasspointNetworkEvaluator}.
- */
- if (network.isPasspoint()) {
- continue;
- }
-
- // If a configuration is temporarily disabled, re-enable it before trying
- // to connect to it.
- mWifiConfigManager.tryEnableNetwork(network.networkId);
-
- //TODO(b/112196799): Enable "permanently" disabled networks if we are in DISCONNECTED
- // state. See also 30928589
-
- // Clear the cached candidate, score and seen.
- mWifiConfigManager.clearNetworkCandidateScanResult(network.networkId);
-
- // Log disabled network.
- WifiConfiguration.NetworkSelectionStatus status = network.getNetworkSelectionStatus();
- if (!status.isNetworkEnabled()) {
- sbuf.append(" ").append(WifiNetworkSelector.toNetworkString(network)).append(" ");
- for (int index = WifiConfiguration.NetworkSelectionStatus
- .NETWORK_SELECTION_DISABLED_STARTING_INDEX;
- index < WifiConfiguration.NetworkSelectionStatus
- .NETWORK_SELECTION_DISABLED_MAX;
- index++) {
- int count = status.getDisableReasonCounter(index);
- // Here we log the reason as long as its count is greater than zero. The
- // network may not be disabled because of this particular reason. Logging
- // this information anyway to help understand what happened to the network.
- if (count > 0) {
- sbuf.append("reason=")
- .append(WifiConfiguration.NetworkSelectionStatus
- .getNetworkDisableReasonString(index))
- .append(", count=").append(count).append("; ");
- }
- }
- sbuf.append("\n");
- }
- }
-
- if (sbuf.length() > 0) {
- localLog("Disabled saved networks:");
- localLog(sbuf.toString());
- }
- }
-
- /**
* Update the evaluator.
*/
- public void update(List<ScanDetail> scanDetails) {
- updateSavedNetworkSelectionStatus();
- }
+ @Override
+ public void update(List<ScanDetail> scanDetails) { }
private int calculateBssidScore(ScanResult scanResult, WifiConfiguration network,
WifiConfiguration currentNetwork, String currentBssid,
@@ -246,6 +182,7 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
* @return configuration of the chosen network;
* null if no network in this category is available.
*/
+ @Override
public WifiConfiguration evaluateNetworks(List<ScanDetail> scanDetails,
WifiConfiguration currentNetwork, String currentBssid, boolean connected,
boolean untrustedNetworkAllowed,
diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java
index 00d245893..4b7e3f02b 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSelector.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java
@@ -27,7 +27,6 @@ import android.net.wifi.ScanResult;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
-import android.os.Process;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -544,10 +543,9 @@ public class WifiNetworkSelector {
String key = selected.configKey();
// This is only used for setting the connect choice timestamp for debugging purposes.
long currentTime = mClock.getWallClockMillis();
- List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks(
- Process.WIFI_UID);
+ List<WifiConfiguration> configuredNetworks = mWifiConfigManager.getConfiguredNetworks();
- for (WifiConfiguration network : savedNetworks) {
+ for (WifiConfiguration network : configuredNetworks) {
WifiConfiguration.NetworkSelectionStatus status = network.getNetworkSelectionStatus();
if (network.networkId == selected.networkId) {
if (status.getConnectChoice() != null) {
@@ -572,6 +570,61 @@ public class WifiNetworkSelector {
return change;
}
+
+ /**
+ * Iterate thru the list of configured networks (includes all saved network configurations +
+ * any ephemeral network configurations created for passpoint networks, suggestions, carrier
+ * networks, etc) and do the following:
+ * a) Try to re-enable any temporarily enabled networks (if the blacklist duration has expired).
+ * b) Clear the {@link WifiConfiguration.NetworkSelectionStatus#getCandidate()} field for all
+ * of them to identify networks that are present in the current scan result.
+ * c) Log any disabled networks.
+ */
+ private void updateConfiguredNetworks() {
+ List<WifiConfiguration> configuredNetworks = mWifiConfigManager.getConfiguredNetworks();
+ if (configuredNetworks.size() == 0) {
+ localLog("No configured networks.");
+ return;
+ }
+
+ StringBuffer sbuf = new StringBuffer();
+ for (WifiConfiguration network : configuredNetworks) {
+ // If a configuration is temporarily disabled, re-enable it before trying
+ // to connect to it.
+ mWifiConfigManager.tryEnableNetwork(network.networkId);
+ // Clear the cached candidate, score and seen.
+ mWifiConfigManager.clearNetworkCandidateScanResult(network.networkId);
+
+ // Log disabled network.
+ WifiConfiguration.NetworkSelectionStatus status = network.getNetworkSelectionStatus();
+ if (!status.isNetworkEnabled()) {
+ sbuf.append(" ").append(toNetworkString(network)).append(" ");
+ for (int index = WifiConfiguration.NetworkSelectionStatus
+ .NETWORK_SELECTION_DISABLED_STARTING_INDEX;
+ index < WifiConfiguration.NetworkSelectionStatus
+ .NETWORK_SELECTION_DISABLED_MAX;
+ index++) {
+ int count = status.getDisableReasonCounter(index);
+ // Here we log the reason as long as its count is greater than zero. The
+ // network may not be disabled because of this particular reason. Logging
+ // this information anyway to help understand what happened to the network.
+ if (count > 0) {
+ sbuf.append("reason=")
+ .append(WifiConfiguration.NetworkSelectionStatus
+ .getNetworkDisableReasonString(index))
+ .append(", count=").append(count).append("; ");
+ }
+ }
+ sbuf.append("\n");
+ }
+ }
+
+ if (sbuf.length() > 0) {
+ localLog("Disabled configured networks:");
+ localLog(sbuf.toString());
+ }
+ }
+
/**
* Overrides the {@code candidate} chosen by the {@link #mEvaluators} with the user chosen
* {@link WifiConfiguration} if one exists.
@@ -645,6 +698,9 @@ public class WifiNetworkSelector {
return null;
}
+ // Update all configured networks before initiating network selection.
+ updateConfiguredNetworks();
+
// Update the registered network evaluators.
for (NetworkEvaluator registeredEvaluator : mEvaluators) {
registeredEvaluator.update(scanDetails);