Loading packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +10 −8 Original line number Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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. Loading packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java +57 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; } Loading Loading @@ -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(); } } Loading
packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +10 −8 Original line number Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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. Loading
packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java +57 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; } Loading Loading @@ -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(); } }