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

Commit 40eca3a3 authored by Henri Chataing's avatar Henri Chataing
Browse files

AdapterProperties: Update getBufferConstraint to block until the adapter properties are ready

Bug: 336581128
Test: m com.android.btservices
Test: atest CtsBluetoothTestCases:BluetoothA2dpTest#getBufferConstraints
Flag: EXEMPT, minor code change
Change-Id: I499999fc2f2aa2e1296dc043b774eb805e6a70cd
parent fab656ea
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CopyOnWriteArrayList;

class AdapterProperties {
@@ -108,6 +109,9 @@ class AdapterProperties {
    private final HashMap<Integer, Pair<Integer, Integer>> mProfileConnectionState =
            new HashMap<>();

    private final CompletableFuture<List<BufferConstraint>> mBufferConstraintList =
            new CompletableFuture<>();

    private volatile int mConnectionState = BluetoothAdapter.STATE_DISCONNECTED;
    private volatile int mState = BluetoothAdapter.STATE_OFF;
    private int mMaxConnectedAudioDevices = 1;
@@ -145,8 +149,6 @@ class AdapterProperties {
    private boolean mIsLeConnectedIsochronousStreamCentralSupported;
    private boolean mIsLeIsochronousBroadcasterSupported;

    private List<BufferConstraint> mBufferConstraintList;

    private boolean mReceiverRegistered;
    private Handler mHandler;

@@ -577,7 +579,7 @@ class AdapterProperties {
     * @return Dynamic Audio Buffer Capability
     */
    BufferConstraints getBufferConstraints() {
        return new BufferConstraints(mBufferConstraintList);
        return new BufferConstraints(mBufferConstraintList.join());
    }

    /**
@@ -1110,13 +1112,17 @@ class AdapterProperties {
    }

    private void updateDynamicAudioBufferSupport(byte[] val) {
        if (mBufferConstraintList.isDone()) {
            return;
        }

        // bufferConstraints is the table indicates the capability of all the codecs
        // with buffer time. The raw is codec number, and the column is buffer type. There are 3
        // buffer types - default/maximum/minimum.
        // The maximum number of raw is BUFFER_CODEC_MAX_NUM(32).
        // The maximum number of column is BUFFER_TYPE_MAX(3).
        // The array element indicates the buffer time, the size is two octet.
        mBufferConstraintList = new ArrayList<BufferConstraint>();
        List<BufferConstraint> bufferConstraintList = new ArrayList<BufferConstraint>();

        for (int i = 0; i < BufferConstraints.BUFFER_CODEC_MAX_NUM; i++) {
            int defaultBufferTime = ((0xFF & ((int) val[i * 6 + 1])) << 8)
@@ -1125,10 +1131,11 @@ class AdapterProperties {
                    + (0xFF & ((int) val[i * 6 + 2]));
            int minimumBufferTime = ((0xFF & ((int) val[i * 6 + 5])) << 8)
                    + (0xFF & ((int) val[i * 6 + 4]));
            BufferConstraint bufferConstraint = new BufferConstraint(defaultBufferTime,
                    maximumBufferTime, minimumBufferTime);
            mBufferConstraintList.add(bufferConstraint);
            bufferConstraintList.add(
                    new BufferConstraint(defaultBufferTime, maximumBufferTime, minimumBufferTime));
        }

        mBufferConstraintList.complete(bufferConstraintList);
    }

    void onBluetoothReady() {