Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +25 −10 Original line number Diff line number Diff line Loading @@ -127,6 +127,7 @@ public class WifiTracker { public void pauseScanning() { if (mScanner != null) { mScanner.pause(); mScanner = null; } } Loading @@ -134,10 +135,10 @@ public class WifiTracker { * Resume scanning for wifi networks after it has been paused. */ public void resumeScanning() { if (mWifiManager.isWifiEnabled()) { if (mScanner == null) { mScanner = new Scanner(); } if (mWifiManager.isWifiEnabled()) { mScanner.resume(); } updateAccessPoints(); Loading Loading @@ -335,12 +336,18 @@ public class WifiTracker { private void updateWifiState(int state) { if (state == WifiManager.WIFI_STATE_ENABLED) { if (mScanner != null) { // We only need to resume if mScanner isn't null because // that means we want to be scanning. mScanner.resume(); } } else { mLastInfo = null; mLastNetworkInfo = null; if (mScanner != null) { mScanner.pause(); } } if (mListener != null) { mListener.onWifiStateChanged(state); } Loading Loading @@ -382,26 +389,34 @@ public class WifiTracker { @VisibleForTesting class Scanner extends Handler { private static final int MSG_SCAN = 0; private int mRetry = 0; void resume() { if (!hasMessages(0)) { sendEmptyMessage(0); if (!hasMessages(MSG_SCAN)) { sendEmptyMessage(MSG_SCAN); } } void forceScan() { removeMessages(0); sendEmptyMessage(0); removeMessages(MSG_SCAN); sendEmptyMessage(MSG_SCAN); } void pause() { mRetry = 0; removeMessages(0); removeMessages(MSG_SCAN); } @VisibleForTesting boolean isScanning() { return hasMessages(MSG_SCAN); } @Override public void handleMessage(Message message) { if (message.what != MSG_SCAN) return; if (mWifiManager.startScan()) { mRetry = 0; } else if (++mRetry >= 3) { Loading packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,29 @@ public class WifiTrackerTest extends BaseTest { assertTrue("Connected to wifi", accessPoints.get(0).isActive()); } public void testEnableResumeScanning() { mWifiTracker.mScanner = null; Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); // Make sure disable/enable cycle works with no scanner (no crashing). i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); mWifiTracker.mReceiver.onReceive(mContext, i); i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED); mWifiTracker.mReceiver.onReceive(mContext, i); Mockito.when(mWifiManager.isWifiEnabled()).thenReturn(false); i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); mWifiTracker.mReceiver.onReceive(mContext, i); // Now enable scanning while wifi is off, it shouldn't start. mWifiTracker.resumeScanning(); assertFalse(mWifiTracker.mScanner.isScanning()); // Turn on wifi and make sure scanning starts. i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED); mWifiTracker.mReceiver.onReceive(mContext, i); assertTrue(mWifiTracker.mScanner.isScanning()); } private String[] generateTestNetworks(List<WifiConfiguration> wifiConfigs, List<ScanResult> scanResults, boolean connectedIsEphemeral) { String[] expectedSsids = new String[NUM_NETWORKS]; Loading Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +25 −10 Original line number Diff line number Diff line Loading @@ -127,6 +127,7 @@ public class WifiTracker { public void pauseScanning() { if (mScanner != null) { mScanner.pause(); mScanner = null; } } Loading @@ -134,10 +135,10 @@ public class WifiTracker { * Resume scanning for wifi networks after it has been paused. */ public void resumeScanning() { if (mWifiManager.isWifiEnabled()) { if (mScanner == null) { mScanner = new Scanner(); } if (mWifiManager.isWifiEnabled()) { mScanner.resume(); } updateAccessPoints(); Loading Loading @@ -335,12 +336,18 @@ public class WifiTracker { private void updateWifiState(int state) { if (state == WifiManager.WIFI_STATE_ENABLED) { if (mScanner != null) { // We only need to resume if mScanner isn't null because // that means we want to be scanning. mScanner.resume(); } } else { mLastInfo = null; mLastNetworkInfo = null; if (mScanner != null) { mScanner.pause(); } } if (mListener != null) { mListener.onWifiStateChanged(state); } Loading Loading @@ -382,26 +389,34 @@ public class WifiTracker { @VisibleForTesting class Scanner extends Handler { private static final int MSG_SCAN = 0; private int mRetry = 0; void resume() { if (!hasMessages(0)) { sendEmptyMessage(0); if (!hasMessages(MSG_SCAN)) { sendEmptyMessage(MSG_SCAN); } } void forceScan() { removeMessages(0); sendEmptyMessage(0); removeMessages(MSG_SCAN); sendEmptyMessage(MSG_SCAN); } void pause() { mRetry = 0; removeMessages(0); removeMessages(MSG_SCAN); } @VisibleForTesting boolean isScanning() { return hasMessages(MSG_SCAN); } @Override public void handleMessage(Message message) { if (message.what != MSG_SCAN) return; if (mWifiManager.startScan()) { mRetry = 0; } else if (++mRetry >= 3) { Loading
packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java +23 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,29 @@ public class WifiTrackerTest extends BaseTest { assertTrue("Connected to wifi", accessPoints.get(0).isActive()); } public void testEnableResumeScanning() { mWifiTracker.mScanner = null; Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); // Make sure disable/enable cycle works with no scanner (no crashing). i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); mWifiTracker.mReceiver.onReceive(mContext, i); i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED); mWifiTracker.mReceiver.onReceive(mContext, i); Mockito.when(mWifiManager.isWifiEnabled()).thenReturn(false); i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); mWifiTracker.mReceiver.onReceive(mContext, i); // Now enable scanning while wifi is off, it shouldn't start. mWifiTracker.resumeScanning(); assertFalse(mWifiTracker.mScanner.isScanning()); // Turn on wifi and make sure scanning starts. i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED); mWifiTracker.mReceiver.onReceive(mContext, i); assertTrue(mWifiTracker.mScanner.isScanning()); } private String[] generateTestNetworks(List<WifiConfiguration> wifiConfigs, List<ScanResult> scanResults, boolean connectedIsEphemeral) { String[] expectedSsids = new String[NUM_NETWORKS]; Loading