summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java12
2 files changed, 15 insertions, 3 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
index bf2a5aaa1..05e1e6391 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
@@ -1615,6 +1615,8 @@ public class WifiNetworkSuggestionsManager {
*/
public @NonNull List<WifiConfiguration> getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(
List<ScanResult> scanResults) {
+ // Create a HashSet to avoid return multiple result for duplicate ScanResult.
+ Set<String> networkKeys = new HashSet<>();
List<WifiConfiguration> sharedWifiConfigs = new ArrayList<>();
for (ScanResult scanResult : scanResults) {
ScanResultMatchInfo scanResultMatchInfo =
@@ -1648,7 +1650,9 @@ public class WifiNetworkSuggestionsManager {
if (existingConfig == null || !existingConfig.fromWifiNetworkSuggestion) {
continue;
}
- sharedWifiConfigs.add(existingConfig);
+ if (networkKeys.add(existingConfig.getKey())) {
+ sharedWifiConfigs.add(existingConfig);
+ }
}
return sharedWifiConfigs;
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
index f53b4c41e..e9bb940be 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
@@ -2982,6 +2982,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
* - app without user approval will not be returned.
* - open network will not be returned.
* - suggestion doesn't allow user manually connect will not be return.
+ * - Multiple duplicate ScanResults will only return single matched config.
*/
@Test
public void testGetWifiConfigForMatchedNetworkSuggestionsSharedWithUser() {
@@ -2996,8 +2997,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
createScanDetailForNetwork(networkSuggestion1.wifiConfiguration).getScanResult());
scanResults.add(
createScanDetailForNetwork(networkSuggestion2.wifiConfiguration).getScanResult());
- scanResults.add(
- createScanDetailForNetwork(networkSuggestion3.wifiConfiguration).getScanResult());
+
+ // Create two same ScanResult for networkSuggestion3
+ ScanResult scanResult1 = createScanDetailForNetwork(networkSuggestion3.wifiConfiguration)
+ .getScanResult();
+ ScanResult scanResult2 = new ScanResult(scanResult1);
+ scanResults.add(scanResult1);
+ scanResults.add(scanResult2);
+
List<WifiNetworkSuggestion> networkSuggestionList =
new ArrayList<WifiNetworkSuggestion>() {{
add(networkSuggestion1);
@@ -3018,6 +3025,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1);
wifiConfigurationList = mWifiNetworkSuggestionsManager
.getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(scanResults);
+ assertEquals(1, wifiConfigurationList.size());
assertEquals(networkSuggestion3.wifiConfiguration, wifiConfigurationList.get(0));
}