diff options
-rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java | 18 | ||||
-rw-r--r-- | packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java | 57 |
2 files changed, 67 insertions, 8 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 43affcdfefe9..3dd3fb6643a9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -1047,20 +1047,22 @@ public class AccessPoint implements Comparable<AccessPoint> { * match based on SSID and security. */ private boolean isInfoForThisAccessPoint(WifiConfiguration config, WifiInfo info) { - if (info.isOsuAp()) { - return (mOsuStatus != null); + if (info.isOsuAp() || mOsuStatus != null) { + return (info.isOsuAp() && mOsuStatus != null); + } else if (info.isPasspointAp() || isPasspoint()) { + return (info.isPasspointAp() && isPasspoint() + && TextUtils.equals(info.getFqdn(), mConfig.FQDN)); } - if (isPasspoint() == false && networkId != WifiConfiguration.INVALID_NETWORK_ID) { + if (networkId != WifiConfiguration.INVALID_NETWORK_ID) { return networkId == info.getNetworkId(); } else if (config != null) { - return matches(config); - } - else { + return TextUtils.equals(getKey(config), getKey()); + } else { // Might be an ephemeral connection with no WifiConfiguration. Try matching on SSID. // (Note that we only do this if the WifiConfiguration explicitly equals INVALID). // TODO: Handle hex string SSIDs. - return ssid.equals(removeDoubleQuotes(info.getSSID())); + return TextUtils.equals(removeDoubleQuotes(info.getSSID()), ssid); } } @@ -1207,7 +1209,7 @@ public class AccessPoint implements Comparable<AccessPoint> { final int oldLevel = getLevel(); if (info != null && isInfoForThisAccessPoint(config, info)) { updated = (mInfo == null); - if (mConfig != config) { + if (!isPasspoint() && mConfig != config) { // We do not set updated = true as we do not want to increase the amount of sorting // and copying performed in WifiTracker at this time. If issues involving refresh // are still seen, we will investigate further. diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java index 5e3472b830a0..f5ead0c1c55b 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java @@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -84,6 +85,7 @@ public class AccessPointTest { 20 * DateUtils.MINUTE_IN_MILLIS;; private Context mContext; + private WifiInfo mWifiInfo; @Mock private RssiCurve mockBadgeCurve; @Mock private WifiNetworkScoreCache mockWifiNetworkScoreCache; public static final int NETWORK_ID = 123; @@ -103,6 +105,9 @@ public class AccessPointTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = InstrumentationRegistry.getTargetContext(); + mWifiInfo = new WifiInfo(); + mWifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID)); + mWifiInfo.setBSSID(TEST_BSSID); WifiTracker.sVerboseLogging = false; } @@ -1160,4 +1165,56 @@ public class AccessPointTest { // Fast should still be returned since cache was updated with recent time assertThat(ap.getSpeed()).isEqualTo(newSpeed); } + + /** + * Verifies that a Passpoint WifiInfo updates the matching Passpoint AP + */ + @Test + public void testUpdate_passpointWifiInfo_updatesPasspointAccessPoint() { + mWifiInfo.setFQDN("fqdn"); + mWifiInfo.setProviderFriendlyName("providerFriendlyName"); + + WifiConfiguration spyConfig = spy(new WifiConfiguration()); + when(spyConfig.isPasspoint()).thenReturn(true); + spyConfig.SSID = TEST_SSID; + spyConfig.BSSID = TEST_BSSID; + spyConfig.FQDN = "fqdn"; + spyConfig.providerFriendlyName = "providerFriendlyName"; + AccessPoint passpointAp = new AccessPoint(mContext, spyConfig); + + assertThat(passpointAp.update(null, mWifiInfo, null)).isTrue(); + } + + /** + * Verifies that a Passpoint WifiInfo does not update a non-Passpoint AP with the same SSID. + */ + @Test + public void testUpdate_passpointWifiInfo_doesNotUpdateNonPasspointAccessPoint() { + mWifiInfo.setFQDN("fqdn"); + mWifiInfo.setProviderFriendlyName("providerFriendlyName"); + + AccessPoint ap = new TestAccessPointBuilder(mContext) + .setSsid(TEST_SSID) + .setBssid(TEST_BSSID) + .setScanResults(SCAN_RESULTS) + .build(); + + assertThat(ap.update(null, mWifiInfo, null)).isFalse(); + } + + /** + * Verifies that a non-Passpoint WifiInfo does not update a Passpoint AP with the same SSID. + */ + @Test + public void testUpdate_nonPasspointWifiInfo_doesNotUpdatePasspointAccessPoint() { + WifiConfiguration spyConfig = spy(new WifiConfiguration()); + when(spyConfig.isPasspoint()).thenReturn(true); + spyConfig.SSID = TEST_SSID; + spyConfig.BSSID = TEST_BSSID; + spyConfig.FQDN = "fqdn"; + spyConfig.providerFriendlyName = "providerFriendlyName"; + AccessPoint passpointAp = new AccessPoint(mContext, spyConfig); + + assertThat(passpointAp.update(null, mWifiInfo, null)).isFalse(); + } } |