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

Commit 407f8da4 authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Fix crash in Wifi QS Panel"

parents b10e33ff 6572eae9
Loading
Loading
Loading
Loading
+25 −10
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ public class WifiTracker {
    public void pauseScanning() {
        if (mScanner != null) {
            mScanner.pause();
            mScanner = null;
        }
    }

@@ -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();
@@ -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);
        }
@@ -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) {
+23 −0
Original line number Diff line number Diff line
@@ -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];