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

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

Merge "Fix crash from WPS" into mnc-dev

parents 5b32fa78 2b51cc30
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -826,6 +826,9 @@ public class AccessPoint implements Comparable<AccessPoint> {
    }

    static String removeDoubleQuotes(String string) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        int length = string.length();
        if ((length > 1) && (string.charAt(0) == '"')
                && (string.charAt(length - 1) == '"')) {
+9 −5
Original line number Diff line number Diff line
@@ -95,20 +95,20 @@ public class WifiTracker {
    public WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper,
            boolean includeSaved, boolean includeScans, boolean includePasspoints) {
        this(context, wifiListener, workerLooper, includeSaved, includeScans, includePasspoints,
                (WifiManager) context.getSystemService(Context.WIFI_SERVICE));
                (WifiManager) context.getSystemService(Context.WIFI_SERVICE), Looper.myLooper());
    }

    @VisibleForTesting
    WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper,
            boolean includeSaved, boolean includeScans, boolean includePasspoints,
            WifiManager wifiManager) {
            WifiManager wifiManager, Looper currentLooper) {
        if (!includeSaved && !includeScans) {
            throw new IllegalArgumentException("Must include either saved or scans");
        }
        mContext = context;
        mMainHandler = new MainHandler();
        mMainHandler = new MainHandler(currentLooper);
        mWorkHandler = new WorkHandler(
                workerLooper != null ? workerLooper : Looper.myLooper());
                workerLooper != null ? workerLooper : currentLooper);
        mWifiManager = wifiManager;
        mIncludeSaved = includeSaved;
        mIncludeScans = includeScans;
