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
This commit is contained in:
Sundeep Ghuman
2017-03-13 14:40:56 -07:00
parent 54bdcfa081
commit aaa8a1b54a
2 changed files with 15 additions and 8 deletions

View File

@@ -113,9 +113,14 @@ public class AccessPoint implements Comparable<AccessPoint> {
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.
*
* <p>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<AccessPoint> {
return mInfo;
}
/**
* Returns the number of levels to show for a Wifi icon, from 0 to {@link #SIGNAL_LEVELS}-1.
*
* <p>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<AccessPoint> {
}
/** Return true if the current RSSI is reachable, and false otherwise. */
boolean isReachable() {
public boolean isReachable() {
return mRssi != UNREACHABLE_RSSI;
}

View File

@@ -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;