diff options
| author | 2017-06-05 19:47:36 -0700 | |
|---|---|---|
| committer | 2017-06-28 22:24:22 -0700 | |
| commit | f4d3302b06bf910fe122cdb2ef39900c7a36b038 (patch) | |
| tree | 16e55a6e3c3ec47cd12aae2f833a61b769406384 | |
| parent | 5345fce58ff35b29e8e7264a2e36c9c990aedcb1 (diff) | |
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
3 files changed, 41 insertions, 0 deletions
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<AccessPoint> { 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 @@ <uses-permission android:name="android.permission.MANAGE_USERS" /> <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY"/> <uses-permission android:name="android.permission.SET_TIME_ZONE" /> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 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); + } } |