summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2019-03-27 01:17:47 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-03-27 01:17:47 +0000
commitf689f7e44c637b93d98c874004504701343600e5 (patch)
tree9e64e141f4954866f7a45f82ea7afa2e2bbc5ab4
parent8b12f17bdc9ff7dcf0c9b2455b0d02ed93c1e665 (diff)
parent331c025b3c5f7351318819ebd5999b27b4090602 (diff)
Merge "NetworkSuggestionEvaluator: Honor app set priority for suggestions"
-rw-r--r--service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java199
-rw-r--r--tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java144
2 files changed, 288 insertions, 55 deletions
diff --git a/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java b/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java
index 136d5c727..ddc0b71a7 100644
--- a/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java
+++ b/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java
@@ -21,16 +21,21 @@ import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiNetworkSuggestion;
import android.util.LocalLog;
-import android.util.Pair;
+import android.util.Log;
import com.android.server.wifi.util.ScanResultUtil;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
/**
@@ -74,19 +79,10 @@ public class NetworkSuggestionEvaluator implements WifiNetworkSelector.NetworkEv
WifiConfiguration currentNetwork, String currentBssid, boolean connected,
boolean untrustedNetworkAllowed,
@NonNull OnConnectableListener onConnectableListener) {
- Map<WifiNetworkSuggestion, Pair<WifiConfiguration, ScanDetail>> candidateMap =
- new HashMap<>();
+ MatchMetaInfo matchMetaInfo = new MatchMetaInfo();
for (int i = 0; i < scanDetails.size(); i++) {
ScanDetail scanDetail = scanDetails.get(i);
ScanResult scanResult = scanDetail.getScanResult();
- Set<WifiNetworkSuggestion> matchingNetworkSuggestions =
- mWifiNetworkSuggestionsManager.getNetworkSuggestionsForScanDetail(scanDetail);
- if (matchingNetworkSuggestions == null || matchingNetworkSuggestions.isEmpty()) {
- continue;
- }
- // All matching network credentials are considered equal. So, put any one of them.
- WifiNetworkSuggestion matchingNetworkSuggestion =
- matchingNetworkSuggestions.stream().findAny().get();
// If the user previously forgot this network, don't select it.
if (mWifiConfigManager.wasEphemeralNetworkDeleted(
ScanResultUtil.createQuotedSSID(scanResult.SSID))) {
@@ -94,9 +90,20 @@ public class NetworkSuggestionEvaluator implements WifiNetworkSelector.NetworkEv
+ WifiNetworkSelector.toScanId(scanResult));
continue;
}
+ Set<WifiNetworkSuggestion> matchingNetworkSuggestions =
+ mWifiNetworkSuggestionsManager.getNetworkSuggestionsForScanDetail(scanDetail);
+ if (matchingNetworkSuggestions == null || matchingNetworkSuggestions.isEmpty()) {
+ continue;
+ }
+ // All matching suggestions have the same network credentials type. So, use any one of
+ // them to lookup/add the credentials to WifiConfigManager.
+ // Note: Apps could provide different credentials (password, ceritificate) for the same
+ // network, need to handle that in the future.
+ WifiNetworkSuggestion matchingNetworkSuggestion =
+ matchingNetworkSuggestions.stream().findAny().get();
// Check if we already have a network with the same credentials in WifiConfigManager
// database. If yes, we should check if the network is currently blacklisted.
- WifiConfiguration wCmConfiguredNetwork =
+ WifiConfiguration wCmConfiguredNetwork =
mWifiConfigManager.getConfiguredNetwork(
matchingNetworkSuggestion.wifiConfiguration.configKey());
if (wCmConfiguredNetwork != null) {
@@ -106,35 +113,23 @@ public class NetworkSuggestionEvaluator implements WifiNetworkSelector.NetworkEv
+ WifiNetworkSelector.toNetworkString(wCmConfiguredNetwork));
continue;
}
- mLocalLog.log(String.format("network suggestion candidate %s (existing)",
- WifiNetworkSelector.toNetworkString(wCmConfiguredNetwork)));
- } else {
- wCmConfiguredNetwork = addCandidateToWifiConfigManager(
- matchingNetworkSuggestion.wifiConfiguration,
- matchingNetworkSuggestion.suggestorUid,
- matchingNetworkSuggestion.suggestorPackageName);
- if (wCmConfiguredNetwork == null) continue;
- mLocalLog.log(String.format("network suggestion candidate %s (new)",
- WifiNetworkSelector.toNetworkString(wCmConfiguredNetwork)));
}
- candidateMap.put(matchingNetworkSuggestion,
- Pair.create(wCmConfiguredNetwork, scanDetail));
- onConnectableListener.onConnectable(scanDetail, wCmConfiguredNetwork, 0);
+ matchMetaInfo.putAll(matchingNetworkSuggestions, wCmConfiguredNetwork, scanDetail);
}
-
- // Pick the matching network suggestion corresponding to the highest RSSI. This will need to
- // be replaced by a more sophisticated algorithm.
- Map.Entry<WifiNetworkSuggestion, Pair<WifiConfiguration, ScanDetail>>
- candidate = candidateMap
- .entrySet()
- .stream()
- .max(Comparator.comparing(e -> e.getValue().second.getScanResult().level))
- .orElse(null);
- if (candidate == null) {
+ // Return early on no match.
+ if (matchMetaInfo.isEmpty()) {
mLocalLog.log("did not see any matching network suggestions.");
return null;
}
- return candidate.getValue().first;
+ // Note: These matched sets should be very small & hence these additional manipulations that
+ // follow should not be very expensive.
+ PerNetworkSuggestionMatchMetaInfo candidate =
+ matchMetaInfo.findConnectableNetworksAndPickBest(onConnectableListener);
+ if (candidate == null) { // should never happen.
+ Log.wtf(TAG, "Unexepectedly got null");
+ return null;
+ }
+ return candidate.wCmConfiguredNetwork;
}
// Add and enable this network to the central database (i.e WifiConfigManager).
@@ -169,4 +164,136 @@ public class NetworkSuggestionEvaluator implements WifiNetworkSelector.NetworkEv
public String getName() {
return TAG;
}
+
+ // Container classes to handle book-keeping while we're iterating through the scan list.
+ private class PerNetworkSuggestionMatchMetaInfo {
+ public final WifiNetworkSuggestion wifiNetworkSuggestion;
+ public final ScanDetail matchingScanDetail;
+ public WifiConfiguration wCmConfiguredNetwork; // Added to WifiConfigManager.
+
+ PerNetworkSuggestionMatchMetaInfo(@NonNull WifiNetworkSuggestion wifiNetworkSuggestion,
+ @Nullable WifiConfiguration wCmConfiguredNetwork,
+ @NonNull ScanDetail matchingScanDetail) {
+ this.wifiNetworkSuggestion = wifiNetworkSuggestion;
+ this.wCmConfiguredNetwork = wCmConfiguredNetwork;
+ this.matchingScanDetail = matchingScanDetail;
+ }
+ }
+
+ private class PerAppMatchMetaInfo {
+ public final List<PerNetworkSuggestionMatchMetaInfo> networkInfos = new ArrayList<>();
+
+ /**
+ * Add the network suggestion & associated info to this package meta info.
+ */
+ public void put(WifiNetworkSuggestion wifiNetworkSuggestion,
+ WifiConfiguration matchingWifiConfiguration,
+ ScanDetail matchingScanDetail) {
+ networkInfos.add(new PerNetworkSuggestionMatchMetaInfo(
+ wifiNetworkSuggestion, matchingWifiConfiguration, matchingScanDetail));
+ }
+
+ /**
+ * Pick the highest priority networks among the current match info candidates for this
+ * app.
+ */
+ public List<PerNetworkSuggestionMatchMetaInfo> getHighestPriorityNetworks() {
+ // Partition the list to a map of network suggestions keyed in by the priorities.
+ // There can be multiple networks with the same priority, hence a list in the value.
+ Map<Integer, List<PerNetworkSuggestionMatchMetaInfo>> matchedNetworkInfosPerPriority =
+ networkInfos.stream()
+ .collect(Collectors.toMap(
+ e -> e.wifiNetworkSuggestion.wifiConfiguration.priority,
+ e -> Arrays.asList(e),
+ (v1, v2) -> { // concatenate networks with the same priority.
+ List<PerNetworkSuggestionMatchMetaInfo> concatList =
+ new ArrayList<>(v1);
+ concatList.addAll(v2);
+ return concatList;
+ }));
+ if (matchedNetworkInfosPerPriority.isEmpty()) { // should never happen.
+ Log.wtf(TAG, "Unexepectedly got empty");
+ return Collections.EMPTY_LIST;
+ }
+ // Return the list associated with the highest priority value.
+ return matchedNetworkInfosPerPriority.get(Collections.max(
+ matchedNetworkInfosPerPriority.keySet()));
+ }
+ }
+
+ private class MatchMetaInfo {
+ private Map<String, PerAppMatchMetaInfo> mAppInfos = new HashMap<>();
+
+ /**
+ * Add all the network suggestion & associated info.
+ */
+ public void putAll(Set<WifiNetworkSuggestion> wifiNetworkSuggestions,
+ WifiConfiguration wCmConfiguredNetwork,
+ ScanDetail matchingScanDetail) {
+ // Separate the suggestions into buckets for each app to allow sorting based on
+ // priorities set by app.
+ for (WifiNetworkSuggestion wifiNetworkSuggestion : wifiNetworkSuggestions) {
+ PerAppMatchMetaInfo appInfo = mAppInfos.computeIfAbsent(
+ wifiNetworkSuggestion.suggestorPackageName, k -> new PerAppMatchMetaInfo());
+ appInfo.put(wifiNetworkSuggestion, wCmConfiguredNetwork, matchingScanDetail);
+ }
+ }
+
+ /**
+ * Are there any matched candidates?
+ */
+ public boolean isEmpty() {
+ return mAppInfos.isEmpty();
+ }
+
+ /**
+ * Find all the connectable networks and pick the best network among the current match info
+ * candidates.
+ *
+ * Among the highest priority suggestions from different packages, choose the suggestion
+ * with the highest RSSI.
+ * Note: This should need to be replaced by a more sophisticated algorithm.
+ */
+ public PerNetworkSuggestionMatchMetaInfo findConnectableNetworksAndPickBest(
+ @NonNull OnConnectableListener onConnectableListener) {
+ List<PerNetworkSuggestionMatchMetaInfo> allMatchedNetworkInfos = new ArrayList<>();
+ for (PerAppMatchMetaInfo appInfo : mAppInfos.values()) {
+ List<PerNetworkSuggestionMatchMetaInfo> matchedNetworkInfos =
+ appInfo.getHighestPriorityNetworks();
+ for (PerNetworkSuggestionMatchMetaInfo matchedNetworkInfo : matchedNetworkInfos) {
+ // if the network does not already exist in WifiConfigManager, add now.
+ if (matchedNetworkInfo.wCmConfiguredNetwork == null) {
+ matchedNetworkInfo.wCmConfiguredNetwork = addCandidateToWifiConfigManager(
+ matchedNetworkInfo.wifiNetworkSuggestion.wifiConfiguration,
+ matchedNetworkInfo.wifiNetworkSuggestion.suggestorUid,
+ matchedNetworkInfo.wifiNetworkSuggestion.suggestorPackageName);
+ if (matchedNetworkInfo.wCmConfiguredNetwork == null) continue;
+ mLocalLog.log(String.format("network suggestion candidate %s (new)",
+ WifiNetworkSelector.toNetworkString(
+ matchedNetworkInfo.wCmConfiguredNetwork)));
+ } else {
+ mLocalLog.log(String.format("network suggestion candidate %s (existing)",
+ WifiNetworkSelector.toNetworkString(
+ matchedNetworkInfo.wCmConfiguredNetwork)));
+ }
+ allMatchedNetworkInfos.add(matchedNetworkInfo);
+ // Invoke onConnectable for the best networks from each app.
+ onConnectableListener.onConnectable(
+ matchedNetworkInfo.matchingScanDetail,
+ matchedNetworkInfo.wCmConfiguredNetwork,
+ 0);
+ }
+ }
+ PerNetworkSuggestionMatchMetaInfo networkInfo = allMatchedNetworkInfos
+ .stream()
+ .max(Comparator.comparing(e -> e.matchingScanDetail.getScanResult().level))
+ .orElse(null);
+ if (networkInfo == null) { // should never happen.
+ Log.wtf(TAG, "Unexepectedly got null");
+ return null;
+ }
+ return networkInfo;
+ }
+ }
+
}
diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java
index 4f494c0d7..fadfc6bc5 100644
--- a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java
@@ -125,7 +125,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK};
boolean[] appInteractions = {true};
boolean[] meteredness = {true};
- int[] priorities = {0};
+ int[] priorities = {-1};
int[] uids = {TEST_UID};
String[] packageNames = {TEST_PACKAGE};
@@ -148,7 +148,7 @@ public class NetworkSuggestionEvaluatorTest {
assertNotNull(candidate);
assertEquals(suggestionSsids[0] , candidate.SSID);
- validateConnectableNetworks(connectableNetworks, new String[] {scanSsids[0]});
+ validateConnectableNetworks(connectableNetworks, scanSsids[0]);
verifyAddToWifiConfigManager(suggestions[0].wifiConfiguration);
}
@@ -170,7 +170,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK, SECURITY_PSK};
boolean[] appInteractions = {true, true};
boolean[] meteredness = {true, true};
- int[] priorities = {0, 1};
+ int[] priorities = {-1, -1};
int[] uids = {TEST_UID, TEST_UID};
String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE};
@@ -194,14 +194,60 @@ public class NetworkSuggestionEvaluatorTest {
assertNotNull(candidate);
assertEquals(suggestionSsids[1] , candidate.SSID);
- validateConnectableNetworks(connectableNetworks, scanSsids);
+ validateConnectableNetworks(connectableNetworks, scanSsids[0], scanSsids[1]);
- verifyAddToWifiConfigManager(suggestions[0].wifiConfiguration,
+ verifyAddToWifiConfigManager(suggestions[1].wifiConfiguration,
suggestions[1].wifiConfiguration);
}
/**
* Ensure that we select the network suggestion corresponding to the scan result with
+ * higest priority.
+ * Expected candidate: suggestionSsids[0]
+ * Expected connectable Networks: {suggestionSsids[0], suggestionSsids[1]}
+ */
+ @Test
+ public void testSelectNetworkSuggestionForMultipleMatchHighPriorityWins() {
+ String[] scanSsids = {"test1", "test2"};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
+ int[] freqs = {2470, 2437};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"};
+ int[] levels = {-56, -45};
+ String[] suggestionSsids = {"\"" + scanSsids[0] + "\"", "\"" + scanSsids[1] + "\""};
+ int[] securities = {SECURITY_PSK, SECURITY_PSK};
+ boolean[] appInteractions = {true, true};
+ boolean[] meteredness = {true, true};
+ int[] priorities = {5, 1};
+ int[] uids = {TEST_UID, TEST_UID};
+ String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE};
+
+ ScanDetail[] scanDetails =
+ buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
+ WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
+ appInteractions, meteredness, priorities, uids, packageNames);
+ // Link the scan result with suggestions.
+ linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
+ // setup config manager interactions.
+ setupAddToWifiConfigManager(suggestions[0].wifiConfiguration,
+ suggestions[1].wifiConfiguration);
+
+ List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>();
+ WifiConfiguration candidate = mNetworkSuggestionEvaluator.evaluateNetworks(
+ Arrays.asList(scanDetails), null, null, true, false,
+ (ScanDetail scanDetail, WifiConfiguration configuration, int score) -> {
+ connectableNetworks.add(Pair.create(scanDetail, configuration));
+ });
+
+ assertNotNull(candidate);
+ assertEquals(suggestionSsids[0] , candidate.SSID);
+
+ validateConnectableNetworks(connectableNetworks, scanSsids[0]);
+
+ verifyAddToWifiConfigManager(suggestions[0].wifiConfiguration);
+ }
+
+ /**
+ * Ensure that we select the network suggestion corresponding to the scan result with
* highest RSSI. The lower RSSI scan result has multiple matching suggestions
* (should pick any one in the connectable networks).
*
@@ -221,7 +267,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK, SECURITY_PSK, SECURITY_PSK};
boolean[] appInteractions = {true, true, false};
boolean[] meteredness = {true, true, false};
- int[] priorities = {0, 1, 0};
+ int[] priorities = {-1, -1, -1};
int[] uids = {TEST_UID, TEST_UID, TEST_UID_OTHER};
String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE, TEST_PACKAGE_OTHER};
@@ -252,6 +298,66 @@ public class NetworkSuggestionEvaluatorTest {
}
/**
+ * Ensure that we select the network suggestion with the higest priority among network
+ * suggestions from the same package. Among different packages, pick the suggestion
+ * corresponding to the scan result with highest RSSI.
+ *
+ * The suggestion[1] has higher priority than suggestion[0] even though it has lower RSSI than
+ * suggestion[0].
+ *
+ * Expected candidate: suggestionSsids[1]
+ * Expected connectable Networks: {suggestionSsids[1],
+ * (suggestionSsids[2],
+ * suggestionSsids[3]}
+ */
+ @Test
+ public void
+ testSelectNetworkSuggestionForMultipleMatchWithMultipleSuggestionsHighPriorityWins() {
+ String[] scanSsids = {"test1", "test2", "test3", "test4"};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4", "6c:fc:de:34:12",
+ "6c:fd:a1:11:11:98"};
+ int[] freqs = {2470, 2437, 2470, 2437};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]",
+ "[WPA2-EAP-CCMP][ESS]"};
+ int[] levels = {-23, -45, -56, -65};
+ String[] suggestionSsids = {"\"" + scanSsids[0] + "\"", "\"" + scanSsids[1] + "\"",
+ "\"" + scanSsids[2] + "\"", "\"" + scanSsids[3] + "\""};
+ int[] securities = {SECURITY_PSK, SECURITY_PSK, SECURITY_PSK, SECURITY_PSK};
+ boolean[] appInteractions = {true, true, false, false};
+ boolean[] meteredness = {true, true, false, false};
+ int[] priorities = {0, 5, -1, -1};
+ int[] uids = {TEST_UID, TEST_UID, TEST_UID_OTHER, TEST_UID_OTHER};
+ String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE, TEST_PACKAGE_OTHER,
+ TEST_PACKAGE_OTHER};
+
+ ScanDetail[] scanDetails =
+ buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
+ WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
+ appInteractions, meteredness, priorities, uids, packageNames);
+ // Link the scan result with suggestions.
+ linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
+ // setup config manager interactions.
+ setupAddToWifiConfigManager(suggestions[0].wifiConfiguration,
+ suggestions[1].wifiConfiguration, suggestions[2].wifiConfiguration,
+ suggestions[3].wifiConfiguration);
+
+ List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>();
+ WifiConfiguration candidate = mNetworkSuggestionEvaluator.evaluateNetworks(
+ Arrays.asList(scanDetails), null, null, true, false,
+ (ScanDetail scanDetail, WifiConfiguration configuration, int score) -> {
+ connectableNetworks.add(Pair.create(scanDetail, configuration));
+ });
+
+ assertNotNull(candidate);
+ assertEquals(suggestionSsids[1] , candidate.SSID);
+
+ validateConnectableNetworks(connectableNetworks, scanSsids[1], scanSsids[2], scanSsids[3]);
+
+ verifyAddToWifiConfigManager(suggestions[1].wifiConfiguration,
+ suggestions[2].wifiConfiguration, suggestions[3].wifiConfiguration);
+ }
+
+ /**
* Ensure that we select the only matching network suggestion, but return null because
* we failed the {@link WifiConfigManager} interactions.
* Expected candidate: null.
@@ -268,7 +374,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK};
boolean[] appInteractions = {true};
boolean[] meteredness = {true};
- int[] priorities = {0};
+ int[] priorities = {-1};
int[] uids = {TEST_UID};
String[] packageNames = {TEST_PACKAGE};
@@ -292,7 +398,7 @@ public class NetworkSuggestionEvaluatorTest {
assertNull(candidate);
assertTrue(connectableNetworks.isEmpty());
- verify(mWifiConfigManager, times(suggestionSsids.length))
+ verify(mWifiConfigManager, times(scanSsids.length))
.wasEphemeralNetworkDeleted(anyString());
verify(mWifiConfigManager).getConfiguredNetwork(eq(
suggestions[0].wifiConfiguration.configKey()));
@@ -319,7 +425,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK};
boolean[] appInteractions = {true};
boolean[] meteredness = {true};
- int[] priorities = {0};
+ int[] priorities = {-1};
int[] uids = {TEST_UID};
String[] packageNames = {TEST_PACKAGE};
@@ -346,7 +452,7 @@ public class NetworkSuggestionEvaluatorTest {
validateConnectableNetworks(connectableNetworks, new String[] {scanSsids[0]});
// check for any saved networks.
- verify(mWifiConfigManager, times(suggestionSsids.length))
+ verify(mWifiConfigManager, times(scanSsids.length))
.wasEphemeralNetworkDeleted(anyString());
verify(mWifiConfigManager).getConfiguredNetwork(candidate.configKey());
// Verify we did not try to add any new networks or other interactions with
@@ -371,7 +477,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK};
boolean[] appInteractions = {true};
boolean[] meteredness = {true};
- int[] priorities = {0};
+ int[] priorities = {-1};
int[] uids = {TEST_UID};
String[] packageNames = {TEST_PACKAGE};
@@ -396,7 +502,7 @@ public class NetworkSuggestionEvaluatorTest {
assertNull(candidate);
assertTrue(connectableNetworks.isEmpty());
- verify(mWifiConfigManager, times(suggestionSsids.length))
+ verify(mWifiConfigManager, times(scanSsids.length))
.wasEphemeralNetworkDeleted(anyString());
// Verify we did not try to add any new networks or other interactions with
// WifiConfigManager.
@@ -421,7 +527,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK};
boolean[] appInteractions = {true};
boolean[] meteredness = {true};
- int[] priorities = {0};
+ int[] priorities = {-1};
int[] uids = {TEST_UID};
String[] packageNames = {TEST_PACKAGE};
@@ -450,7 +556,7 @@ public class NetworkSuggestionEvaluatorTest {
assertNull(candidate);
assertTrue(connectableNetworks.isEmpty());
- verify(mWifiConfigManager, times(suggestionSsids.length))
+ verify(mWifiConfigManager, times(scanSsids.length))
.wasEphemeralNetworkDeleted(anyString());
verify(mWifiConfigManager).getConfiguredNetwork(eq(
suggestions[0].wifiConfiguration.configKey()));
@@ -479,7 +585,7 @@ public class NetworkSuggestionEvaluatorTest {
int[] securities = {SECURITY_PSK};
boolean[] appInteractions = {true};
boolean[] meteredness = {true};
- int[] priorities = {0};
+ int[] priorities = {-1};
int[] uids = {TEST_UID};
String[] packageNames = {TEST_PACKAGE};
@@ -512,7 +618,7 @@ public class NetworkSuggestionEvaluatorTest {
validateConnectableNetworks(connectableNetworks, new String[] {scanSsids[0]});
- verify(mWifiConfigManager, times(suggestionSsids.length))
+ verify(mWifiConfigManager, times(scanSsids.length))
.wasEphemeralNetworkDeleted(anyString());
verify(mWifiConfigManager).getConfiguredNetwork(eq(
suggestions[0].wifiConfiguration.configKey()));
@@ -555,7 +661,7 @@ public class NetworkSuggestionEvaluatorTest {
private void verifyAddToWifiConfigManager(WifiConfiguration...candidates) {
// check for any saved networks.
- verify(mWifiConfigManager, times(candidates.length)).getConfiguredNetwork(anyString());
+ verify(mWifiConfigManager, atLeast(candidates.length)).getConfiguredNetwork(anyString());
ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor =
ArgumentCaptor.forClass(WifiConfiguration.class);
@@ -675,8 +781,8 @@ public class NetworkSuggestionEvaluatorTest {
}
private void validateConnectableNetworks(List<Pair<ScanDetail, WifiConfiguration>> actual,
- String[] expectedSsids) {
- Set<String> expectedSsidSet = new HashSet<String>(Arrays.asList(expectedSsids));
+ String...expectedSsids) {
+ Set<String> expectedSsidSet = new HashSet<>(Arrays.asList(expectedSsids));
assertEquals(expectedSsidSet.size(), actual.size());
for (Pair<ScanDetail, WifiConfiguration> candidate : actual) {