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

Commit 439436e1 authored by Betty Chang's avatar Betty Chang Committed by Android (Google) Code Review
Browse files

Merge "[LE] Convert the BluetoothLeBroadcastSubgroup to QR code format string" into tm-dev

parents 100004b0 b055f6ad
Loading
Loading
Loading
Loading
+75 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.bluetooth.BluetoothLeBroadcastMetadata;
import android.bluetooth.BluetoothLeBroadcastSubgroup;
import android.util.Log;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -95,6 +96,7 @@ public class LocalBluetoothLeBroadcastMetadata {
    }

    public String convertToQrCodeString() {
        String subgroupString = convertSubgroupToString(mSubgroupList);
        return new StringBuilder()
                .append(BluetoothBroadcastUtils.SCHEME_BT_BROADCAST_METADATA)
                .append(BluetoothBroadcastUtils.PREFIX_BT_ADDRESS_TYPE)
@@ -122,11 +124,83 @@ public class LocalBluetoothLeBroadcastMetadata {
                .append(METADATA_START).append(mPresentationDelayMicros).append(METADATA_END)
                .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                .append(BluetoothBroadcastUtils.PREFIX_BT_SUBGROUPS)
                .append(METADATA_START).append(mSubgroupList).append(METADATA_END)
                .append(METADATA_START).append(subgroupString).append(METADATA_END)
                .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                .toString();
    }

    private String convertSubgroupToString(List<BluetoothLeBroadcastSubgroup> subgroupList) {
        StringBuilder subgroupListBuilder = new StringBuilder();
        String subgroupString = "";
        for (BluetoothLeBroadcastSubgroup subgroup: subgroupList) {
            String audioCodec = convertAudioCodecConfigToString(subgroup.getCodecSpecificConfig());
            String audioContent = convertAudioContentToString(subgroup.getContentMetadata());
            String channels = convertChannelToString(subgroup.getChannels());
            subgroupString = new StringBuilder()
                    .append(BluetoothBroadcastUtils.PREFIX_BTSG_CODEC_ID)
                    .append(METADATA_START).append(subgroup.getCodecId()).append(METADATA_END)
                    .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                    .append(BluetoothBroadcastUtils.PREFIX_BTSG_CODEC_CONFIG)
                    .append(METADATA_START).append(audioCodec).append(METADATA_END)
                    .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                    .append(BluetoothBroadcastUtils.PREFIX_BTSG_AUDIO_CONTENT)
                    .append(METADATA_START).append(audioContent).append(METADATA_END)
                    .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                    .append(BluetoothBroadcastUtils.PREFIX_BTSG_BROADCAST_CHANNEL)
                    .append(METADATA_START).append(channels).append(METADATA_END)
                    .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                    .toString();
            subgroupListBuilder.append(subgroupString);
        }
        return subgroupListBuilder.toString();
    }

    private String convertAudioCodecConfigToString(BluetoothLeAudioCodecConfigMetadata config) {
        String audioLocation = String.valueOf(config.getAudioLocation());
        String rawMetadata = new String(config.getRawMetadata(), StandardCharsets.UTF_8);
        return new StringBuilder()
            .append(BluetoothBroadcastUtils.PREFIX_BTCC_AUDIO_LOCATION)
            .append(METADATA_START).append(audioLocation).append(METADATA_END)
            .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
            .append(BluetoothBroadcastUtils.PREFIX_BTCC_RAW_METADATA)
            .append(METADATA_START).append(rawMetadata).append(METADATA_END)
            .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
            .toString();
    }

    private String convertAudioContentToString(BluetoothLeAudioContentMetadata audioContent) {
        String rawMetadata = new String(audioContent.getRawMetadata(), StandardCharsets.UTF_8);
        return new StringBuilder()
            .append(BluetoothBroadcastUtils.PREFIX_BTAC_PROGRAM_INFO)
            .append(METADATA_START).append(audioContent.getProgramInfo()).append(METADATA_END)
            .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
            .append(BluetoothBroadcastUtils.PREFIX_BTAC_LANGUAGE)
            .append(METADATA_START).append(audioContent.getLanguage()).append(METADATA_END)
            .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
            .append(BluetoothBroadcastUtils.PREFIX_BTAC_RAW_METADATA)
            .append(METADATA_START).append(rawMetadata).append(METADATA_END)
            .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
            .toString();
    }

    private String convertChannelToString(List<BluetoothLeBroadcastChannel> channelList) {
        StringBuilder channelListBuilder = new StringBuilder();
        String channelString = "";
        for (BluetoothLeBroadcastChannel channel: channelList) {
            String channelAudioCodec = convertAudioCodecConfigToString(channel.getCodecMetadata());
            channelString = new StringBuilder()
                .append(BluetoothBroadcastUtils.PREFIX_BTBC_CHANNEL_INDEX)
                .append(METADATA_START).append(channel.getChannelIndex()).append(METADATA_END)
                .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                .append(BluetoothBroadcastUtils.PREFIX_BTBC_CODEC_CONFIG)
                .append(METADATA_START).append(channelAudioCodec).append(METADATA_END)
                .append(BluetoothBroadcastUtils.DELIMITER_QR_CODE)
                .toString();
            channelListBuilder.append(channelString);
        }
        return channelListBuilder.toString();
    }

    /**
     * Example : prefix is with the “BT:”, and end by the Android Version.
     * BT:T:<1>;D:<00:11:22:AA:BB:CC>;AS:<1>;B:…;V:T;;