Merge "Duplicate ScanResult should return only one matched suggestion" into rvc-dev
diff --git a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
index bf2a5aa..05e1e63 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
@@ -1615,6 +1615,8 @@
      */
     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 @@
             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 f53b4c4..e9bb940 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 @@
      *  - 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 @@
                 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 @@
         mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1);
         wifiConfigurationList = mWifiNetworkSuggestionsManager
                 .getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(scanResults);
+        assertEquals(1, wifiConfigurationList.size());
         assertEquals(networkSuggestion3.wifiConfiguration, wifiConfigurationList.get(0));
     }