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

Commit 03a07e0a authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Always evict old scanResults(> 15s) in WifiTracker"

parents b7b399ed 396e52d5
Loading
Loading
Loading
Loading
+7 −8
Original line number Original line Diff line number Diff line
@@ -81,7 +81,7 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
    private static final long DEFAULT_MAX_CACHED_SCORE_AGE_MILLIS = 20 * DateUtils.MINUTE_IN_MILLIS;
    private static final long DEFAULT_MAX_CACHED_SCORE_AGE_MILLIS = 20 * DateUtils.MINUTE_IN_MILLIS;


    /** Maximum age of scan results to hold onto while actively scanning. **/
    /** Maximum age of scan results to hold onto while actively scanning. **/
    private static final long MAX_SCAN_RESULT_AGE_MILLIS = 25000;
    private static final long MAX_SCAN_RESULT_AGE_MILLIS = 15000;


    private static final String TAG = "WifiTracker";
    private static final String TAG = "WifiTracker";
    private static final boolean DBG() {
    private static final boolean DBG() {
@@ -134,8 +134,8 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
    /**
    /**
     * Tracks whether fresh scan results have been received since scanning start.
     * Tracks whether fresh scan results have been received since scanning start.
     *
     *
     * <p>If this variable is false, we will not evict the scan result cache or invoke callbacks
     * <p>If this variable is false, we will not invoke callbacks so that we do not
     * so that we do not update the UI with stale data / clear out existing UI elements prematurely.
     * update the UI with stale data / clear out existing UI elements prematurely.
     */
     */
    private boolean mStaleScanResults = true;
    private boolean mStaleScanResults = true;


@@ -327,7 +327,8 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
     * <p>Intended to only be invoked within {@link #onStart()}.
     * <p>Intended to only be invoked within {@link #onStart()}.
     */
     */
    @MainThread
    @MainThread
    private void forceUpdate() {
    @VisibleForTesting
    void forceUpdate() {
        mLastInfo = mWifiManager.getConnectionInfo();
        mLastInfo = mWifiManager.getConnectionInfo();
        mLastNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork());
        mLastNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork());


@@ -443,10 +444,8 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro
            mScanResultCache.put(newResult.BSSID, newResult);
            mScanResultCache.put(newResult.BSSID, newResult);
        }
        }


        // Don't evict old results if no new scan results
        // Evict old results in all conditions
        if (!mStaleScanResults) {
        evictOldScans();
        evictOldScans();
        }


        ArrayMap<String, List<ScanResult>> scanResultsByApKey = new ArrayMap<>();
        ArrayMap<String, List<ScanResult>> scanResultsByApKey = new ArrayMap<>();
        for (ScanResult result : mScanResultCache.values()) {
        for (ScanResult result : mScanResultCache.values()) {
+31 −1
Original line number Original line Diff line number Diff line
@@ -21,7 +21,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doAnswer;
@@ -104,6 +103,10 @@ public class WifiTrackerTest {
    private static final byte SCORE_2 = 15;
    private static final byte SCORE_2 = 15;
    private static final int BADGE_2 = AccessPoint.Speed.FAST;
    private static final int BADGE_2 = AccessPoint.Speed.FAST;


    private static final String SSID_3 = "ssid3";
    private static final String BSSID_3 = "CC:00:00:00:00:00";
    private static final int RSSI_3 = -40;

    // TODO(b/65594609): Convert mutable Data objects to instance variables / builder pattern
    // TODO(b/65594609): Convert mutable Data objects to instance variables / builder pattern
    private static final int NETWORK_ID_1 = 123;
    private static final int NETWORK_ID_1 = 123;
    private static final int CONNECTED_RSSI = -50;
    private static final int CONNECTED_RSSI = -50;
@@ -255,6 +258,19 @@ public class WifiTrackerTest {
                SystemClock.elapsedRealtime() * 1000 /* microsecond timestamp */);
                SystemClock.elapsedRealtime() * 1000 /* microsecond timestamp */);
    }
    }


    private static ScanResult buildStaleScanResult() {
        return new ScanResult(
                WifiSsid.createFromAsciiEncoded(SSID_3),
                BSSID_3,
                0, // hessid
                0, //anqpDomainId
                null, // osuProviders
                "", // capabilities
                RSSI_3,
                0, // frequency
                0 /* microsecond timestamp */);
    }

    private WifiTracker createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(
    private WifiTracker createTrackerWithImmediateBroadcastsAndInjectInitialScanResults(
                    Intent ... intents)
                    Intent ... intents)
            throws InterruptedException {
            throws InterruptedException {
@@ -896,4 +912,18 @@ public class WifiTrackerTest {
        assertThat(aps.get(0).isReachable()).isTrue();
        assertThat(aps.get(0).isReachable()).isTrue();
        assertThat(aps.get(1).isReachable()).isTrue();
        assertThat(aps.get(1).isReachable()).isTrue();
    }
    }

    @Test
    public void onStart_updateScanResults_evictOldScanResult() {
        when(mockWifiManager.getScanResults()).thenReturn(
                Arrays.asList(buildScanResult1(), buildScanResult2(), buildStaleScanResult()));
        WifiTracker tracker = createMockedWifiTracker();

        tracker.forceUpdate();

        // Only has scanResult1 and scanResult2
        assertThat(tracker.getAccessPoints()).hasSize(2);
        assertThat(tracker.getAccessPoints().get(0).getBssid()).isEqualTo(BSSID_1);
        assertThat(tracker.getAccessPoints().get(1).getBssid()).isEqualTo(BSSID_2);
    }
}
}