Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1efc3a53 authored by David Su's avatar David Su
Browse files

AccessPoint: Migrate to new calculateSignalLevel

Migrate to new WifiManager.calculateSignalLevel()
API to respect RSSI level threshold customization.

Bug: 147402009
Test: Open Settings and verify RSSI level indicator
Test: atest AccessPointTest
Change-Id: Ic6cdc8ea61266cbce8b007c880916a1f0d1ef6a3
parent 2dbacb6c
Loading
Loading
Loading
Loading
+7 −12
Original line number Original line Diff line number Diff line
@@ -211,13 +211,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
    private static final int EAP_WPA = 1; // WPA-EAP
    private static final int EAP_WPA = 1; // WPA-EAP
    private static final int EAP_WPA2_WPA3 = 2; // RSN-EAP
    private static final int EAP_WPA2_WPA3 = 2; // RSN-EAP


    /**
     * 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;

    public static final int UNREACHABLE_RSSI = Integer.MIN_VALUE;
    public static final int UNREACHABLE_RSSI = Integer.MIN_VALUE;


    public static final String KEY_PREFIX_AP = "AP:";
    public static final String KEY_PREFIX_AP = "AP:";
@@ -453,9 +446,10 @@ public class AccessPoint implements Comparable<AccessPoint> {
            return other.getSpeed() - getSpeed();
            return other.getSpeed() - getSpeed();
        }
        }


        WifiManager wifiManager = getWifiManager();
        // Sort by signal strength, bucketed by level
        // Sort by signal strength, bucketed by level
        int difference = WifiManager.calculateSignalLevel(other.mRssi, SIGNAL_LEVELS)
        int difference = wifiManager.calculateSignalLevel(other.mRssi)
                - WifiManager.calculateSignalLevel(mRssi, SIGNAL_LEVELS);
                - wifiManager.calculateSignalLevel(mRssi);
        if (difference != 0) {
        if (difference != 0) {
            return difference;
            return difference;
        }
        }
@@ -869,13 +863,14 @@ public class AccessPoint implements Comparable<AccessPoint> {
    }
    }


    /**
    /**
     * Returns the number of levels to show for a Wifi icon, from 0 to {@link #SIGNAL_LEVELS}-1.
     * Returns the number of levels to show for a Wifi icon, from 0 to
     * {@link WifiManager#getMaxSignalLevel()}.
     *
     *
     * <p>Use {@#isReachable()} to determine if an AccessPoint is in range, as this method will
     * <p>Use {@link #isReachable()} to determine if an AccessPoint is in range, as this method will
     * always return at least 0.
     * always return at least 0.
     */
     */
    public int getLevel() {
    public int getLevel() {
        return WifiManager.calculateSignalLevel(mRssi, SIGNAL_LEVELS);
        return getWifiManager().calculateSignalLevel(mRssi);
    }
    }


    public int getRssi() {
    public int getRssi() {
+5 −2
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.Parcelable;


@@ -126,13 +127,15 @@ public class TestAccessPointBuilder {
    @Keep
    @Keep
    public TestAccessPointBuilder setLevel(int level) {
    public TestAccessPointBuilder setLevel(int level) {
        // Reversal of WifiManager.calculateSignalLevels
        // Reversal of WifiManager.calculateSignalLevels
        WifiManager wifiManager = mContext.getSystemService(WifiManager.class);
        int maxSignalLevel = wifiManager.getMaxSignalLevel();
        if (level == 0) {
        if (level == 0) {
            mRssi = MIN_RSSI;
            mRssi = MIN_RSSI;
        } else if (level >= AccessPoint.SIGNAL_LEVELS) {
        } else if (level > maxSignalLevel) {
            mRssi = MAX_RSSI;
            mRssi = MAX_RSSI;
        } else {
        } else {
            float inputRange = MAX_RSSI - MIN_RSSI;
            float inputRange = MAX_RSSI - MIN_RSSI;
            float outputRange = AccessPoint.SIGNAL_LEVELS - 1;
            float outputRange = maxSignalLevel;
            mRssi = (int) (level * inputRange / outputRange + MIN_RSSI);
            mRssi = (int) (level * inputRange / outputRange + MIN_RSSI);
        }
        }
        return this;
        return this;
+10 −7
Original line number Original line Diff line number Diff line
@@ -83,7 +83,6 @@ import java.util.concurrent.CountDownLatch;
@SmallTest
@SmallTest
@RunWith(AndroidJUnit4.class)
@RunWith(AndroidJUnit4.class)
public class AccessPointTest {
public class AccessPointTest {

    private static final String TEST_SSID = "\"test_ssid\"";
    private static final String TEST_SSID = "\"test_ssid\"";
    private static final String ROAMING_SSID = "\"roaming_ssid\"";
    private static final String ROAMING_SSID = "\"roaming_ssid\"";
    private static final String OSU_FRIENDLY_NAME = "osu_friendly_name";
    private static final String OSU_FRIENDLY_NAME = "osu_friendly_name";
@@ -98,6 +97,7 @@ public class AccessPointTest {
            20 * DateUtils.MINUTE_IN_MILLIS;
            20 * DateUtils.MINUTE_IN_MILLIS;


    private Context mContext;
    private Context mContext;
    private int mMaxSignalLevel;
    private WifiInfo mWifiInfo;
    private WifiInfo mWifiInfo;
    @Mock private Context mMockContext;
    @Mock private Context mMockContext;
    @Mock private WifiManager mMockWifiManager;
    @Mock private WifiManager mMockWifiManager;
@@ -128,6 +128,7 @@ public class AccessPointTest {
    public void setUp() {
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        mContext = InstrumentationRegistry.getTargetContext();
        mContext = InstrumentationRegistry.getTargetContext();
        mMaxSignalLevel = mContext.getSystemService(WifiManager.class).getMaxSignalLevel();
        mWifiInfo = new WifiInfo();
        mWifiInfo = new WifiInfo();
        mWifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID));
        mWifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID));
        mWifiInfo.setBSSID(TEST_BSSID);
        mWifiInfo.setBSSID(TEST_BSSID);
@@ -180,7 +181,7 @@ public class AccessPointTest {


    @Test
    @Test
    public void testCompareTo_GivesHighLevelBeforeLowLevel() {
    public void testCompareTo_GivesHighLevelBeforeLowLevel() {
        final int highLevel = AccessPoint.SIGNAL_LEVELS - 1;
        final int highLevel = mMaxSignalLevel;
        final int lowLevel = 1;
        final int lowLevel = 1;
        assertThat(highLevel).isGreaterThan(lowLevel);
        assertThat(highLevel).isGreaterThan(lowLevel);


@@ -226,7 +227,7 @@ public class AccessPointTest {
                .setReachable(true).build();
                .setReachable(true).build();
        AccessPoint saved = new TestAccessPointBuilder(mContext).setSaved(true).build();
        AccessPoint saved = new TestAccessPointBuilder(mContext).setSaved(true).build();
        AccessPoint highLevelAndReachable = new TestAccessPointBuilder(mContext)
        AccessPoint highLevelAndReachable = new TestAccessPointBuilder(mContext)
                .setLevel(AccessPoint.SIGNAL_LEVELS - 1).build();
                .setLevel(mMaxSignalLevel).build();
        AccessPoint firstName = new TestAccessPointBuilder(mContext).setSsid("a").build();
        AccessPoint firstName = new TestAccessPointBuilder(mContext).setSsid("a").build();
        AccessPoint lastname = new TestAccessPointBuilder(mContext).setSsid("z").build();
        AccessPoint lastname = new TestAccessPointBuilder(mContext).setSsid("z").build();


@@ -520,6 +521,8 @@ public class AccessPointTest {
        when(packageManager.getApplicationInfoAsUser(eq(appPackageName), anyInt(), anyInt()))
        when(packageManager.getApplicationInfoAsUser(eq(appPackageName), anyInt(), anyInt()))
                .thenReturn(applicationInfo);
                .thenReturn(applicationInfo);
        when(applicationInfo.loadLabel(packageManager)).thenReturn(appLabel);
        when(applicationInfo.loadLabel(packageManager)).thenReturn(appLabel);
        when(context.getSystemService(Context.WIFI_SERVICE)).thenReturn(mMockWifiManager);
        when(mMockWifiManager.calculateSignalLevel(rssi)).thenReturn(4);


        NetworkInfo networkInfo =
        NetworkInfo networkInfo =
                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
@@ -636,14 +639,14 @@ public class AccessPointTest {
    public void testBuilder_setLevel() {
    public void testBuilder_setLevel() {
        AccessPoint testAp;
        AccessPoint testAp;


        for (int i = 0; i < AccessPoint.SIGNAL_LEVELS; i++) {
        for (int i = 0; i <= mMaxSignalLevel; i++) {
            testAp = new TestAccessPointBuilder(mContext).setLevel(i).build();
            testAp = new TestAccessPointBuilder(mContext).setLevel(i).build();
            assertThat(testAp.getLevel()).isEqualTo(i);
            assertThat(testAp.getLevel()).isEqualTo(i);
        }
        }


        // numbers larger than the max level should be set to max
        // numbers larger than the max level should be set to max
        testAp = new TestAccessPointBuilder(mContext).setLevel(AccessPoint.SIGNAL_LEVELS).build();
        testAp = new TestAccessPointBuilder(mContext).setLevel(mMaxSignalLevel + 1).build();
        assertThat(testAp.getLevel()).isEqualTo(AccessPoint.SIGNAL_LEVELS - 1);
        assertThat(testAp.getLevel()).isEqualTo(mMaxSignalLevel);


        // numbers less than 0 should give level 0
        // numbers less than 0 should give level 0
        testAp = new TestAccessPointBuilder(mContext).setLevel(-100).build();
        testAp = new TestAccessPointBuilder(mContext).setLevel(-100).build();
@@ -653,7 +656,7 @@ public class AccessPointTest {
    @Test
    @Test
    public void testBuilder_settingReachableAfterLevelDoesNotAffectLevel() {
    public void testBuilder_settingReachableAfterLevelDoesNotAffectLevel() {
        int level = 1;
        int level = 1;
        assertThat(level).isLessThan(AccessPoint.SIGNAL_LEVELS - 1);
        assertThat(level).isLessThan(mMaxSignalLevel);


        AccessPoint testAp =
        AccessPoint testAp =
                new TestAccessPointBuilder(mContext).setLevel(level).setReachable(true).build();
                new TestAccessPointBuilder(mContext).setLevel(level).setReachable(true).build();