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

Commit 9bf3f751 authored by Jayden Kim's avatar Jayden Kim Committed by Gerrit Code Review
Browse files

Merge "Allow the forced scan mode to be lower one during screen off" into main

parents d8c448b7 2be67fd0
Loading
Loading
Loading
Loading
+39 −20
Original line number Diff line number Diff line
@@ -143,6 +143,8 @@ public class ScanManager {
            ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE;
    private static final boolean DEFAULT_UID_IS_FOREGROUND = true;
    private static final int SCAN_MODE_APP_IN_BACKGROUND = ScanSettings.SCAN_MODE_LOW_POWER;
    private static final int SCAN_MODE_FORCE_DOWNGRADED = ScanSettings.SCAN_MODE_LOW_POWER;
    private static final int SCAN_MODE_MAX_IN_CONCURRENCY = ScanSettings.SCAN_MODE_BALANCED;
    private final SparseBooleanArray mIsUidForegroundMap = new SparseBooleanArray();
    private boolean mScreenOn = false;
    private boolean mIsConnecting;
@@ -734,10 +736,10 @@ public class ScanManager {
        }

        private boolean updateScanModeScreenOff(ScanClient client) {
            if (mScanNative.isForceDowngradedScanClient(client)) {
            if (mScanNative.isOpportunisticScanClient(client)) {
                return false;
            }
            if (!isAppForeground(client) && !mScanNative.isOpportunisticScanClient(client)) {
            if (!isAppForeground(client) || mScanNative.isForceDowngradedScanClient(client)) {
                return client.updateScanMode(ScanSettings.SCAN_MODE_SCREEN_OFF);
            }

@@ -834,22 +836,25 @@ public class ScanManager {
        }

        private boolean updateScanModeScreenOn(ScanClient client) {
            if (mScanNative.isForceDowngradedScanClient(client)) {
            if (mScanNative.isOpportunisticScanClient(client)) {
                return false;
            }

            int newScanMode =  (isAppForeground(client)
                    || mScanNative.isOpportunisticScanClient(client))
                    ? client.scanModeApp : SCAN_MODE_APP_IN_BACKGROUND;
            return client.updateScanMode(newScanMode);
            int scanMode =
                    isAppForeground(client) ? client.scanModeApp : SCAN_MODE_APP_IN_BACKGROUND;
            int maxScanMode =
                    mScanNative.isForceDowngradedScanClient(client)
                            ? SCAN_MODE_FORCE_DOWNGRADED
                            : scanMode;
            return client.updateScanMode(getMinScanMode(scanMode, maxScanMode));
        }

        private boolean downgradeScanModeFromMaxDuty(ScanClient client) {
            if ((client.stats == null) || mAdapterService.getScanDowngradeDurationMillis() == 0) {
                return false;
            }
            if (ScanSettings.SCAN_MODE_LOW_LATENCY == client.settings.getScanMode()) {
                client.updateScanMode(ScanSettings.SCAN_MODE_BALANCED);
            int scanMode = client.settings.getScanMode();
            int maxScanMode = SCAN_MODE_MAX_IN_CONCURRENCY;
            if (client.updateScanMode(getMinScanMode(scanMode, maxScanMode))) {
                client.stats.setScanDowngrade(client.scannerId, true);
                if (DBG) {
                    Log.d(TAG, "downgradeScanModeFromMaxDuty() for " + client);
@@ -1367,10 +1372,14 @@ public class ScanManager {
                    removeScanFilters(client.scannerId);

                } else {
                    Log.w(TAG,
                    Log.w(
                            TAG,
                            "Moving filtered scan client to downgraded scan (scannerId "
                                    + client.scannerId + ")");
                    client.updateScanMode(ScanSettings.SCAN_MODE_LOW_POWER);
                                    + client.scannerId
                                    + ")");
                    int scanMode = client.settings.getScanMode();
                    int maxScanMode = SCAN_MODE_FORCE_DOWNGRADED;
                    client.updateScanMode(getMinScanMode(scanMode, maxScanMode));
                }
                client.stats.setScanTimeout(client.scannerId);
                client.stats.recordScanTimeoutCountMetrics();
@@ -2027,19 +2036,23 @@ public class ScanManager {
        }

        for (ScanClient client : mRegularScanClients) {
            if (client.appUid != uid || mScanNative.isForceDowngradedScanClient(client)) {
            if (client.appUid != uid || mScanNative.isOpportunisticScanClient(client)) {
                continue;
            }
            if (isForeground) {
                if (client.updateScanMode(client.scanModeApp)) {
                int scanMode = client.scanModeApp;
                int maxScanMode =
                        mScanNative.isForceDowngradedScanClient(client)
                                ? SCAN_MODE_FORCE_DOWNGRADED
                                : scanMode;
                if (client.updateScanMode(getMinScanMode(scanMode, maxScanMode))) {
                    updatedScanParams = true;
                }
            } else {
                // Skip scan mode update in any of following cases
                //   1. screen is already off which triggers handleScreenOff()
                //   2. opportunistics scan
                if (mScreenOn && !mScanNative.isOpportunisticScanClient(client)
                        && client.updateScanMode(SCAN_MODE_APP_IN_BACKGROUND)) {
                int scanMode = client.settings.getScanMode();
                int maxScanMode =
                        mScreenOn ? SCAN_MODE_APP_IN_BACKGROUND : ScanSettings.SCAN_MODE_SCREEN_OFF;
                if (client.updateScanMode(getMinScanMode(scanMode, maxScanMode))) {
                    updatedScanParams = true;
                }
            }
@@ -2053,4 +2066,10 @@ public class ScanManager {
            mScanNative.configureRegularScanParams();
        }
    }

    private int getMinScanMode(int oldScanMode, int newScanMode) {
        return mPriorityMap.get(oldScanMode) <= mPriorityMap.get(newScanMode)
                ? oldScanMode
                : newScanMode;
    }
}
+8 −6
Original line number Diff line number Diff line
@@ -611,12 +611,12 @@ public class ScanManagerTest {
            assertThat(client.stats.isScanTimeout(client.scannerId)).isTrue();
            // Turn off screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(false));
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
            // Turn on screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(true));
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
            assertThat(client.settings.getScanMode()).isEqualTo(SCAN_MODE_SCREEN_OFF);
            // Set as backgournd app
            sendMessageWaitForProcessed(createImportanceMessage(false));
            assertThat(client.settings.getScanMode()).isEqualTo(SCAN_MODE_SCREEN_OFF);
            // Turn on screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(true));
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
            // Set as foreground app
            sendMessageWaitForProcessed(createImportanceMessage(true));
@@ -1183,8 +1183,10 @@ public class ScanManagerTest {
        sendMessageWaitForProcessed(createScreenOnOffMessage(true));
        verify(mMetricsLogger, atLeastOnce()).cacheCount(
                eq(BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR), anyLong());
        verify(mMetricsLogger, never()).cacheCount(
                eq(BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_ON), anyLong());
        verify(mMetricsLogger, atMost(1))
                .cacheCount(
                        eq(BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_ON),
                        anyLong());
        verify(mMetricsLogger, atLeastOnce()).cacheCount(
                eq(BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_OFF), anyLong());
        Mockito.clearInvocations(mMetricsLogger);