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

Commit cae0a6c8 authored by William Escande's avatar William Escande Committed by Gerrit Code Review
Browse files

Merge "bluetooth: if a scan failed to be resumed, don't remove"

parents bb534caf 7e291335
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -866,7 +867,9 @@ public class ScanManager {
        }

        void handleResumeScans() {
            for (ScanClient client : mSuspendedScanClients) {
            Iterator<ScanClient> iterator = mSuspendedScanClients.iterator();
            while (iterator.hasNext()) {
                ScanClient client = iterator.next();
                if ((!requiresScreenOn(client) || mScreenOn)
                        && (!requiresLocationOn(client) || mLocationManager.isLocationEnabled())) {
                    if (client.stats != null) {
@@ -876,9 +879,9 @@ public class ScanManager {
                        Log.d(TAG, "resume scan " + client);
                    }
                    handleStartScan(client);
                    iterator.remove();
                }
            }
            mSuspendedScanClients.clear();
        }

        private void updateRegularScanClientsScreenOn() {
+49 −0
Original line number Diff line number Diff line
@@ -233,6 +233,13 @@ public class ScanManagerTest {
        return message;
    }

    private Message createLocationOnOffMessage(boolean isLocationOn) {
        Message message = new Message();
        message.what = isLocationOn ? ScanManager.MSG_RESUME_SCANS : ScanManager.MSG_SUSPEND_SCANS;
        message.obj = null;
        return message;
    }

    private Message createImportanceMessage(boolean isForeground) {
        final int importance = isForeground ? ActivityManager.RunningAppProcessInfo
                .IMPORTANCE_FOREGROUND_SERVICE : ActivityManager.RunningAppProcessInfo
@@ -979,4 +986,46 @@ public class ScanManagerTest {
            assertThat(mScanManager.getBatchScanParams().scanMode).isEqualTo(expectedScanMode);
        }
    }

    @Test
    public void testLocationAndScreenOnOffResumeUnfilteredScan() {
        // Set filtered scan flag
        final boolean isFiltered = false;
        // Set scan mode array
        int[] scanModeArr = {SCAN_MODE_LOW_POWER,
                SCAN_MODE_BALANCED,
                SCAN_MODE_LOW_LATENCY,
                SCAN_MODE_AMBIENT_DISCOVERY};

        for (int i = 0; i < scanModeArr.length; i++) {
            int ScanMode = scanModeArr[i];
            Log.d(TAG, "ScanMode: " + String.valueOf(ScanMode));
            // Turn on screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(true));
            // Create scan client
            ScanClient client = createScanClient(i, isFiltered, ScanMode);
            // Start scan
            sendMessageWaitForProcessed(createStartStopScanMessage(true, client));
            assertThat(mScanManager.getRegularScanQueue().contains(client)).isTrue();
            assertThat(mScanManager.getSuspendedScanQueue().contains(client)).isFalse();
            // Turn off location
            doReturn(false).when(mLocationManager).isLocationEnabled();
            sendMessageWaitForProcessed(createLocationOnOffMessage(false));
            assertThat(mScanManager.getRegularScanQueue().contains(client)).isFalse();
            assertThat(mScanManager.getSuspendedScanQueue().contains(client)).isTrue();
            // Turn off screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(false));
            assertThat(mScanManager.getRegularScanQueue().contains(client)).isFalse();
            assertThat(mScanManager.getSuspendedScanQueue().contains(client)).isTrue();
            // Turn on screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(true));
            assertThat(mScanManager.getRegularScanQueue().contains(client)).isFalse();
            assertThat(mScanManager.getSuspendedScanQueue().contains(client)).isTrue();
            // Turn on location
            doReturn(true).when(mLocationManager).isLocationEnabled();
            sendMessageWaitForProcessed(createLocationOnOffMessage(true));
            assertThat(mScanManager.getRegularScanQueue().contains(client)).isTrue();
            assertThat(mScanManager.getSuspendedScanQueue().contains(client)).isFalse();
        }
    }
}