summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java194
1 files changed, 152 insertions, 42 deletions
diff --git a/framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java b/framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java
index 399ffa743c..bdb9d5d5c6 100644
--- a/framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java
+++ b/framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java
@@ -41,29 +41,47 @@ public final class BluetoothLeAudioCodecStatus implements Parcelable {
public static final String EXTRA_LE_AUDIO_CODEC_STATUS =
"android.bluetooth.extra.LE_AUDIO_CODEC_STATUS";
- private final @Nullable BluetoothLeAudioCodecConfig mCodecConfig;
- private final @Nullable List<BluetoothLeAudioCodecConfig> mCodecsLocalCapabilities;
- private final @Nullable List<BluetoothLeAudioCodecConfig> mCodecsSelectableCapabilities;
+ private final @Nullable BluetoothLeAudioCodecConfig mInputCodecConfig;
+ private final @Nullable BluetoothLeAudioCodecConfig mOutputCodecConfig;
+ private final @Nullable List<BluetoothLeAudioCodecConfig> mInputCodecsLocalCapabilities;
+ private final @Nullable List<BluetoothLeAudioCodecConfig> mOutputCodecsLocalCapabilities;
+ private final @Nullable List<BluetoothLeAudioCodecConfig> mInputCodecsSelectableCapabilities;
+ private final @Nullable List<BluetoothLeAudioCodecConfig> mOutputCodecsSelectableCapabilities;
/**
* Represents the codec status for a Bluetooth LE Audio source device.
*
- * @param codecConfig the current code configutration.
- * @param codecsLocalCapabilities the local codecs capabilities.
- * @param codecsSelectableCapabilities the selectable codecs capabilities.
+ * @param inputCodecConfig the current input code configutration.
+ * @param outputCodecConfig the current output code configutration.
+ * @param inputCodecsLocalCapabilities the local input codecs capabilities.
+ * @param outputCodecsLocalCapabilities the local output codecs capabilities.
+ * @param inputCodecsSelectableCapabilities the selectable input codecs capabilities.
+ * @param outputCodecsSelectableCapabilities the selectable output codecs capabilities.
*/
- public BluetoothLeAudioCodecStatus(@Nullable BluetoothLeAudioCodecConfig codecConfig,
- @NonNull List<BluetoothLeAudioCodecConfig> codecsLocalCapabilities,
- @NonNull List<BluetoothLeAudioCodecConfig> codecsSelectableCapabilities) {
- mCodecConfig = codecConfig;
- mCodecsLocalCapabilities = codecsLocalCapabilities;
- mCodecsSelectableCapabilities = codecsSelectableCapabilities;
+ public BluetoothLeAudioCodecStatus(@Nullable BluetoothLeAudioCodecConfig inputCodecConfig,
+ @Nullable BluetoothLeAudioCodecConfig outputCodecConfig,
+ @NonNull List<BluetoothLeAudioCodecConfig> inputCodecsLocalCapabilities,
+ @NonNull List<BluetoothLeAudioCodecConfig> outputCodecsLocalCapabilities,
+ @NonNull List<BluetoothLeAudioCodecConfig> inputCodecsSelectableCapabilities,
+ @NonNull List<BluetoothLeAudioCodecConfig> outputCodecsSelectableCapabilities) {
+ mInputCodecConfig = inputCodecConfig;
+ mOutputCodecConfig = outputCodecConfig;
+ mInputCodecsLocalCapabilities = inputCodecsLocalCapabilities;
+ mOutputCodecsLocalCapabilities = outputCodecsLocalCapabilities;
+ mInputCodecsSelectableCapabilities = inputCodecsSelectableCapabilities;
+ mOutputCodecsSelectableCapabilities = outputCodecsSelectableCapabilities;
}
private BluetoothLeAudioCodecStatus(Parcel in) {
- mCodecConfig = in.readTypedObject(BluetoothLeAudioCodecConfig.CREATOR);
- mCodecsLocalCapabilities = in.createTypedArrayList(BluetoothLeAudioCodecConfig.CREATOR);
- mCodecsSelectableCapabilities =
+ mInputCodecConfig = in.readTypedObject(BluetoothLeAudioCodecConfig.CREATOR);
+ mOutputCodecConfig = in.readTypedObject(BluetoothLeAudioCodecConfig.CREATOR);
+ mInputCodecsLocalCapabilities =
+ in.createTypedArrayList(BluetoothLeAudioCodecConfig.CREATOR);
+ mOutputCodecsLocalCapabilities =
+ in.createTypedArrayList(BluetoothLeAudioCodecConfig.CREATOR);
+ mInputCodecsSelectableCapabilities =
+ in.createTypedArrayList(BluetoothLeAudioCodecConfig.CREATOR);
+ mOutputCodecsSelectableCapabilities =
in.createTypedArrayList(BluetoothLeAudioCodecConfig.CREATOR);
}
@@ -71,10 +89,16 @@ public final class BluetoothLeAudioCodecStatus implements Parcelable {
public boolean equals(@Nullable Object o) {
if (o instanceof BluetoothLeAudioCodecStatus) {
BluetoothLeAudioCodecStatus other = (BluetoothLeAudioCodecStatus) o;
- return (Objects.equals(other.mCodecConfig, mCodecConfig)
- && sameCapabilities(other.mCodecsLocalCapabilities, mCodecsLocalCapabilities)
- && sameCapabilities(other.mCodecsSelectableCapabilities,
- mCodecsSelectableCapabilities));
+ return (Objects.equals(other.mInputCodecConfig, mInputCodecConfig)
+ && Objects.equals(other.mOutputCodecConfig, mOutputCodecConfig)
+ && sameCapabilities(other.mInputCodecsLocalCapabilities,
+ mInputCodecsLocalCapabilities)
+ && sameCapabilities(other.mOutputCodecsLocalCapabilities,
+ mOutputCodecsLocalCapabilities)
+ && sameCapabilities(other.mInputCodecsSelectableCapabilities,
+ mInputCodecsSelectableCapabilities)
+ && sameCapabilities(other.mOutputCodecsSelectableCapabilities,
+ mOutputCodecsSelectableCapabilities));
}
return false;
}
@@ -101,19 +125,67 @@ public final class BluetoothLeAudioCodecStatus implements Parcelable {
return c1.containsAll(c2);
}
+ private boolean isCodecConfigSelectable(BluetoothLeAudioCodecConfig codecConfig,
+ BluetoothLeAudioCodecConfig selectableConfig) {
+ if (codecConfig.getCodecType() != selectableConfig.getCodecType()) {
+ return false;
+ }
+ if ((codecConfig.getFrameDuration() != BluetoothLeAudioCodecConfig.FRAME_DURATION_NONE)
+ && ((codecConfig.getFrameDuration() & selectableConfig.getFrameDuration()) == 0)) {
+ return false;
+ }
+ if ((codecConfig.getChannelCount() != BluetoothLeAudioCodecConfig.CHANNEL_COUNT_NONE)
+ && ((codecConfig.getChannelCount() & selectableConfig.getChannelCount()) == 0)) {
+ return false;
+ }
+ if ((codecConfig.getSampleRate() != BluetoothLeAudioCodecConfig.SAMPLE_RATE_NONE)
+ && ((codecConfig.getSampleRate() & selectableConfig.getSampleRate()) == 0)) {
+ return false;
+ }
+ if ((codecConfig.getBitsPerSample() != BluetoothLeAudioCodecConfig.BITS_PER_SAMPLE_NONE)
+ && ((codecConfig.getBitsPerSample() & selectableConfig.getBitsPerSample()) == 0)) {
+ return false;
+ }
+ if ((codecConfig.getOctetsPerFrame() != 0)
+ && ((codecConfig.getOctetsPerFrame() < selectableConfig.getMinOctetsPerFrame())
+ || (codecConfig.getOctetsPerFrame() > selectableConfig.getMaxOctetsPerFrame()))) {
+ return false;
+ }
+ return true;
+ }
/**
- * Checks whether the codec config matches the selectable capabilities.
+ * Checks whether the Input codec config matches the selectable capabilities.
* Any parameters of the codec config with NONE value will be considered a wildcard matching.
*
* @param codecConfig the codec config to compare against
* @return {@code true} if the codec config matches, {@code false} otherwise
*/
- public boolean isCodecConfigSelectable(@Nullable BluetoothLeAudioCodecConfig codecConfig) {
+ public boolean isInputCodecConfigSelectable(@Nullable BluetoothLeAudioCodecConfig codecConfig) {
if (codecConfig == null) {
return false;
}
- for (BluetoothLeAudioCodecConfig selectableConfig : mCodecsSelectableCapabilities) {
- if (codecConfig.equals(selectableConfig)) {
+ for (BluetoothLeAudioCodecConfig selectableConfig : mInputCodecsSelectableCapabilities) {
+ if (isCodecConfigSelectable(codecConfig, selectableConfig)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Checks whether the Output codec config matches the selectable capabilities.
+ * Any parameters of the codec config with NONE value will be considered a wildcard matching.
+ *
+ * @param codecConfig the codec config to compare against
+ * @return {@code true} if the codec config matches, {@code false} otherwise
+ */
+ public boolean isOutputCodecConfigSelectable(
+ @Nullable BluetoothLeAudioCodecConfig codecConfig) {
+ if (codecConfig == null) {
+ return false;
+ }
+ for (BluetoothLeAudioCodecConfig selectableConfig : mOutputCodecsSelectableCapabilities) {
+ if (isCodecConfigSelectable(codecConfig, selectableConfig)) {
return true;
}
}
@@ -125,7 +197,9 @@ public final class BluetoothLeAudioCodecStatus implements Parcelable {
*/
@Override
public int hashCode() {
- return Objects.hash(mCodecConfig, mCodecsLocalCapabilities, mCodecsLocalCapabilities);
+ return Objects.hash(mInputCodecConfig, mOutputCodecConfig,
+ mInputCodecsLocalCapabilities, mOutputCodecsLocalCapabilities,
+ mInputCodecsSelectableCapabilities, mOutputCodecsSelectableCapabilities);
}
/**
@@ -134,9 +208,12 @@ public final class BluetoothLeAudioCodecStatus implements Parcelable {
*/
@Override
public String toString() {
- return "{mCodecConfig:" + mCodecConfig
- + ",mCodecsLocalCapabilities:" + mCodecsLocalCapabilities
- + ",mCodecsSelectableCapabilities:" + mCodecsSelectableCapabilities
+ return "{mInputCodecConfig:" + mInputCodecConfig
+ + ",mOutputCodecConfig:" + mOutputCodecConfig
+ + ",mInputCodecsLocalCapabilities:" + mInputCodecsLocalCapabilities
+ + ",mOutputCodecsLocalCapabilities:" + mOutputCodecsLocalCapabilities
+ + ",mInputCodecsSelectableCapabilities:" + mInputCodecsSelectableCapabilities
+ + ",mOutputCodecsSelectableCapabilities:" + mOutputCodecsSelectableCapabilities
+ "}";
}
@@ -171,38 +248,71 @@ public final class BluetoothLeAudioCodecStatus implements Parcelable {
*/
@Override
public void writeToParcel(@NonNull Parcel out, int flags) {
- out.writeTypedObject(mCodecConfig, flags);
- out.writeTypedList(mCodecsLocalCapabilities);
- out.writeTypedList(mCodecsSelectableCapabilities);
+ out.writeTypedObject(mInputCodecConfig, flags);
+ out.writeTypedObject(mOutputCodecConfig, flags);
+ out.writeTypedList(mInputCodecsLocalCapabilities);
+ out.writeTypedList(mOutputCodecsLocalCapabilities);
+ out.writeTypedList(mInputCodecsSelectableCapabilities);
+ out.writeTypedList(mOutputCodecsSelectableCapabilities);
+ }
+
+ /**
+ * Returns the current Input codec configuration.
+ *
+ * @return The current input codec config.
+ */
+ public @Nullable BluetoothLeAudioCodecConfig getInputCodecConfig() {
+ return mInputCodecConfig;
}
/**
- * Returns the current codec configuration.
+ * Returns the current Output codec configuration.
*
- * @return The current codec config.
+ * @return The current output codec config.
*/
- public @Nullable BluetoothLeAudioCodecConfig getCodecConfig() {
- return mCodecConfig;
+ public @Nullable BluetoothLeAudioCodecConfig getOutputCodecConfig() {
+ return mOutputCodecConfig;
}
/**
- * Returns the codecs local capabilities.
+ * Returns the input codecs local capabilities.
*
* @return The list of codec config that supported by the local system.
*/
- public @NonNull List<BluetoothLeAudioCodecConfig> getCodecLocalCapabilities() {
- return (mCodecsLocalCapabilities == null)
- ? Collections.emptyList() : mCodecsLocalCapabilities;
+ public @NonNull List<BluetoothLeAudioCodecConfig> getInputCodecLocalCapabilities() {
+ return (mInputCodecsLocalCapabilities == null)
+ ? Collections.emptyList() : mInputCodecsLocalCapabilities;
+ }
+
+ /**
+ * Returns the output codecs local capabilities.
+ *
+ * @return The list of codec config that supported by the local system.
+ */
+ public @NonNull List<BluetoothLeAudioCodecConfig> getOutputCodecLocalCapabilities() {
+ return (mOutputCodecsLocalCapabilities == null)
+ ? Collections.emptyList() : mOutputCodecsLocalCapabilities;
+ }
+
+ /**
+ * Returns the Input codecs selectable capabilities.
+ *
+ * @return The list of codec config that supported by both of the local system and
+ * remote devices.
+ */
+ public @NonNull List<BluetoothLeAudioCodecConfig> getInputCodecSelectableCapabilities() {
+ return (mInputCodecsSelectableCapabilities == null)
+ ? Collections.emptyList() : mInputCodecsSelectableCapabilities;
}
/**
- * Returns the codecs selectable capabilities.
+ * Returns the Output codecs selectable capabilities.
*
* @return The list of codec config that supported by both of the local system and
* remote devices.
*/
- public @NonNull List<BluetoothLeAudioCodecConfig> getCodecSelectableCapabilities() {
- return (mCodecsSelectableCapabilities == null)
- ? Collections.emptyList() : mCodecsSelectableCapabilities;
+ public @NonNull List<BluetoothLeAudioCodecConfig> getOutputCodecSelectableCapabilities() {
+ return (mOutputCodecsSelectableCapabilities == null)
+ ? Collections.emptyList() : mOutputCodecsSelectableCapabilities;
}
}