Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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()) { Loading packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +31 −1 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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); } } } Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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()) { Loading
packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +31 −1 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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); } } }