From aaa8a1b54a038424bd3e6590efe52c4fac14143b Mon Sep 17 00:00:00 2001 From: Sundeep Ghuman Date: Mon, 13 Mar 2017 14:40:56 -0700 Subject: [PATCH] Fix the number of levels returned by getLevels(). This was previously out of sync with WifiManager.RSSI_LEVELS which caused UI issues where the wrong number of bars were shown in various places. This is the permanent fix to a previous temporary fix. Bug: 1948619 Test: runtest --path frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java Change-Id: Iadb2a6131ee9fbc4f297766d0bc3bc82eca40a4d --- .../android/settingslib/wifi/AccessPoint.java | 20 +++++++++++++------ .../wifi/AccessPointPreference.java | 3 +-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 0ce1e1e93856b..48f3e2a855f3c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -113,9 +113,14 @@ public class AccessPoint implements Comparable { private static final int PSK_WPA2 = 2; private static final int PSK_WPA_WPA2 = 3; - public static final int SIGNAL_LEVELS = 4; + /** + * The number of distinct wifi levels. + * + *

Must keep in sync with {@link R.array.wifi_signal} and {@link WifiManager#RSSI_LEVELS}. + */ + public static final int SIGNAL_LEVELS = 5; - static final int UNREACHABLE_RSSI = Integer.MIN_VALUE; + public static final int UNREACHABLE_RSSI = Integer.MIN_VALUE; private final Context mContext; @@ -370,10 +375,13 @@ public class AccessPoint implements Comparable { return mInfo; } + /** + * Returns the number of levels to show for a Wifi icon, from 0 to {@link #SIGNAL_LEVELS}-1. + * + *

Use {@#isReachable()} to determine if an AccessPoint is in range, as this method will + * always return at least 0. + */ public int getLevel() { - if (!isReachable()) { - return -1; - } return WifiManager.calculateSignalLevel(mRssi, SIGNAL_LEVELS); } @@ -923,7 +931,7 @@ public class AccessPoint implements Comparable { } /** Return true if the current RSSI is reachable, and false otherwise. */ - boolean isReachable() { + public boolean isReachable() { return mRssi != UNREACHABLE_RSSI; } diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java index 50972c7098632..c9fa0170e7c4c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java @@ -223,8 +223,7 @@ public class AccessPointPreference extends Preference { } final Context context = getContext(); - int level = WifiManager.calculateSignalLevel( - mAccessPoint.getRssi(), WifiManager.RSSI_LEVELS); + int level = mAccessPoint.getLevel(); int wifiBadge = mAccessPoint.getBadge(); if (level != mLevel || wifiBadge != mWifiBadge) { mLevel = level;