diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index fc6a1611e697c..4a54451636509 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -1058,6 +1058,12 @@ public class AccessPoint implements Comparable { final int oldLevel = getLevel(); if (info != null && isInfoForThisAccessPoint(config, info)) { updated = (mInfo == null); + if (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. + update(config); // Notifies the AccessPointListener of the change + } if (mRssi != info.getRssi()) { mRssi = info.getRssi(); updated = true; diff --git a/packages/SettingsLib/tests/integ/AndroidManifest.xml b/packages/SettingsLib/tests/integ/AndroidManifest.xml index 0d5ff2ca05a5f..e8e0b41ffd411 100644 --- a/packages/SettingsLib/tests/integ/AndroidManifest.xml +++ b/packages/SettingsLib/tests/integ/AndroidManifest.xml @@ -21,6 +21,7 @@ + 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 57ad093422a43..5c64cff78a884 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 @@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertWithMessage; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; @@ -622,4 +624,36 @@ public class AccessPointTest { NetworkInfo newInfo = new NetworkInfo(networkInfo); // same values assertThat(ap.update(config, wifiInfo, newInfo)).isFalse(); } + + @Test + public void testUpdateWithConfigChangeOnly_returnsFalseButInvokesListener() { + int networkId = 123; + int rssi = -55; + WifiConfiguration config = new WifiConfiguration(); + config.networkId = networkId; + config.numNoInternetAccessReports = 1; + + WifiInfo wifiInfo = new WifiInfo(); + wifiInfo.setNetworkId(networkId); + wifiInfo.setRssi(rssi); + + NetworkInfo networkInfo = + new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); + networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", ""); + + AccessPoint ap = new TestAccessPointBuilder(mContext) + .setNetworkInfo(networkInfo) + .setNetworkId(networkId) + .setRssi(rssi) + .setWifiInfo(wifiInfo) + .build(); + + AccessPoint.AccessPointListener mockListener = mock(AccessPoint.AccessPointListener.class); + ap.setListener(mockListener); + WifiConfiguration newConfig = new WifiConfiguration(config); + config.validatedInternetAccess = true; + + assertThat(ap.update(newConfig, wifiInfo, networkInfo)).isFalse(); + verify(mockListener).onAccessPointChanged(ap); + } }