From f4d3302b06bf910fe122cdb2ef39900c7a36b038 Mon Sep 17 00:00:00 2001 From: Sundeep Ghuman Date: Mon, 5 Jun 2017 19:47:36 -0700 Subject: Update WifiConfiguration in AccessPoint. Currently, calling AccessPoint.update(config, info, networkInfo) will not store the new WifiConfiguration object if it has changed. This can cause the summary statement to fall out of sync. Bug: b/38409294 Test: Open WifiNetworkDetails page with verbose logging. Stale state no longer shown when config changes. runtest --path frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java Change-Id: I86411527472621f86ab691ee772c0b3d2153d01f --- .../com/android/settingslib/wifi/AccessPoint.java | 6 ++++ .../SettingsLib/tests/integ/AndroidManifest.xml | 1 + .../android/settingslib/wifi/AccessPointTest.java | 34 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index d45ed1922aa4..2f8a7161929e 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -1053,6 +1053,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 0d5ff2ca05a5..e8e0b41ffd41 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 89328ee47f1c..f5596913fa75 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; @@ -607,4 +609,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); + } } -- cgit v1.2.3-59-g8ed1b