From 05df45db0213c78c682037cb37bded24bcfcdcd5 Mon Sep 17 00:00:00 2001 From: Ecco Park Date: Tue, 18 Dec 2018 16:13:41 -0800 Subject: [PATCH] passpoint-r2: change the return type of getAllMatchingWifiConfigs This change is required to show the signal level associated with service name on UI for installed passpoint profile as picking strongest one up from matching scanResults. In order to get a map that consists of WifiConfiguration and a list of ScanResults, three steps are required. 1) Gets a map that consists of FQDN(Fully Qualified Domain Name) of a matching Passpoint profile and a list of ScanResults. 2) Gets a list of WifiConfigurations for Passpoint profiles matched a provided list of FQDN. 3) Creates a new map that consists of WifiConfiguration and a list of ScanResult. Bug: 119514793 Test: ./frameworks/base/wifi/tests/runtests.sh Test: tested with R1 AP for installing profile and R2 AP for connection Change-Id: I0d56dbdddae4e365b909b9c8f3eff3b0121dc5de Signed-off-by: Ecco Park --- api/system-current.txt | 1 - wifi/java/android/net/wifi/IWifiManager.aidl | 5 ++-- wifi/java/android/net/wifi/WifiManager.java | 27 ++++++++++++++----- .../server/wifi/AbstractWifiService.java | 8 +++++- .../src/android/net/wifi/WifiManagerTest.java | 14 +++++++--- 5 files changed, 42 insertions(+), 13 deletions(-) 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)); } /**