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

Commit 74657df2 authored by Myles Watson's avatar Myles Watson Committed by Gerrit Code Review
Browse files

Merge "fix BLE scan could be started even screen is off" into main

parents 3374377f 7f707ac3
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -488,15 +488,31 @@ public class ScanManager {
        }

        private boolean requiresScreenOn(ScanClient client) {
            boolean isFiltered = (client.filters != null) && !client.filters.isEmpty();
            boolean isFiltered = isFilteredScan(client);
            return !mScanNative.isOpportunisticScanClient(client) && !isFiltered;
        }

        private boolean requiresLocationOn(ScanClient client) {
            boolean isFiltered = (client.filters != null) && !client.filters.isEmpty();
            boolean isFiltered = isFilteredScan(client);
            return !client.hasDisavowedLocation && !isFiltered;
        }

        private boolean isFilteredScan(ScanClient client) {
            if ((client.filters == null) || client.filters.isEmpty()) {
                return false;
            }

            boolean atLeastOneValidFilter = false;
            for (ScanFilter filter : client.filters) {
                // A valid filter need at least one field not empty
                if (!filter.isAllFieldsEmpty()) {
                    atLeastOneValidFilter = true;
                    break;
                }
            }
            return atLeastOneValidFilter;
        }

        @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)
        void handleStopScan(ScanClient client) {
            if (client == null) {
+56 −6
Original line number Diff line number Diff line
@@ -189,9 +189,14 @@ public class ScanManagerTest {
        TestUtils.waitForLooperToBeIdle(mHandler.getLooper());
    }

    private ScanClient createScanClient(int id, boolean isFiltered, int scanMode,
            boolean isBatch, boolean isAutoBatch) {
        List<ScanFilter> scanFilterList = createScanFilterList(isFiltered);
    private ScanClient createScanClient(
            int id,
            boolean isFiltered,
            boolean isEmptyFilter,
            int scanMode,
            boolean isBatch,
            boolean isAutoBatch) {
        List<ScanFilter> scanFilterList = createScanFilterList(isFiltered, isEmptyFilter);
        ScanSettings scanSettings = createScanSettings(scanMode, isBatch, isAutoBatch);

        ScanClient client = new ScanClient(id, scanSettings, scanFilterList);
@@ -201,15 +206,30 @@ public class ScanManagerTest {
    }

    private ScanClient createScanClient(int id, boolean isFiltered, int scanMode) {
        return createScanClient(id, isFiltered, scanMode, false, false);
        return createScanClient(id, isFiltered, false, scanMode, false, false);
    }

    private List<ScanFilter> createScanFilterList(boolean isFiltered) {
    private ScanClient createScanClient(
            int id, boolean isFiltered, int scanMode,
            boolean isBatch, boolean isAutoBatch) {
        return createScanClient(id, isFiltered, false, scanMode, isBatch, isAutoBatch);
    }

    private ScanClient createScanClient(
            int id, boolean isFiltered, boolean isEmptyFilter, int scanMode) {
        return createScanClient(id, isFiltered, isEmptyFilter, scanMode, false, false);
    }

    private List<ScanFilter> createScanFilterList(boolean isFiltered, boolean isEmptyFilter) {
        List<ScanFilter> scanFilterList = null;
        if (isFiltered) {
            scanFilterList = new ArrayList<>();
            if (isEmptyFilter) {
                scanFilterList.add(new ScanFilter.Builder().build());
            } else {
                scanFilterList.add(new ScanFilter.Builder().setDeviceName("TestName").build());
            }
        }
        return scanFilterList;
    }

@@ -328,6 +348,36 @@ public class ScanManagerTest {
        }
    }

    @Test
    public void testScreenOffStartEmptyFilterScan() {
        // Set filtered scan flag
        final boolean isFiltered = true;
        final boolean isEmptyFilter = true;
        // Set scan mode map {original scan mode (ScanMode) : expected scan mode (expectedScanMode)}
        SparseIntArray scanModeMap = new SparseIntArray();
        scanModeMap.put(SCAN_MODE_LOW_POWER, SCAN_MODE_LOW_POWER);
        scanModeMap.put(SCAN_MODE_BALANCED, SCAN_MODE_BALANCED);
        scanModeMap.put(SCAN_MODE_LOW_LATENCY, SCAN_MODE_LOW_LATENCY);
        scanModeMap.put(SCAN_MODE_AMBIENT_DISCOVERY, SCAN_MODE_AMBIENT_DISCOVERY);

        for (int i = 0; i < scanModeMap.size(); i++) {
            int ScanMode = scanModeMap.keyAt(i);
            int expectedScanMode = scanModeMap.get(ScanMode);
            Log.d(TAG, "ScanMode: " + String.valueOf(ScanMode)
                    + " expectedScanMode: " + String.valueOf(expectedScanMode));

            // Turn off screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(false));
            // Create scan client
            ScanClient client = createScanClient(i, isFiltered, isEmptyFilter, ScanMode);
            // Start scan
            sendMessageWaitForProcessed(createStartStopScanMessage(true, client));
            assertThat(mScanManager.getRegularScanQueue().contains(client)).isFalse();
            assertThat(mScanManager.getSuspendedScanQueue().contains(client)).isTrue();
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
        }
    }

    @Test
    public void testScreenOnStartUnfilteredScan() {
        // Set filtered scan flag