Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +7 −17 Original line number Diff line number Diff line Loading @@ -41,7 +41,6 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.provider.Settings; import android.support.annotation.WorkerThread; import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; Loading Loading @@ -211,7 +210,7 @@ public class WifiTracker { mNetworkScoreManager = networkScoreManager; mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mWorkHandler) { mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mMainHandler) { @Override public void networkCacheUpdated(List<ScoredNetwork> networks) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Loading Loading @@ -282,12 +281,7 @@ public class WifiTracker { * then forceUpdate() must be called to populate getAccessPoints(). */ public void startTracking() { mWorkHandler.post(new Runnable() { @Override public void run() { registerScoreCache(); } }); mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.NETWORK_SCORING_UI_ENABLED), Loading @@ -305,7 +299,6 @@ public class WifiTracker { } } @WorkerThread private void registerScoreCache() { mNetworkScoreManager.registerNetworkScoreCache( NetworkKey.TYPE_WIFI, Loading Loading @@ -341,20 +334,17 @@ public class WifiTracker { } pauseScanning(); mWorkHandler.post(new Runnable() { @Override public void run() { unregisterAndClearScoreCache(); } }); mContext.getContentResolver().unregisterContentObserver(mObserver); } @WorkerThread private void unregisterAndClearScoreCache() { mRequestedScores.clear(); mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mScoreCache); mScoreCache.clearScores(); // Clear the scores on the work handler to avoid concurrent modification exceptions mWorkHandler.post(() -> mRequestedScores.clear()); } /** Loading packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +33 −9 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ import java.util.concurrent.TimeUnit; public class WifiTrackerTest { private static final String TAG = "WifiTrackerTest"; private static final int LATCH_TIMEOUT = 2000; private static final int LATCH_TIMEOUT = 4000; private static final String SSID_1 = "ssid1"; private static final String BSSID_1 = "00:00:00:00:00:00"; Loading Loading @@ -226,7 +226,7 @@ public class WifiTrackerTest { mAccessPointsChangedLatch = new CountDownLatch(1); sendScanResultsAndProcess(tracker); mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue(mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); return tracker; } Loading @@ -242,7 +242,8 @@ public class WifiTrackerTest { true, mockWifiManager, mockConnectivityManager, mockNetworkScoreManager, mMainLooper mockNetworkScoreManager, mMainLooper ); return tracker; Loading @@ -257,7 +258,7 @@ public class WifiTrackerTest { latch.countDown(); } }); latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); } private void sendScanResultsAndProcess(WifiTracker tracker) throws InterruptedException { Loading @@ -265,7 +266,8 @@ public class WifiTrackerTest { Intent i = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); tracker.mReceiver.onReceive(mContext, i); mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); } private void updateScores() { Loading Loading @@ -348,7 +350,7 @@ public class WifiTrackerTest { // Test unregister tracker.stopTracking(); latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); verify(mockNetworkScoreManager) .unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, scoreCache); } Loading @@ -359,12 +361,15 @@ public class WifiTrackerTest { WifiTracker tracker = createTrackerAndInjectInitialScanResults(); tracker.stopTracking(); android.util.Log.d("WifiTrackerTest", "Clearing previously captured requested keys"); mRequestedKeys.clear(); mRequestScoresLatch = new CountDownLatch(2); mRequestScoresLatch = new CountDownLatch(1); startTracking(tracker); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); android.util.Log.d("WifiTrackerTest", "requested keys: " + mRequestedKeys); assertTrue(mRequestedKeys.contains(NETWORK_KEY_1)); assertTrue(mRequestedKeys.contains(NETWORK_KEY_2)); } Loading @@ -379,6 +384,8 @@ public class WifiTrackerTest { } private void updateScoresAndWaitForAccessPointsChangedCallback() throws InterruptedException { // Updating scores can happen together or one after the other, so the latch countdown is set // to 2. mAccessPointsChangedLatch = new CountDownLatch(2); updateScores(); mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); Loading Loading @@ -462,6 +469,8 @@ public class WifiTrackerTest { @Test public void scoresShouldBeRequestedForNewScanResultOnly() throws InterruptedException { // Scores can be requested together or serially depending on how the scan results are // processed. mRequestScoresLatch = new CountDownLatch(2); WifiTracker tracker = createTrackerAndInjectInitialScanResults(); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); Loading @@ -484,9 +493,24 @@ public class WifiTrackerTest { mRequestScoresLatch = new CountDownLatch(1); sendScanResultsAndProcess(tracker); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue(mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); assertEquals(1, mRequestedKeys.size()); assertTrue(mRequestedKeys.contains(new NetworkKey(new WifiKey('"' + ssid + '"', bssid)))); } @Test public void scoreCacheAndListenerShouldBeUnregisteredWhenStopTrackingIsCalled() throws Exception { WifiTracker tracker = createTrackerAndInjectInitialScanResults(); WifiNetworkScoreCache cache = mScoreCacheCaptor.getValue(); tracker.stopTracking(); verify(mockNetworkScoreManager).unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, cache); // Verify listener is unregistered so updating a score does not throw an error by posting // a message to the dead work handler mWorkerThread.quit(); updateScores(); } } Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +7 −17 Original line number Diff line number Diff line Loading @@ -41,7 +41,6 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.provider.Settings; import android.support.annotation.WorkerThread; import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; Loading Loading @@ -211,7 +210,7 @@ public class WifiTracker { mNetworkScoreManager = networkScoreManager; mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mWorkHandler) { mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mMainHandler) { @Override public void networkCacheUpdated(List<ScoredNetwork> networks) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Loading Loading @@ -282,12 +281,7 @@ public class WifiTracker { * then forceUpdate() must be called to populate getAccessPoints(). */ public void startTracking() { mWorkHandler.post(new Runnable() { @Override public void run() { registerScoreCache(); } }); mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.NETWORK_SCORING_UI_ENABLED), Loading @@ -305,7 +299,6 @@ public class WifiTracker { } } @WorkerThread private void registerScoreCache() { mNetworkScoreManager.registerNetworkScoreCache( NetworkKey.TYPE_WIFI, Loading Loading @@ -341,20 +334,17 @@ public class WifiTracker { } pauseScanning(); mWorkHandler.post(new Runnable() { @Override public void run() { unregisterAndClearScoreCache(); } }); mContext.getContentResolver().unregisterContentObserver(mObserver); } @WorkerThread private void unregisterAndClearScoreCache() { mRequestedScores.clear(); mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mScoreCache); mScoreCache.clearScores(); // Clear the scores on the work handler to avoid concurrent modification exceptions mWorkHandler.post(() -> mRequestedScores.clear()); } /** Loading
packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +33 −9 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ import java.util.concurrent.TimeUnit; public class WifiTrackerTest { private static final String TAG = "WifiTrackerTest"; private static final int LATCH_TIMEOUT = 2000; private static final int LATCH_TIMEOUT = 4000; private static final String SSID_1 = "ssid1"; private static final String BSSID_1 = "00:00:00:00:00:00"; Loading Loading @@ -226,7 +226,7 @@ public class WifiTrackerTest { mAccessPointsChangedLatch = new CountDownLatch(1); sendScanResultsAndProcess(tracker); mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue(mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); return tracker; } Loading @@ -242,7 +242,8 @@ public class WifiTrackerTest { true, mockWifiManager, mockConnectivityManager, mockNetworkScoreManager, mMainLooper mockNetworkScoreManager, mMainLooper ); return tracker; Loading @@ -257,7 +258,7 @@ public class WifiTrackerTest { latch.countDown(); } }); latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); } private void sendScanResultsAndProcess(WifiTracker tracker) throws InterruptedException { Loading @@ -265,7 +266,8 @@ public class WifiTrackerTest { Intent i = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); tracker.mReceiver.onReceive(mContext, i); mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); } private void updateScores() { Loading Loading @@ -348,7 +350,7 @@ public class WifiTrackerTest { // Test unregister tracker.stopTracking(); latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); verify(mockNetworkScoreManager) .unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, scoreCache); } Loading @@ -359,12 +361,15 @@ public class WifiTrackerTest { WifiTracker tracker = createTrackerAndInjectInitialScanResults(); tracker.stopTracking(); android.util.Log.d("WifiTrackerTest", "Clearing previously captured requested keys"); mRequestedKeys.clear(); mRequestScoresLatch = new CountDownLatch(2); mRequestScoresLatch = new CountDownLatch(1); startTracking(tracker); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue("Latch timed out", mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); android.util.Log.d("WifiTrackerTest", "requested keys: " + mRequestedKeys); assertTrue(mRequestedKeys.contains(NETWORK_KEY_1)); assertTrue(mRequestedKeys.contains(NETWORK_KEY_2)); } Loading @@ -379,6 +384,8 @@ public class WifiTrackerTest { } private void updateScoresAndWaitForAccessPointsChangedCallback() throws InterruptedException { // Updating scores can happen together or one after the other, so the latch countdown is set // to 2. mAccessPointsChangedLatch = new CountDownLatch(2); updateScores(); mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); Loading Loading @@ -462,6 +469,8 @@ public class WifiTrackerTest { @Test public void scoresShouldBeRequestedForNewScanResultOnly() throws InterruptedException { // Scores can be requested together or serially depending on how the scan results are // processed. mRequestScoresLatch = new CountDownLatch(2); WifiTracker tracker = createTrackerAndInjectInitialScanResults(); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); Loading @@ -484,9 +493,24 @@ public class WifiTrackerTest { mRequestScoresLatch = new CountDownLatch(1); sendScanResultsAndProcess(tracker); mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS); assertTrue(mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); assertEquals(1, mRequestedKeys.size()); assertTrue(mRequestedKeys.contains(new NetworkKey(new WifiKey('"' + ssid + '"', bssid)))); } @Test public void scoreCacheAndListenerShouldBeUnregisteredWhenStopTrackingIsCalled() throws Exception { WifiTracker tracker = createTrackerAndInjectInitialScanResults(); WifiNetworkScoreCache cache = mScoreCacheCaptor.getValue(); tracker.stopTracking(); verify(mockNetworkScoreManager).unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, cache); // Verify listener is unregistered so updating a score does not throw an error by posting // a message to the dead work handler mWorkerThread.quit(); updateScores(); } }