diff options
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java')
-rw-r--r-- | framework/java/android/bluetooth/BluetoothLeAudioCodecStatus.java | 194 |
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; } } |