From d38708c1ab1bad1dd2e811204e21a76e33a69182 Mon Sep 17 00:00:00 2001 From: Glen Kuhne Date: Wed, 19 Jul 2017 14:53:34 -0700 Subject: Don't set AccessPoint with WifiInfo.INVALID_RSSI This stops the RSSI of an AccessPoint object being updated from WifiInfo for the current network, when that WifiInfo does not have a valid RSSI. This occurs when attempting to connect to a network, and the connection has not yet been established. Fixes a UI bug where the signal strength would appear to be zero when attempting to connect to something, or after failing to. Bug: 63487286 Test: runtest --path frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java Test: Manual. Attempt to connect to network with bad PSK. Observe Signal strength does not get set to zero. Change-Id: Ia5343fb6f0935134e6a4f82034de164342fe55d4 --- .../com/android/settingslib/wifi/AccessPoint.java | 2 +- .../android/settingslib/wifi/AccessPointTest.java | 51 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index ec3b520e2012..0400e243eda6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -1065,7 +1065,7 @@ public class AccessPoint implements Comparable { // are still seen, we will investigate further. update(config); // Notifies the AccessPointListener of the change } - if (mRssi != info.getRssi()) { + if (mRssi != info.getRssi() && info.getRssi() != WifiInfo.INVALID_RSSI) { mRssi = info.getRssi(); updated = true; } else if (mNetworkInfo != null && networkInfo != null 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 c08dd6ed97cd..2f02b9b98455 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 @@ -625,6 +625,57 @@ public class AccessPointTest { assertThat(ap.update(config, wifiInfo, newInfo)).isFalse(); } + @Test + public void testUpdateWithDifferentRssi_returnsTrue() { + int networkId = 123; + int rssi = -55; + WifiConfiguration config = new WifiConfiguration(); + config.networkId = networkId; + WifiInfo wifiInfo = new WifiInfo(); + wifiInfo.setNetworkId(networkId); + wifiInfo.setRssi(rssi); + + NetworkInfo networkInfo = + new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); + networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", ""); + + AccessPoint ap = new TestAccessPointBuilder(mContext) + .setNetworkInfo(networkInfo) + .setNetworkId(networkId) + .setRssi(rssi) + .setWifiInfo(wifiInfo) + .build(); + + NetworkInfo newInfo = new NetworkInfo(networkInfo); // same values + wifiInfo.setRssi(rssi + 1); + assertThat(ap.update(config, wifiInfo, newInfo)).isTrue(); + } + + @Test + public void testUpdateWithInvalidRssi_returnsFalse() { + int networkId = 123; + int rssi = -55; + WifiConfiguration config = new WifiConfiguration(); + config.networkId = networkId; + WifiInfo wifiInfo = new WifiInfo(); + wifiInfo.setNetworkId(networkId); + wifiInfo.setRssi(rssi); + + NetworkInfo networkInfo = + new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); + networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", ""); + + AccessPoint ap = new TestAccessPointBuilder(mContext) + .setNetworkInfo(networkInfo) + .setNetworkId(networkId) + .setRssi(rssi) + .setWifiInfo(wifiInfo) + .build(); + + NetworkInfo newInfo = new NetworkInfo(networkInfo); // same values + wifiInfo.setRssi(WifiInfo.INVALID_RSSI); + assertThat(ap.update(config, wifiInfo, newInfo)).isFalse(); + } @Test public void testUpdateWithConfigChangeOnly_returnsFalseButInvokesListener() { int networkId = 123; -- cgit v1.2.3-59-g8ed1b