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

Commit 01098740 authored by Rongxuan Liu's avatar Rongxuan Liu Committed by Gerrit Code Review
Browse files

Merge "[le audio] Broadcast: skip creating broadcast if exceeding maximum number" into main

parents 2dbd3f18 32cd5a14
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -831,6 +831,15 @@ public class LeAudioService extends ProfileService {
     * @param broadcastSettings broadcast settings for this broadcast source
     */
    public void createBroadcast(BluetoothLeBroadcastSettings broadcastSettings) {
        if (mBroadcastDescriptors.size() >= getMaximumNumberOfBroadcasts()) {
            Log.w(
                    TAG,
                    "createBroadcast reached maximum allowed broadcasts number: "
                            + getMaximumNumberOfBroadcasts());
            notifyBroadcastStartFailed(null, BluetoothStatusCodes.ERROR_LOCAL_NOT_ENOUGH_RESOURCES);
            return;
        }

        if (mLeAudioBroadcasterNativeInterface == null) {
            Log.w(TAG, "Native interface not available.");
            return;
+76 −46
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ public class LeAudioBroadcastServiceTest {
    private boolean mOnBroadcastUpdatedCalled = false;
    private boolean mOnBroadcastUpdateFailedCalled = false;
    private boolean mOnBroadcastMetadataChangedCalled = false;
    private int mOnBroadcastStartFailedReason = BluetoothStatusCodes.SUCCESS;

    private final IBluetoothLeBroadcastCallback mCallbacks =
            new IBluetoothLeBroadcastCallback.Stub() {
@@ -116,6 +117,7 @@ public class LeAudioBroadcastServiceTest {
                @Override
                public void onBroadcastStartFailed(int reason) {
                    mOnBroadcastStartFailedCalled = true;
                    mOnBroadcastStartFailedReason = reason;
                }

                @Override
@@ -149,8 +151,8 @@ public class LeAudioBroadcastServiceTest {
                }

                @Override
        public void onBroadcastMetadataChanged(int broadcastId,
                BluetoothLeBroadcastMetadata metadata) {
                public void onBroadcastMetadataChanged(
                        int broadcastId, BluetoothLeBroadcastMetadata metadata) {
                    mOnBroadcastMetadataChangedCalled = true;
                }
            };
@@ -634,6 +636,34 @@ public class LeAudioBroadcastServiceTest {
        Assert.assertEquals(-1, activeGroup);
    }

    @Test
    public void testCreateBroadcastMoreThanMaxFailed() {
        int broadcastId = 243;
        byte[] code = {0x00, 0x01, 0x00, 0x02};

        mService.mBroadcastCallbacks.register(mCallbacks);

        BluetoothLeAudioContentMetadata.Builder meta_builder =
                new BluetoothLeAudioContentMetadata.Builder();
        meta_builder.setLanguage("deu");
        meta_builder.setProgramInfo("Subgroup broadcast info");
        BluetoothLeAudioContentMetadata meta = meta_builder.build();
        BluetoothLeBroadcastSettings settings = buildBroadcastSettingsFromMetadata(meta, code, 1);

        verifyBroadcastStarted(broadcastId, settings);
        mOnBroadcastStartedCalled = false;
        mOnBroadcastStartFailedCalled = false;

        // verify creating another broadcast will fail
        mService.createBroadcast(settings);

        Assert.assertFalse(mOnBroadcastStartedCalled);
        Assert.assertTrue(mOnBroadcastStartFailedCalled);
        Assert.assertEquals(
                BluetoothStatusCodes.ERROR_LOCAL_NOT_ENOUGH_RESOURCES,
                mOnBroadcastStartFailedReason);
    }

    private class LeAudioIntentReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {