Merge "Fixed wifi picker active network detection for Passpoint"
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 43affcd..3dd3fb6 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 @@
* 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 @@
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 5e3472b..f5ead0c 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.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 @@
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 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 @@
// 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();
+ }
}