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

Commit 2dd9bbc5 authored by Jayden Kim's avatar Jayden Kim Committed by Automerger Merge Worker
Browse files

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

Merge "Allow the forced scan mode to be lower one during screen off" into main am: 9bf3f751 am: 4716d217

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2727753



Change-Id: Ied305f310774c1df237ae57809abb3222fb66b5c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 3d681b4f 4716d217
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);