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

Commit acf7c8ed authored by Michal Belusiak's avatar Michal Belusiak Committed by Gerrit Code Review
Browse files

Merge changes Ic4334059,I6b2ecf00,I7a741747 into main

* changes:
  BassClientService: Add missing return if source add failed
  BASS: Fix flaky tests
  BassClientService: Sort scan results for source sync by rssi
parents 81a8bde0 fb3f0115
Loading
Loading
Loading
Loading
+54 −7
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
@@ -90,6 +91,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.PriorityQueue;
import java.util.concurrent.ConcurrentHashMap;

/**
@@ -130,7 +132,8 @@ public class BassClientService extends ProfileService {
    private final List<Integer> mActiveSyncedSources = new ArrayList<>();
    private final Map<Integer, PeriodicAdvertisingCallback> mPeriodicAdvCallbacksMap =
            new HashMap<>();
    private final List<ScanResult> mSourceSyncRequestsQueue = new ArrayList<ScanResult>();
    private final PriorityQueue<SourceSyncRequest> mSourceSyncRequestsQueue =
            new PriorityQueue<>(sSourceSyncRequestComparator);
    private final Map<Integer, Boolean> mFirstTimeBisDiscoveryMap = new HashMap<Integer, Boolean>();
    private final List<AddSourceData> mPendingSourcesToAdd = new ArrayList<AddSourceData>();

@@ -205,6 +208,52 @@ public class BassClientService extends ProfileService {
                && BluetoothProperties.isProfileBapBroadcastAssistEnabled().orElse(false);
    }

    private static class SourceSyncRequest {
        private ScanResult mScanResult;
        private boolean mHasPriority;

        SourceSyncRequest(ScanResult scanResult, boolean hasPriority) {
            this.mScanResult = scanResult;
            this.mHasPriority = hasPriority;
        }

        public ScanResult getScanResult() {
            return mScanResult;
        }

        public int getRssi() {
            return mScanResult.getRssi();
        }

        public boolean hasPriority() {
            return mHasPriority;
        }

        @Override
        public String toString() {
            return "SourceSyncRequest{"
                    + "mScanResult="
                    + mScanResult
                    + ", mHasPriority="
                    + mHasPriority
                    + '}';
        }
    }

    private static final Comparator<SourceSyncRequest> sSourceSyncRequestComparator =
            new Comparator<SourceSyncRequest>() {
                @Override
                public int compare(SourceSyncRequest ssr1, SourceSyncRequest ssr2) {
                    if (ssr1.hasPriority() && !ssr2.hasPriority()) {
                        return -1;
                    } else if (!ssr1.hasPriority() && ssr2.hasPriority()) {
                        return 1;
                    } else {
                        return Integer.compare(ssr2.getRssi(), ssr1.getRssi());
                    }
                }
            };

    private static class AddSourceData {
        BluetoothDevice mSink;
        BluetoothLeBroadcastMetadata mSourceMetadata;
@@ -2059,11 +2108,7 @@ public class BassClientService extends ProfileService {
        }

        synchronized (mSourceSyncRequestsQueue) {
            if (hasPriority) {
                mSourceSyncRequestsQueue.add(0, scanRes);
            } else {
                mSourceSyncRequestsQueue.add(scanRes);
            }
            mSourceSyncRequestsQueue.add(new SourceSyncRequest(scanRes, hasPriority));
        }

        handleSelectSourceRequest();
@@ -2085,7 +2130,7 @@ public class BassClientService extends ProfileService {
        }
        ScanResult scanRes;
        synchronized (mSourceSyncRequestsQueue) {
            scanRes = mSourceSyncRequestsQueue.remove(0);
            scanRes = mSourceSyncRequestsQueue.poll().getScanResult();
        }
        ScanRecord scanRecord = scanRes.getScanRecord();

@@ -2244,6 +2289,8 @@ public class BassClientService extends ProfileService {
                            sink,
                            sourceMetadata,
                            BluetoothStatusCodes.ERROR_LOCAL_NOT_ENOUGH_RESOURCES);

                    return;
                }
            }
        } else {
+157 −71

File changed.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Diff line number Diff line
@@ -2035,6 +2035,9 @@ public class BassClientStateMachineTest {
        mBassClientStateMachine.sendMessage(ADD_BCAST_SOURCE, metadata);
        TestUtils.waitForLooperToFinishScheduledTask(mHandlerThread.getLooper());

        verify(mMethodProxy, timeout(TIMEOUT_MS))
                .periodicAdvertisingManagerRegisterSync(
                        any(), any(), anyInt(), anyInt(), any(), any());
        Assert.assertEquals(mBassClientStateMachine.mPendingSourceToAdd, metadata);
        verify(mBassClientService, never()).sendBroadcast(any(Intent.class), anyString(), any());
    }