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

Commit 4a935d2b authored by Jakub Tyszkowski's avatar Jakub Tyszkowski Committed by Grzegorz Kołodziejczyk
Browse files

leaudio/testapp: Select Broadcast Audio parameters with context type

This allow the test app to create various BIG configurations needed to
pass qualification tests.

Bug: 230340466
Tag: #feature
Sponsor: jpawlowski@
Test: atest LeAudioBroadcastServiceTest
Change-Id: I23bb0ccf92eed097f3d20065f96e3b68beafc563
Merged-In: I23bb0ccf92eed097f3d20065f96e3b68beafc563
(cherry picked from commit 2089f988)
parent 742dc966
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -1335,16 +1335,10 @@ public class BluetoothProxy {
        return mBroadcastStatusMutableLive;
    }

    public boolean startBroadcast(String programInfo, byte[] code) {
    public boolean startBroadcast(BluetoothLeAudioContentMetadata meta, byte[] code) {
        if (mBluetoothLeBroadcast == null)
            return false;

        BluetoothLeAudioContentMetadata.Builder contentBuilder =
                new BluetoothLeAudioContentMetadata.Builder();
        if (!programInfo.isEmpty()) {
            contentBuilder.setProgramInfo(programInfo);
        }
        mBluetoothLeBroadcast.startBroadcast(contentBuilder.build(), code);
        mBluetoothLeBroadcast.startBroadcast(meta, code);
        return true;
    }

+37 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package com.android.bluetooth.leaudio;

import android.bluetooth.BluetoothLeAudioContentMetadata;
import android.bluetooth.BluetoothLeBroadcastMetadata;
import android.content.Intent;
import android.os.Bundle;
@@ -24,6 +25,7 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.NumberPicker;
import android.widget.TextView;
import android.widget.Toast;

@@ -37,6 +39,8 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;

import com.android.bluetooth.leaudio.R;

import java.io.ByteArrayOutputStream;

public class BroadcasterActivity extends AppCompatActivity {
    private BroadcasterViewModel mViewModel;

@@ -55,12 +59,41 @@ public class BroadcasterActivity extends AppCompatActivity {

                View alertView = inflater.inflate(R.layout.broadcaster_add_broadcast_dialog, null);
                final EditText code_input_text = alertView.findViewById(R.id.broadcast_code_input);
                EditText metadata_input_text = alertView.findViewById(R.id.broadcast_meta_input);
                final EditText program_info = alertView.findViewById(R.id.broadcast_program_info_input);
                final NumberPicker contextPicker = alertView.findViewById(R.id.context_picker);

                // Add context type selector
                contextPicker.setMinValue(1);
                contextPicker.setMaxValue(
                        alertView.getResources().getStringArray(R.array.content_types).length - 1);
                contextPicker.setDisplayedValues(
                        alertView.getResources().getStringArray(R.array.content_types));

                alert.setView(alertView).setNegativeButton("Cancel", (dialog, which) -> {
                    // Do nothing
                }).setPositiveButton("Start", (dialog, which) -> {
                    if (mViewModel.startBroadcast(metadata_input_text.getText().toString(),

                    final BluetoothLeAudioContentMetadata.Builder contentBuilder =
                            new BluetoothLeAudioContentMetadata.Builder();
                    final String programInfo = program_info.getText().toString();
                    if (!programInfo.isEmpty()) {
                        contentBuilder.setProgramInfo(programInfo);
                    }

                    // Extract raw metadata
                    byte[] metaBuffer = contentBuilder.build().getRawMetadata();
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    stream.write(metaBuffer, 0 , metaBuffer.length);

                    // Extend raw metadata with context type
                    final int contextValue = 1 << (contextPicker.getValue() - 1);
                    stream.write((byte)0x03); // Length
                    stream.write((byte)0x02); // Type for the Streaming Audio Context
                    stream.write((byte)(contextValue & 0x00FF)); // Value LSB
                    stream.write((byte)((contextValue & 0xFF00) >> 8)); // Value MSB

                    if (mViewModel.startBroadcast(
                                BluetoothLeAudioContentMetadata.fromRawBytes(stream.toByteArray()),
                            code_input_text.getText() == null
                                    || code_input_text.getText().length() == 0 ? null
                                            : code_input_text.getText().toString().getBytes()))
@@ -135,7 +168,7 @@ public class BroadcasterActivity extends AppCompatActivity {

                LayoutInflater inflater = getLayoutInflater();
                View alertView = inflater.inflate(R.layout.broadcaster_add_broadcast_dialog, null);
                EditText metadata_input_text = alertView.findViewById(R.id.broadcast_meta_input);
                EditText program_info_input_text = alertView.findViewById(R.id.broadcast_program_info_input);

                // The Code cannot be changed, so just hide it
                final EditText code_input_text = alertView.findViewById(R.id.broadcast_code_input);
@@ -146,7 +179,7 @@ public class BroadcasterActivity extends AppCompatActivity {
                            // Do nothing
                        }).setPositiveButton("Update", (modifyDialog, modifyWhich) -> {
                            if (mViewModel.updateBroadcast(broadcastId,
                                    metadata_input_text.getText().toString()))
                                    program_info_input_text.getText().toString()))
                                Toast.makeText(BroadcasterActivity.this, "Broadcast was updated.",
                                        Toast.LENGTH_SHORT).show();
                        });
+3 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.bluetooth.leaudio;

import android.app.Application;
import android.bluetooth.BluetoothLeBroadcastMetadata;
import android.bluetooth.BluetoothLeAudioContentMetadata;

import androidx.annotation.NonNull;
import androidx.core.util.Pair;
@@ -39,8 +40,8 @@ public class BroadcasterViewModel extends AndroidViewModel {
        mBluetooth.initProfiles();
    }

    public boolean startBroadcast(String programInfo, byte[] code) {
        return mBluetooth.startBroadcast(programInfo, code);
    public boolean startBroadcast(BluetoothLeAudioContentMetadata meta, byte[] code) {
        return mBluetooth.startBroadcast(meta, code);
    }

    public boolean stopBroadcast(int broadcastId) {
+22 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@
            android:text="Program Info:" />

        <EditText
            android:id="@+id/broadcast_meta_input"
            android:id="@+id/broadcast_program_info_input"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
@@ -51,4 +51,25 @@
            android:inputType="text|textAutoCorrect" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView26"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Context type:" />

        <NumberPicker
            android:id="@+id/context_picker"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom"
            android:orientation="horizontal"
            max="11"
            min="1" />
    </LinearLayout>

</LinearLayout>
 No newline at end of file
+7 −6
Original line number Diff line number Diff line
@@ -32,14 +32,15 @@
        <item>Unspecified</item>
        <item>Conversational</item>
        <item>Media</item>
        <item>Game</item>
        <item>Instructional</item>
        <item>AttentionSeeking</item>
        <item>ImmediateAlert</item>
        <item>ManMachine</item>
	<item>EmergencyAlert</item>
        <item>Ringtone</item>
        <item>TV</item>
        <item>Voice Assistant</item>
        <item>Live</item>
        <item>Sound Effects</item>
        <item>Notifications</item>
        <item>Ringtone</item>
        <item>Alerts</item>
        <item>Emergency Alarm</item>
    </string-array>
    <string-array name="audio_locations">
        <item>Front Left</item>