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

Commit 0859b764 authored by Irfan Sheriff's avatar Irfan Sheriff
Browse files

Make wifi scan async. (don't auto-merge)

When an entity (NLP for example) acquires
a WifiLock and initiates a scan, scan can
get blocked until driver starts.

scan returns no useful info, scan results
are broadcast when obtained.

Bug: 2964633
Change-Id: Iaefc32bb6b82f0718285a18ac600e6bbbb096e77
parent 173ea091
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@ public class WifiService extends IWifiManager.Stub {
    private static final int MESSAGE_STOP_ACCESS_POINT  = 7;
    private static final int MESSAGE_SET_CHANNELS       = 8;
    private static final int MESSAGE_ENABLE_NETWORKS    = 9;
    private static final int MESSAGE_START_SCAN         = 10;


    private final  WifiHandler mWifiHandler;
@@ -385,23 +386,12 @@ public class WifiService extends IWifiManager.Stub {

    /**
     * see {@link android.net.wifi.WifiManager#startScan()}
     * @return {@code true} if the operation succeeds
     */
    public boolean startScan(boolean forceActive) {
    public void startScan(boolean forceActive) {
        enforceChangePermission();
        if (mWifiHandler == null) return;

        switch (mWifiStateTracker.getSupplicantState()) {
            case DISCONNECTED:
            case INACTIVE:
            case SCANNING:
            case DORMANT:
                break;
            default:
                mWifiStateTracker.setScanResultHandling(
                        WifiStateTracker.SUPPL_SCAN_HANDLING_LIST_ONLY);
                break;
        }
        return mWifiStateTracker.scan(forceActive);
        Message.obtain(mWifiHandler, MESSAGE_START_SCAN, forceActive ? 1 : 0, 0).sendToTarget();
    }

    /**
@@ -2001,6 +1991,21 @@ public class WifiService extends IWifiManager.Stub {
                    mWifiStateTracker.enableAllNetworks(getConfiguredNetworks());
                    break;

                case MESSAGE_START_SCAN:
                    boolean forceActive = (msg.arg1 == 1);
                    switch (mWifiStateTracker.getSupplicantState()) {
                        case DISCONNECTED:
                        case INACTIVE:
                        case SCANNING:
                        case DORMANT:
                            break;
                        default:
                            mWifiStateTracker.setScanResultHandling(
                                    WifiStateTracker.SUPPL_SCAN_HANDLING_LIST_ONLY);
                            break;
                    }
                    mWifiStateTracker.scan(forceActive);
                    break;
            }
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ interface IWifiManager

    boolean pingSupplicant();

    boolean startScan(boolean forceActive);
    void startScan(boolean forceActive);

    List<ScanResult> getScanResults();

+4 −2
Original line number Diff line number Diff line
@@ -570,7 +570,8 @@ public class WifiManager {
     */
    public boolean startScan() {
        try {
            return mService.startScan(false);
            mService.startScan(false);
            return true;
        } catch (RemoteException e) {
            return false;
        }
@@ -588,7 +589,8 @@ public class WifiManager {
     */
    public boolean startScanActive() {
        try {
            return mService.startScan(true);
            mService.startScan(true);
            return true;
        } catch (RemoteException e) {
            return false;
        }