@@ -439,6 +439,10 @@ public class WifiTracker {
        private static final int MSG_WIFI_STATE_CHANGED = 1;
        private static final int MSG_ACCESS_POINT_CHANGED = 2;

        public MainHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {
            if (mListener == null) {
@@ -481,7 +485,7 @@ public class WifiTracker {

    @VisibleForTesting
    class Scanner extends Handler {
        private static final int MSG_SCAN = 0;
        static final int MSG_SCAN = 0;

        private int mRetry = 0;

+51 −13
Original line number Diff line number Diff line
@@ -23,9 +23,12 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiSsid;
import android.os.HandlerThread;
import android.os.Looper;
import android.util.Log;

import com.android.settingslib.BaseTest;
import com.android.settingslib.wifi.WifiTracker.Scanner;
import com.android.settingslib.wifi.WifiTracker.WifiListener;

import org.mockito.ArgumentCaptor;
@@ -54,13 +57,25 @@ public class WifiTrackerTest extends BaseTest {

    private WifiTracker mWifiTracker;

    private HandlerThread mWorkerThread;
    private Looper mLooper;
    private HandlerThread mMainThread;
    private Looper mMainLooper;

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        mWifiManager = Mockito.mock(WifiManager.class);
        mWifiListener = Mockito.mock(WifiListener.class);
        mWifiTracker = new WifiTracker(mContext, mWifiListener, true, true, mWifiManager);
        mWorkerThread = new HandlerThread("TestHandlerThread");
        mWorkerThread.start();
        mLooper = mWorkerThread.getLooper();
        mMainThread = new HandlerThread("TestHandlerThread");
        mMainThread.start();
        mMainLooper = mMainThread.getLooper();
        mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, true, true,
                mWifiManager, mMainLooper);
        mWifiTracker.mScanner = mWifiTracker.new Scanner();
        Mockito.when(mWifiManager.isWifiEnabled()).thenReturn(true);
    }
@@ -76,13 +91,14 @@ public class WifiTrackerTest extends BaseTest {
    }

    public void testAccessPointsCallback() {
        sendScanResultsAvailable();
        sendScanResultsAndProcess(false);

        Mockito.verify(mWifiListener, Mockito.atLeastOnce()).onAccessPointsChanged();
    }

    public void testConnectedCallback() {
        sendConnected();
        waitForThreads();

        Mockito.verify(mWifiListener, Mockito.atLeastOnce()).onConnectedChanged();
        assertEquals(true, mWifiTracker.isConnected());
@@ -94,6 +110,7 @@ public class WifiTrackerTest extends BaseTest {
        Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION);
        i.putExtra(WifiManager.EXTRA_WIFI_STATE, TEST_WIFI_STATE);
        mWifiTracker.mReceiver.onReceive(mContext, i);
        waitForThreads();

        ArgumentCaptor<Integer> wifiState = ArgumentCaptor.forClass(Integer.class);
        Mockito.verify(mWifiListener, Mockito.atLeastOnce())
@@ -106,7 +123,7 @@ public class WifiTrackerTest extends BaseTest {
        // Make scans be successful.
        Mockito.when(mWifiManager.startScan()).thenReturn(true);

        mWifiTracker.mScanner.handleMessage(null);
        mWifiTracker.mScanner.handleMessage(mWifiTracker.mScanner.obtainMessage(Scanner.MSG_SCAN));
        Mockito.verify(mWifiManager, Mockito.atLeastOnce()).startScan();
    }

@@ -121,7 +138,7 @@ public class WifiTrackerTest extends BaseTest {
        // Send all of the configs and scan results to the tracker.
        Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs);
        Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults);
        sendScanResultsAvailable();
        sendScanResultsAndProcess(false);

        List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
        assertEquals("Expected number of results", NUM_NETWORKS, accessPoints.size());
@@ -131,7 +148,8 @@ public class WifiTrackerTest extends BaseTest {
    }

    public void testSavedOnly() {
        mWifiTracker = new WifiTracker(mContext, mWifiListener, true, false, mWifiManager);
        mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, true, false, true,
                mWifiManager, mMainLooper);
        mWifiTracker.mScanner = mWifiTracker.new Scanner();

        List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>();
@@ -144,7 +162,7 @@ public class WifiTrackerTest extends BaseTest {
        // Send all of the configs and scan results to the tracker.
        Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs);
        Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults);
        sendScanResultsAvailable();
        sendScanResultsAndProcess(false);

        List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
        // Only expect the first two to come back in the results.
@@ -154,7 +172,8 @@ public class WifiTrackerTest extends BaseTest {
    }

    public void testAvailableOnly() {
        mWifiTracker = new WifiTracker(mContext, mWifiListener, false, true, mWifiManager);
        mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true,
                mWifiManager, mMainLooper);
        mWifiTracker.mScanner = mWifiTracker.new Scanner();

        List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>();
@@ -167,7 +186,7 @@ public class WifiTrackerTest extends BaseTest {
        // Send all of the configs and scan results to the tracker.
        Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs);
        Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults);
        sendScanResultsAvailable();
        sendScanResultsAndProcess(false);

        // Expect the last one (sorted order) to be left off since its only saved.
        List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
@@ -178,12 +197,13 @@ public class WifiTrackerTest extends BaseTest {
    }

    public void testNonEphemeralConnected() {
        mWifiTracker = new WifiTracker(mContext, mWifiListener, false, true, mWifiManager);
        mWifiTracker = new WifiTracker(mContext, mWifiListener, mLooper, false, true, true,
                mWifiManager, mMainLooper);
        mWifiTracker.mScanner = mWifiTracker.new Scanner();

        List<WifiConfiguration> wifiConfigs = new ArrayList<WifiConfiguration>();
        List<ScanResult> scanResults = new ArrayList<ScanResult>();
        String[] expectedSsids = generateTestNetworks(wifiConfigs, scanResults, false);
        generateTestNetworks(wifiConfigs, scanResults, false);

        // Tell WifiTracker we are connected now.
        sendConnected();
@@ -191,9 +211,8 @@ public class WifiTrackerTest extends BaseTest {
        // Send all of the configs and scan results to the tracker.
        Mockito.when(mWifiManager.getConfiguredNetworks()).thenReturn(wifiConfigs);
        Mockito.when(mWifiManager.getScanResults()).thenReturn(scanResults);
        sendScanResultsAvailable();
        // Do this twice to catch a bug that was happening in the caching, making things ephemeral.
        sendScanResultsAvailable();
        sendScanResultsAndProcess(true);

        List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
        assertEquals("Expected number of results", NUM_NETWORKS - 1, accessPoints.size());
@@ -299,9 +318,28 @@ public class WifiTrackerTest extends BaseTest {
        mWifiTracker.mReceiver.onReceive(mContext, intent);
    }

    private void sendScanResultsAvailable() {
    private void sendScanResultsAndProcess(boolean sendTwice) {
        Intent i = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        mWifiTracker.mReceiver.onReceive(mContext, i);
        if (sendTwice) {
            mWifiTracker.mReceiver.onReceive(mContext, i);
        }
        waitForThreads();
    }

    private void waitForThreads() {
        // Run all processing.
        mWorkerThread.quitSafely();
        try {
            mWorkerThread.join();
        } catch (InterruptedException e) {
        }
        // Send all callbacks.
        mMainThread.quitSafely();
        try {
            mMainThread.join();
        } catch (InterruptedException e) {
        }
    }

}