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

Commit a7825694 authored by Sundeep Ghuman's avatar Sundeep Ghuman
Browse files

Always use SSID average for SpeedLabel.

When showing the SpeedLabel for the connected network, continue to use
the SSID based average rather than switching to the curve for the known
AP. This addresses changes in SpeedLabel from when the user selects a
network vs when it appears in the connected section.

Bug: 63073866
Test: runtest --path
frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java

Change-Id: I06edc1ca4b1b5c8e8615f48c000544ea22a6bbbd
parent 61492c85
Loading
Loading
Loading
Loading
+4 −17
Original line number Diff line number Diff line
@@ -496,23 +496,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
        int oldSpeed = mSpeed;
        mSpeed = generateAverageSpeedForSsid();

        // set speed to the connected ScanResult if the AccessPoint is the active network
        if (isActive() && mInfo != null) {
            TimestampedScoredNetwork timedScore = mScoredNetworkCache.get(mInfo.getBSSID());
            if (timedScore != null) {
                if (Log.isLoggable(TAG, Log.DEBUG)) {
                    Log.d(TAG, "Set score using specific access point curve for connected AP: "
                            + getSsidStr());
                }
                // TODO(b/63073866): Map using getLevel rather than specific rssi value so score
                // doesn't change without a visible wifi bar change.
                int speed = timedScore.getScore().calculateBadge(mInfo.getRssi());
                if (speed != Speed.NONE) {
                    mSpeed = speed;
                }
            }
        }

        boolean changed = oldSpeed != mSpeed;
        if(WifiTracker.sVerboseLogging && changed) {
            Log.i(TAG, String.format("%s: Set speed to %d", ssid, mSpeed));
@@ -531,6 +514,10 @@ public class AccessPoint implements Comparable<AccessPoint> {
                    getSsidStr(), mScoredNetworkCache));
        }

        // TODO(b/63073866): If flickering issues persist, consider mapping using getLevel rather
        // than specific rssi value so score doesn't change without a visible wifi bar change. This
        // issue is likely to be more evident for the active AP whose RSSI value is not half-lifed.

        int count = 0;
        int totalSpeed = 0;
        for (TimestampedScoredNetwork timedScore : mScoredNetworkCache.values()) {
+1 −51
Original line number Diff line number Diff line
@@ -416,56 +416,6 @@ public class AccessPointTest {
                .isEqualTo(mContext.getString(R.string.speed_label_slow));
    }

    @Test
    public void testSpeedLabel_isDerivedFromConnectedBssidWhenScoreAvailable() {
        int rssi = -55;
        String bssid = "00:00:00:00:00:00";
        int networkId = 123;

        WifiInfo info = new WifiInfo();
        info.setRssi(rssi);
        info.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID));
        info.setBSSID(bssid);
        info.setNetworkId(networkId);

        ArrayList<ScanResult> scanResults = new ArrayList<>();
        ScanResult scanResultUnconnected = createScanResult(TEST_SSID, "11:11:11:11:11:11", rssi);
        scanResults.add(scanResultUnconnected);

        ScanResult scanResultConnected = createScanResult(TEST_SSID, bssid, rssi);
        scanResults.add(scanResultConnected);

        AccessPoint ap =
                new TestAccessPointBuilder(mContext)
                        .setActive(true)
                        .setNetworkId(networkId)
                        .setSsid(TEST_SSID)
                        .setScanResultCache(scanResults)
                        .setWifiInfo(info)
                        .build();

        when(mockWifiNetworkScoreCache.getScoredNetwork(scanResultUnconnected))
                .thenReturn(buildScoredNetworkWithMockBadgeCurve());
        when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) Speed.SLOW);

        int connectedSpeed = Speed.VERY_FAST;
        RssiCurve connectedBadgeCurve = mock(RssiCurve.class);
        Bundle attr1 = new Bundle();
        attr1.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, connectedBadgeCurve);
        ScoredNetwork connectedScore = new ScoredNetwork(
                NetworkKey.createFromScanResult(scanResultConnected),
                connectedBadgeCurve,
                false /* meteredHint */,
                attr1);
        when(mockWifiNetworkScoreCache.getScoredNetwork(scanResultConnected))
                .thenReturn(connectedScore);
        when(connectedBadgeCurve.lookupScore(anyInt())).thenReturn((byte) connectedSpeed);

        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);

        assertThat(ap.getSpeed()).isEqualTo(connectedSpeed);
    }

    @Test
    public void testSummaryString_showsSpeedLabel() {
        AccessPoint ap = createAccessPointWithScanResultCache();
@@ -940,7 +890,7 @@ public class AccessPointTest {
    }

    @Test
    public void testSpeedLabelUsesFallbackScoreWhenConnectedAccessPointScoreUnavailable() {
    public void testSpeedLabelFallbackScoreIgnoresNullCurves() {
        int rssi = -55;
        String bssid = "00:00:00:00:00:00";
        int networkId = 123;