diff --git a/api/system-current.txt b/api/system-current.txt index e79ede8dc9b71..e99ac06c258ea 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3895,7 +3895,6 @@ package android.net.wifi { method public void disable(int, android.net.wifi.WifiManager.ActionListener); method public void disableEphemeralNetwork(java.lang.String); method public void forget(int, android.net.wifi.WifiManager.ActionListener); - method public java.util.List getAllMatchingWifiConfigs(java.util.List); method public java.util.List getPrivilegedConfiguredNetworks(); method public android.net.wifi.WifiConfiguration getWifiApConfiguration(); method public int getWifiApState(); diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 1700006f939dc..7b2f07d5cb685 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -16,7 +16,6 @@ package android.net.wifi; - import android.content.pm.ParceledListSlice; import android.net.wifi.hotspot2.OsuProvider; @@ -63,7 +62,7 @@ interface IWifiManager ParceledListSlice getPrivilegedConfiguredNetworks(); - List getAllMatchingWifiConfigs(in List scanResult); + Map getAllMatchingFqdnsForScanResults(in List scanResult); List getMatchingOsuProviders(in List scanResult); @@ -77,6 +76,8 @@ interface IWifiManager List getPasspointConfigurations(); + List getWifiConfigsForPasspointProfiles(in List fqdnList); + void queryPasspointIcon(long bssid, String fileName); int matchProviderWithCurrentNetwork(String fqdn); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index e67e8ea7d9abf..f2a3b42e16681 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -44,6 +44,7 @@ import android.os.Messenger; import android.os.RemoteException; import android.os.WorkSource; import android.util.Log; +import android.util.Pair; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; @@ -1191,25 +1192,39 @@ public class WifiManager { } /** - * Returns all matching WifiConfigurations for a given list of ScanResult. + * Returns a list of all matching WifiConfigurations for a given list of ScanResult. * * An empty list will be returned when no configurations are installed or if no configurations * match the ScanResult. - + * * @param scanResults a list of scanResult that represents the BSSID - * @return A list of {@link WifiConfiguration} that can have duplicate entries. + * @return List that consists of {@link WifiConfiguration} and corresponding scanResults. * @throws UnsupportedOperationException if Passpoint is not enabled on the device. * @hide */ - @SystemApi @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) - public List getAllMatchingWifiConfigs( + public List>> getAllMatchingWifiConfigs( @NonNull List scanResults) { + List>> configs = new ArrayList<>(); try { - return mService.getAllMatchingWifiConfigs(scanResults); + Map> results = mService.getAllMatchingFqdnsForScanResults( + scanResults); + if (results.isEmpty()) { + return configs; + } + List wifiConfigurations = + mService.getWifiConfigsForPasspointProfiles(new ArrayList<>(results.keySet())); + for (WifiConfiguration configuration : wifiConfigurations) { + List scanResultList = results.get(configuration.FQDN); + if (scanResultList != null) { + configs.add(Pair.create(configuration, scanResultList)); + } + } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } + + return configs; } /** diff --git a/wifi/java/com/android/server/wifi/AbstractWifiService.java b/wifi/java/com/android/server/wifi/AbstractWifiService.java index e94b9e6c86716..23961080110e2 100644 --- a/wifi/java/com/android/server/wifi/AbstractWifiService.java +++ b/wifi/java/com/android/server/wifi/AbstractWifiService.java @@ -106,7 +106,8 @@ public abstract class AbstractWifiService extends IWifiManager.Stub { } @Override - public List getAllMatchingWifiConfigs(List scanResults) { + public Map> getAllMatchingFqdnsForScanResults( + List scanResults) { throw new UnsupportedOperationException(); } @@ -154,6 +155,11 @@ public abstract class AbstractWifiService extends IWifiManager.Stub { throw new UnsupportedOperationException(); } + @Override + public List getWifiConfigsForPasspointProfiles(List fqdnList) { + throw new UnsupportedOperationException(); + } + @Override public void queryPasspointIcon(long bssid, String fileName) { throw new UnsupportedOperationException(); diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index c43948bb0c04f..4fbef5a8493d8 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -77,7 +77,9 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Unit tests for {@link android.net.wifi.WifiManager}. @@ -1274,14 +1276,20 @@ i * Verify that a call to cancel WPS immediately returns a failure. } /** - * Check the call to getAllMatchingWifiConfigs calls getAllMatchingWifiConfigs of WifiService - * with the provided a list of ScanResult. + * Check the call to getAllMatchingWifiConfigs calls getAllMatchingFqdnsForScanResults and + * getWifiConfigsForPasspointProfiles of WifiService in order. */ @Test public void testGetAllMatchingWifiConfigs() throws Exception { + Map> fqdns = new HashMap<>(); + fqdns.put("www.test.com", new ArrayList<>()); + when(mWifiService.getAllMatchingFqdnsForScanResults(any(List.class))).thenReturn(fqdns); + InOrder inOrder = inOrder(mWifiService); + mWifiManager.getAllMatchingWifiConfigs(new ArrayList<>()); - verify(mWifiService).getAllMatchingWifiConfigs(any(List.class)); + inOrder.verify(mWifiService).getAllMatchingFqdnsForScanResults(any(List.class)); + inOrder.verify(mWifiService).getWifiConfigsForPasspointProfiles(any(List.class)); } /**