diff options
author | Jack He <siyuanh@google.com> | 2022-02-03 07:30:59 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-02-03 07:30:59 +0000 |
commit | 602cb15f1577a9d932c514ff6d472ec15dc3f1ad (patch) | |
tree | 4a1ebd19d55f85b3292cbb1846f2f259d5bbf6b5 /framework/java/android/bluetooth/BluetoothLeBroadcastChannel.java | |
parent | c12ba609a8d7dc05ef4aa0b80c813bd5d86caf23 (diff) | |
parent | 0dc9bbcf7f437a28edc26a5fa368c4e4021f6a62 (diff) |
Introduce LE audio broadcast system APIs am: a014314c94 am: de7f1f372c am: 0dc9bbcf7f
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/1959800
Change-Id: I1bba0232e4c5e3bbcbd5a2305068909d06f3488b
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothLeBroadcastChannel.java')
-rw-r--r-- | framework/java/android/bluetooth/BluetoothLeBroadcastChannel.java | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/framework/java/android/bluetooth/BluetoothLeBroadcastChannel.java b/framework/java/android/bluetooth/BluetoothLeBroadcastChannel.java new file mode 100644 index 0000000000..6addc062e3 --- /dev/null +++ b/framework/java/android/bluetooth/BluetoothLeBroadcastChannel.java @@ -0,0 +1,206 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.bluetooth; + +import android.annotation.NonNull; +import android.annotation.SystemApi; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * This class contains the Broadcast Isochronous Channel level information as defined in the BASE + * structure of the Basic Audio Profile. + * + * @hide + */ +@SystemApi +public final class BluetoothLeBroadcastChannel implements Parcelable { + private static final int UNKNOWN_VALUE_PLACEHOLDER = -1; + + private final boolean mIsSelected; + private final int mChannelIndex; + private final BluetoothLeAudioCodecConfigMetadata mCodecMetadata; + + private BluetoothLeBroadcastChannel(boolean isSelected, int channelIndex, + BluetoothLeAudioCodecConfigMetadata codecMetadata) { + mIsSelected = isSelected; + mChannelIndex = channelIndex; + mCodecMetadata = codecMetadata; + } + + /** + * Return true if the channel is selected by Broadcast Assistant for the Broadcast Sink. + * + * Used by Broadcast Assistant and Sink, but not Broadcast Source + * + * @return true if the channel is selected by Broadcast Assistant for the Broadcast Sink + * @hide + */ + @SystemApi + public boolean isSelected() { + return mIsSelected; + } + + /** + * Get the Broadcast Isochronous Channel index of this Broadcast Channel. + * + * @return Broadcast Isochronous Channel index + * @hide + */ + @SystemApi + public int getChannelIndex() { + return mChannelIndex; + } + + /** + * Return the codec specific configuration for this Broadcast Channel. + * + * @return codec specific configuration for this Broadcast Channel + * @hide + */ + @SystemApi + public @NonNull BluetoothLeAudioCodecConfigMetadata getCodecMetadata() { + return mCodecMetadata; + } + + /** + * {@inheritDoc} + * @hide + */ + @Override + public int describeContents() { + return 0; + } + + /** + * {@inheritDoc} + * @hide + */ + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeBoolean(mIsSelected); + out.writeInt(mChannelIndex); + out.writeTypedObject(mCodecMetadata, 0); + } + + /** + * A {@link Parcelable.Creator} to create {@link BluetoothLeBroadcastChannel} from parcel. + * @hide + */ + @SystemApi + public static final @NonNull Parcelable.Creator<BluetoothLeBroadcastChannel> CREATOR = + new Parcelable.Creator<BluetoothLeBroadcastChannel>() { + public @NonNull BluetoothLeBroadcastChannel createFromParcel(@NonNull Parcel in) { + BluetoothLeBroadcastChannel.Builder + builder = new BluetoothLeBroadcastChannel.Builder(); + builder.setSelected(in.readBoolean()); + builder.setChannelIndex(in.readInt()); + builder.setCodecMetadata( + in.readTypedObject(BluetoothLeAudioCodecConfigMetadata.CREATOR)); + return builder.build(); + } + + public @NonNull BluetoothLeBroadcastChannel[] newArray(int size) { + return new BluetoothLeBroadcastChannel[size]; + } + }; + + /** + * Builder for {@link BluetoothLeBroadcastChannel}. + * @hide + */ + @SystemApi + public static final class Builder { + private boolean mIsSelected = false; + private int mChannelIndex = UNKNOWN_VALUE_PLACEHOLDER; + private BluetoothLeAudioCodecConfigMetadata mCodecMetadata = null; + + /** + * Create an empty builder. + * @hide + */ + @SystemApi + public Builder() {} + + /** + * Create a builder with copies of information from original object. + * + * @param original original object + * @hide + */ + @SystemApi + public Builder(@NonNull BluetoothLeBroadcastChannel original) { + mIsSelected = original.isSelected(); + mChannelIndex = original.getChannelIndex(); + mCodecMetadata = original.getCodecMetadata(); + } + + /** + * Set if the channel is selected by Broadcast Assistant for the Broadcast Sink. + * + * Used by Broadcast Assistant and Sink, but not Broadcast Source + * + * @param isSelected true if the channel is selected by Broadcast Assistant for the + * Broadcast Sink + * @return this builder + * @hide + */ + @SystemApi + public @NonNull Builder setSelected(boolean isSelected) { + mIsSelected = isSelected; + return this; + } + + /** + * Set the Broadcast Isochronous Channel index of this Broadcast Channel. + * + * @return Broadcast Isochronous Channel index + * @hide + */ + @SystemApi + public @NonNull Builder setChannelIndex(int channelIndex) { + mChannelIndex = channelIndex; + return this; + } + + /** + * Set the codec specific configuration for this Broadcast Channel. + * + * @param codecMetadata codec specific configuration for this Broadcast Channel + * @return this builder + * @hide + */ + @SystemApi + public @NonNull Builder setCodecMetadata( + @NonNull BluetoothLeAudioCodecConfigMetadata codecMetadata) { + mCodecMetadata = codecMetadata; + return this; + } + + /** + * Build {@link BluetoothLeBroadcastChannel}. + * + * @return constructed {@link BluetoothLeBroadcastChannel} + * @throws IllegalArgumentException if the object cannot be built + * @hide + */ + @SystemApi + public @NonNull BluetoothLeBroadcastChannel build() { + return new BluetoothLeBroadcastChannel(mIsSelected, mChannelIndex, mCodecMetadata); + } + } +} |