Merge "Make BluetoothCodecConfig and BluetoothCodecStatus public." am: 720d74c835 am: 60ee51b45b
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1849460 Change-Id: I97b8a4b9bbc4d9a4a5409ee7c427438abc024d43
This commit is contained in:
@@ -9024,6 +9024,72 @@ package android.bluetooth {
|
|||||||
field public static final int TELEPHONY = 4194304; // 0x400000
|
field public static final int TELEPHONY = 4194304; // 0x400000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class BluetoothCodecConfig implements android.os.Parcelable {
|
||||||
|
ctor public BluetoothCodecConfig(int);
|
||||||
|
method public int describeContents();
|
||||||
|
method public int getBitsPerSample();
|
||||||
|
method public int getChannelMode();
|
||||||
|
method public int getCodecPriority();
|
||||||
|
method public long getCodecSpecific1();
|
||||||
|
method public long getCodecSpecific2();
|
||||||
|
method public long getCodecSpecific3();
|
||||||
|
method public long getCodecSpecific4();
|
||||||
|
method public int getCodecType();
|
||||||
|
method public static int getMaxCodecType();
|
||||||
|
method public int getSampleRate();
|
||||||
|
method public void writeToParcel(android.os.Parcel, int);
|
||||||
|
field public static final int BITS_PER_SAMPLE_16 = 1; // 0x1
|
||||||
|
field public static final int BITS_PER_SAMPLE_24 = 2; // 0x2
|
||||||
|
field public static final int BITS_PER_SAMPLE_32 = 4; // 0x4
|
||||||
|
field public static final int BITS_PER_SAMPLE_NONE = 0; // 0x0
|
||||||
|
field public static final int CHANNEL_MODE_MONO = 1; // 0x1
|
||||||
|
field public static final int CHANNEL_MODE_NONE = 0; // 0x0
|
||||||
|
field public static final int CHANNEL_MODE_STEREO = 2; // 0x2
|
||||||
|
field public static final int CODEC_PRIORITY_DEFAULT = 0; // 0x0
|
||||||
|
field public static final int CODEC_PRIORITY_DISABLED = -1; // 0xffffffff
|
||||||
|
field public static final int CODEC_PRIORITY_HIGHEST = 1000000; // 0xf4240
|
||||||
|
field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothCodecConfig> CREATOR;
|
||||||
|
field public static final int SAMPLE_RATE_176400 = 16; // 0x10
|
||||||
|
field public static final int SAMPLE_RATE_192000 = 32; // 0x20
|
||||||
|
field public static final int SAMPLE_RATE_44100 = 1; // 0x1
|
||||||
|
field public static final int SAMPLE_RATE_48000 = 2; // 0x2
|
||||||
|
field public static final int SAMPLE_RATE_88200 = 4; // 0x4
|
||||||
|
field public static final int SAMPLE_RATE_96000 = 8; // 0x8
|
||||||
|
field public static final int SAMPLE_RATE_NONE = 0; // 0x0
|
||||||
|
field public static final int SOURCE_CODEC_TYPE_AAC = 1; // 0x1
|
||||||
|
field public static final int SOURCE_CODEC_TYPE_APTX = 2; // 0x2
|
||||||
|
field public static final int SOURCE_CODEC_TYPE_APTX_HD = 3; // 0x3
|
||||||
|
field public static final int SOURCE_CODEC_TYPE_INVALID = 1000000; // 0xf4240
|
||||||
|
field public static final int SOURCE_CODEC_TYPE_LDAC = 4; // 0x4
|
||||||
|
field public static final int SOURCE_CODEC_TYPE_SBC = 0; // 0x0
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class BluetoothCodecConfig.Builder {
|
||||||
|
ctor public BluetoothCodecConfig.Builder();
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig build();
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setBitsPerSample(int);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setChannelMode(int);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setCodecPriority(int);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setCodecSpecific1(long);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setCodecSpecific2(long);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setCodecSpecific3(long);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setCodecSpecific4(long);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setCodecType(int);
|
||||||
|
method @NonNull public android.bluetooth.BluetoothCodecConfig.Builder setSampleRate(int);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class BluetoothCodecStatus implements android.os.Parcelable {
|
||||||
|
ctor public BluetoothCodecStatus(@Nullable android.bluetooth.BluetoothCodecConfig, @Nullable java.util.List<android.bluetooth.BluetoothCodecConfig>, @Nullable java.util.List<android.bluetooth.BluetoothCodecConfig>);
|
||||||
|
method public int describeContents();
|
||||||
|
method @Nullable public android.bluetooth.BluetoothCodecConfig getCodecConfig();
|
||||||
|
method @NonNull public java.util.List<android.bluetooth.BluetoothCodecConfig> getCodecsLocalCapabilities();
|
||||||
|
method @NonNull public java.util.List<android.bluetooth.BluetoothCodecConfig> getCodecsSelectableCapabilities();
|
||||||
|
method public boolean isCodecConfigSelectable(@Nullable android.bluetooth.BluetoothCodecConfig);
|
||||||
|
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
||||||
|
field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothCodecStatus> CREATOR;
|
||||||
|
field public static final String EXTRA_CODEC_STATUS = "android.bluetooth.extra.CODEC_STATUS";
|
||||||
|
}
|
||||||
|
|
||||||
public final class BluetoothCsipSetCoordinator implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
|
public final class BluetoothCsipSetCoordinator implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
|
||||||
method public void close();
|
method public void close();
|
||||||
method protected void finalize();
|
method protected void finalize();
|
||||||
|
|||||||
@@ -29,16 +29,14 @@ import java.util.Objects;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the codec configuration for a Bluetooth A2DP source device.
|
* Represents the codec configuration for a Bluetooth A2DP source device.
|
||||||
|
* <p>Contains the source codec type, the codec priority, the codec sample
|
||||||
|
* rate, the codec bits per sample, and the codec channel mode.
|
||||||
|
* <p>The source codec type values are the same as those supported by the
|
||||||
|
* device hardware.
|
||||||
*
|
*
|
||||||
* {@see BluetoothA2dp}
|
* {@see BluetoothA2dp}
|
||||||
*
|
|
||||||
* {@hide}
|
|
||||||
*/
|
*/
|
||||||
public final class BluetoothCodecConfig implements Parcelable {
|
public final class BluetoothCodecConfig implements Parcelable {
|
||||||
// Add an entry for each source codec here.
|
|
||||||
// NOTE: The values should be same as those listed in the following file:
|
|
||||||
// hardware/libhardware/include/hardware/bt_av.h
|
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@IntDef(prefix = "SOURCE_CODEC_TYPE_", value = {
|
@IntDef(prefix = "SOURCE_CODEC_TYPE_", value = {
|
||||||
SOURCE_CODEC_TYPE_SBC,
|
SOURCE_CODEC_TYPE_SBC,
|
||||||
@@ -46,33 +44,49 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
SOURCE_CODEC_TYPE_APTX,
|
SOURCE_CODEC_TYPE_APTX,
|
||||||
SOURCE_CODEC_TYPE_APTX_HD,
|
SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
SOURCE_CODEC_TYPE_LDAC,
|
SOURCE_CODEC_TYPE_LDAC,
|
||||||
SOURCE_CODEC_TYPE_MAX,
|
|
||||||
SOURCE_CODEC_TYPE_INVALID
|
SOURCE_CODEC_TYPE_INVALID
|
||||||
})
|
})
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface SourceCodecType {}
|
public @interface SourceCodecType {}
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Source codec type SBC. This is the mandatory source codec
|
||||||
|
* type.
|
||||||
|
*/
|
||||||
public static final int SOURCE_CODEC_TYPE_SBC = 0;
|
public static final int SOURCE_CODEC_TYPE_SBC = 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Source codec type AAC.
|
||||||
|
*/
|
||||||
public static final int SOURCE_CODEC_TYPE_AAC = 1;
|
public static final int SOURCE_CODEC_TYPE_AAC = 1;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Source codec type APTX.
|
||||||
|
*/
|
||||||
public static final int SOURCE_CODEC_TYPE_APTX = 2;
|
public static final int SOURCE_CODEC_TYPE_APTX = 2;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Source codec type APTX HD.
|
||||||
|
*/
|
||||||
public static final int SOURCE_CODEC_TYPE_APTX_HD = 3;
|
public static final int SOURCE_CODEC_TYPE_APTX_HD = 3;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Source codec type LDAC.
|
||||||
|
*/
|
||||||
public static final int SOURCE_CODEC_TYPE_LDAC = 4;
|
public static final int SOURCE_CODEC_TYPE_LDAC = 4;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
public static final int SOURCE_CODEC_TYPE_MAX = 5;
|
* Source codec type invalid. This is the default value used for codec
|
||||||
|
* type.
|
||||||
@UnsupportedAppUsage
|
*/
|
||||||
public static final int SOURCE_CODEC_TYPE_INVALID = 1000 * 1000;
|
public static final int SOURCE_CODEC_TYPE_INVALID = 1000 * 1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the count of valid source codec types. Can be accessed via
|
||||||
|
* {@link #getMaxCodecType}.
|
||||||
|
*/
|
||||||
|
private static final int SOURCE_CODEC_TYPE_MAX = 5;
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@IntDef(prefix = "CODEC_PRIORITY_", value = {
|
@IntDef(prefix = "CODEC_PRIORITY_", value = {
|
||||||
CODEC_PRIORITY_DISABLED,
|
CODEC_PRIORITY_DISABLED,
|
||||||
@@ -82,16 +96,24 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface CodecPriority {}
|
public @interface CodecPriority {}
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec priority disabled.
|
||||||
|
* Used to indicate that this codec is disabled and should not be used.
|
||||||
|
*/
|
||||||
public static final int CODEC_PRIORITY_DISABLED = -1;
|
public static final int CODEC_PRIORITY_DISABLED = -1;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec priority default.
|
||||||
|
* Default value used for codec priority.
|
||||||
|
*/
|
||||||
public static final int CODEC_PRIORITY_DEFAULT = 0;
|
public static final int CODEC_PRIORITY_DEFAULT = 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec priority highest.
|
||||||
|
* Used to indicate the highest priority a codec can have.
|
||||||
|
*/
|
||||||
public static final int CODEC_PRIORITY_HIGHEST = 1000 * 1000;
|
public static final int CODEC_PRIORITY_HIGHEST = 1000 * 1000;
|
||||||
|
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@IntDef(prefix = "SAMPLE_RATE_", value = {
|
@IntDef(prefix = "SAMPLE_RATE_", value = {
|
||||||
SAMPLE_RATE_NONE,
|
SAMPLE_RATE_NONE,
|
||||||
@@ -105,28 +127,42 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface SampleRate {}
|
public @interface SampleRate {}
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 0 Hz. Default value used for
|
||||||
|
* codec sample rate.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_NONE = 0;
|
public static final int SAMPLE_RATE_NONE = 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 44100 Hz.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_44100 = 0x1 << 0;
|
public static final int SAMPLE_RATE_44100 = 0x1 << 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 48000 Hz.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_48000 = 0x1 << 1;
|
public static final int SAMPLE_RATE_48000 = 0x1 << 1;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 88200 Hz.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_88200 = 0x1 << 2;
|
public static final int SAMPLE_RATE_88200 = 0x1 << 2;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 96000 Hz.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_96000 = 0x1 << 3;
|
public static final int SAMPLE_RATE_96000 = 0x1 << 3;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 176400 Hz.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_176400 = 0x1 << 4;
|
public static final int SAMPLE_RATE_176400 = 0x1 << 4;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec sample rate 192000 Hz.
|
||||||
|
*/
|
||||||
public static final int SAMPLE_RATE_192000 = 0x1 << 5;
|
public static final int SAMPLE_RATE_192000 = 0x1 << 5;
|
||||||
|
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@IntDef(prefix = "BITS_PER_SAMPLE_", value = {
|
@IntDef(prefix = "BITS_PER_SAMPLE_", value = {
|
||||||
BITS_PER_SAMPLE_NONE,
|
BITS_PER_SAMPLE_NONE,
|
||||||
@@ -137,19 +173,27 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface BitsPerSample {}
|
public @interface BitsPerSample {}
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec bits per sample 0. Default value of the codec
|
||||||
|
* bits per sample.
|
||||||
|
*/
|
||||||
public static final int BITS_PER_SAMPLE_NONE = 0;
|
public static final int BITS_PER_SAMPLE_NONE = 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec bits per sample 16.
|
||||||
|
*/
|
||||||
public static final int BITS_PER_SAMPLE_16 = 0x1 << 0;
|
public static final int BITS_PER_SAMPLE_16 = 0x1 << 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec bits per sample 24.
|
||||||
|
*/
|
||||||
public static final int BITS_PER_SAMPLE_24 = 0x1 << 1;
|
public static final int BITS_PER_SAMPLE_24 = 0x1 << 1;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec bits per sample 32.
|
||||||
|
*/
|
||||||
public static final int BITS_PER_SAMPLE_32 = 0x1 << 2;
|
public static final int BITS_PER_SAMPLE_32 = 0x1 << 2;
|
||||||
|
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@IntDef(prefix = "CHANNEL_MODE_", value = {
|
@IntDef(prefix = "CHANNEL_MODE_", value = {
|
||||||
CHANNEL_MODE_NONE,
|
CHANNEL_MODE_NONE,
|
||||||
@@ -159,13 +203,20 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface ChannelMode {}
|
public @interface ChannelMode {}
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec channel mode NONE. Default value of the
|
||||||
|
* codec channel mode.
|
||||||
|
*/
|
||||||
public static final int CHANNEL_MODE_NONE = 0;
|
public static final int CHANNEL_MODE_NONE = 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec channel mode MONO.
|
||||||
|
*/
|
||||||
public static final int CHANNEL_MODE_MONO = 0x1 << 0;
|
public static final int CHANNEL_MODE_MONO = 0x1 << 0;
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Codec channel mode STEREO.
|
||||||
|
*/
|
||||||
public static final int CHANNEL_MODE_STEREO = 0x1 << 1;
|
public static final int CHANNEL_MODE_STEREO = 0x1 << 1;
|
||||||
|
|
||||||
private final @SourceCodecType int mCodecType;
|
private final @SourceCodecType int mCodecType;
|
||||||
@@ -178,6 +229,21 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
private final long mCodecSpecific3;
|
private final long mCodecSpecific3;
|
||||||
private final long mCodecSpecific4;
|
private final long mCodecSpecific4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new BluetoothCodecConfig.
|
||||||
|
*
|
||||||
|
* @param codecType the source codec type
|
||||||
|
* @param codecPriority the priority of this codec
|
||||||
|
* @param sampleRate the codec sample rate
|
||||||
|
* @param bitsPerSample the bits per sample of this codec
|
||||||
|
* @param channelMode the channel mode of this codec
|
||||||
|
* @param codecSpecific1 the specific value 1
|
||||||
|
* @param codecSpecific2 the specific value 2
|
||||||
|
* @param codecSpecific3 the specific value 3
|
||||||
|
* @param codecSpecific4 the specific value 4
|
||||||
|
* values to 0.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
@UnsupportedAppUsage
|
@UnsupportedAppUsage
|
||||||
public BluetoothCodecConfig(@SourceCodecType int codecType, @CodecPriority int codecPriority,
|
public BluetoothCodecConfig(@SourceCodecType int codecType, @CodecPriority int codecPriority,
|
||||||
@SampleRate int sampleRate, @BitsPerSample int bitsPerSample,
|
@SampleRate int sampleRate, @BitsPerSample int bitsPerSample,
|
||||||
@@ -195,17 +261,34 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
mCodecSpecific4 = codecSpecific4;
|
mCodecSpecific4 = codecSpecific4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnsupportedAppUsage
|
/**
|
||||||
|
* Creates a new BluetoothCodecConfig.
|
||||||
|
* <p> By default, the codec priority will be set
|
||||||
|
* to {@link BluetoothCodecConfig#CODEC_PRIORITY_DEFAULT}, the sample rate to
|
||||||
|
* {@link BluetoothCodecConfig#SAMPLE_RATE_NONE}, the bits per sample to
|
||||||
|
* {@link BluetoothCodecConfig#BITS_PER_SAMPLE_NONE}, the channel mode to
|
||||||
|
* {@link BluetoothCodecConfig#CHANNEL_MODE_NONE}, and all the codec specific
|
||||||
|
* values to 0.
|
||||||
|
*
|
||||||
|
* @param codecType the source codec type
|
||||||
|
*/
|
||||||
public BluetoothCodecConfig(@SourceCodecType int codecType) {
|
public BluetoothCodecConfig(@SourceCodecType int codecType) {
|
||||||
mCodecType = codecType;
|
this(codecType, BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
mCodecPriority = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
|
BluetoothCodecConfig.SAMPLE_RATE_NONE,
|
||||||
mSampleRate = BluetoothCodecConfig.SAMPLE_RATE_NONE;
|
BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
|
||||||
mBitsPerSample = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE;
|
BluetoothCodecConfig.CHANNEL_MODE_NONE, 0, 0, 0, 0);
|
||||||
mChannelMode = BluetoothCodecConfig.CHANNEL_MODE_NONE;
|
}
|
||||||
mCodecSpecific1 = 0;
|
|
||||||
mCodecSpecific2 = 0;
|
private BluetoothCodecConfig(Parcel in) {
|
||||||
mCodecSpecific3 = 0;
|
mCodecType = in.readInt();
|
||||||
mCodecSpecific4 = 0;
|
mCodecPriority = in.readInt();
|
||||||
|
mSampleRate = in.readInt();
|
||||||
|
mBitsPerSample = in.readInt();
|
||||||
|
mChannelMode = in.readInt();
|
||||||
|
mCodecSpecific1 = in.readLong();
|
||||||
|
mCodecSpecific2 = in.readLong();
|
||||||
|
mCodecSpecific3 = in.readLong();
|
||||||
|
mCodecSpecific4 = in.readLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -226,10 +309,8 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a hash based on the config values
|
* Returns a hash representation of this BluetoothCodecConfig
|
||||||
*
|
* based on all the config values.
|
||||||
* @return a hash based on the config values
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
@@ -238,33 +319,25 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
mCodecSpecific2, mCodecSpecific3, mCodecSpecific4);
|
mCodecSpecific2, mCodecSpecific3, mCodecSpecific4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether the object contains valid codec configuration.
|
|
||||||
*
|
|
||||||
* @return true if the object contains valid codec configuration, otherwise false.
|
|
||||||
* @hide
|
|
||||||
*/
|
|
||||||
public boolean isValid() {
|
|
||||||
return (mSampleRate != SAMPLE_RATE_NONE)
|
|
||||||
&& (mBitsPerSample != BITS_PER_SAMPLE_NONE)
|
|
||||||
&& (mChannelMode != CHANNEL_MODE_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds capability string to an existing string.
|
* Adds capability string to an existing string.
|
||||||
*
|
*
|
||||||
* @param prevStr the previous string with the capabilities. Can be a null pointer.
|
* @param prevStr the previous string with the capabilities. Can be a {@code null} pointer
|
||||||
* @param capStr the capability string to append to prevStr argument.
|
* @param capStr the capability string to append to prevStr argument
|
||||||
* @return the result string in the form "prevStr|capStr".
|
* @return the result string in the form "prevStr|capStr"
|
||||||
*/
|
*/
|
||||||
private static String appendCapabilityToString(String prevStr,
|
private static String appendCapabilityToString(@Nullable String prevStr,
|
||||||
String capStr) {
|
@NonNull String capStr) {
|
||||||
if (prevStr == null) {
|
if (prevStr == null) {
|
||||||
return capStr;
|
return capStr;
|
||||||
}
|
}
|
||||||
return prevStr + "|" + capStr;
|
return prevStr + "|" + capStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a {@link String} that describes each BluetoothCodecConfig parameter
|
||||||
|
* current value.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
String sampleRateStr = null;
|
String sampleRateStr = null;
|
||||||
@@ -331,8 +404,6 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Always returns 0
|
|
||||||
*
|
|
||||||
* @return 0
|
* @return 0
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -344,20 +415,7 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
public static final @android.annotation.NonNull Parcelable.Creator<BluetoothCodecConfig> CREATOR =
|
public static final @android.annotation.NonNull Parcelable.Creator<BluetoothCodecConfig> CREATOR =
|
||||||
new Parcelable.Creator<BluetoothCodecConfig>() {
|
new Parcelable.Creator<BluetoothCodecConfig>() {
|
||||||
public BluetoothCodecConfig createFromParcel(Parcel in) {
|
public BluetoothCodecConfig createFromParcel(Parcel in) {
|
||||||
final int codecType = in.readInt();
|
return new BluetoothCodecConfig(in);
|
||||||
final int codecPriority = in.readInt();
|
|
||||||
final int sampleRate = in.readInt();
|
|
||||||
final int bitsPerSample = in.readInt();
|
|
||||||
final int channelMode = in.readInt();
|
|
||||||
final long codecSpecific1 = in.readLong();
|
|
||||||
final long codecSpecific2 = in.readLong();
|
|
||||||
final long codecSpecific3 = in.readLong();
|
|
||||||
final long codecSpecific4 = in.readLong();
|
|
||||||
return new BluetoothCodecConfig(codecType, codecPriority,
|
|
||||||
sampleRate, bitsPerSample,
|
|
||||||
channelMode, codecSpecific1,
|
|
||||||
codecSpecific2, codecSpecific3,
|
|
||||||
codecSpecific4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothCodecConfig[] newArray(int size) {
|
public BluetoothCodecConfig[] newArray(int size) {
|
||||||
@@ -368,8 +426,8 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Flattens the object to a parcel
|
* Flattens the object to a parcel
|
||||||
*
|
*
|
||||||
* @param out The Parcel in which the object should be written.
|
* @param out The Parcel in which the object should be written
|
||||||
* @param flags Additional flags about how the object should be written.
|
* @param flags Additional flags about how the object should be written
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -387,9 +445,8 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codec name.
|
* Returns the codec name converted to {@link String}.
|
||||||
*
|
* @hide
|
||||||
* @return the codec name
|
|
||||||
*/
|
*/
|
||||||
public @NonNull String getCodecName() {
|
public @NonNull String getCodecName() {
|
||||||
switch (mCodecType) {
|
switch (mCodecType) {
|
||||||
@@ -412,137 +469,100 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codec type.
|
* Returns the source codec type of this config.
|
||||||
* See {@link android.bluetooth.BluetoothCodecConfig#SOURCE_CODEC_TYPE_SBC}.
|
|
||||||
*
|
|
||||||
* @return the codec type
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public @SourceCodecType int getCodecType() {
|
public @SourceCodecType int getCodecType() {
|
||||||
return mCodecType;
|
return mCodecType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the valid codec types count.
|
||||||
|
*/
|
||||||
|
public static int getMaxCodecType() {
|
||||||
|
return SOURCE_CODEC_TYPE_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the codec is mandatory.
|
* Checks whether the codec is mandatory.
|
||||||
|
* <p> The actual mandatory codec type for Android Bluetooth audio is SBC.
|
||||||
|
* See {@link #SOURCE_CODEC_TYPE_SBC}.
|
||||||
*
|
*
|
||||||
* @return true if the codec is mandatory, otherwise false.
|
* @return {@code true} if the codec is mandatory, {@code false} otherwise
|
||||||
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean isMandatoryCodec() {
|
public boolean isMandatoryCodec() {
|
||||||
return mCodecType == SOURCE_CODEC_TYPE_SBC;
|
return mCodecType == SOURCE_CODEC_TYPE_SBC;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codec selection priority.
|
* Returns the codec selection priority.
|
||||||
* The codec selection priority is relative to other codecs: larger value
|
* <p>The codec selection priority is relative to other codecs: larger value
|
||||||
* means higher priority. If 0, reset to default.
|
* means higher priority.
|
||||||
*
|
|
||||||
* @return the codec priority
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public @CodecPriority int getCodecPriority() {
|
public @CodecPriority int getCodecPriority() {
|
||||||
return mCodecPriority;
|
return mCodecPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the codec selection priority.
|
* Sets the codec selection priority.
|
||||||
* The codec selection priority is relative to other codecs: larger value
|
* <p>The codec selection priority is relative to other codecs: larger value
|
||||||
* means higher priority. If 0, reset to default.
|
* means higher priority.
|
||||||
*
|
*
|
||||||
* @param codecPriority the codec priority
|
* @param codecPriority the priority this codec should have
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public void setCodecPriority(@CodecPriority int codecPriority) {
|
public void setCodecPriority(@CodecPriority int codecPriority) {
|
||||||
mCodecPriority = codecPriority;
|
mCodecPriority = codecPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codec sample rate. The value can be a bitmask with all
|
* Returns the codec sample rate. The value can be a bitmask with all
|
||||||
* supported sample rates:
|
* supported sample rates.
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_NONE} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_44100} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_48000} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_88200} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_96000} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_176400} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#SAMPLE_RATE_192000}
|
|
||||||
*
|
|
||||||
* @return the codec sample rate
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public @SampleRate int getSampleRate() {
|
public @SampleRate int getSampleRate() {
|
||||||
return mSampleRate;
|
return mSampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codec bits per sample. The value can be a bitmask with all
|
* Returns the codec bits per sample. The value can be a bitmask with all
|
||||||
* bits per sample supported:
|
* bits per sample supported.
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#BITS_PER_SAMPLE_NONE} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#BITS_PER_SAMPLE_16} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#BITS_PER_SAMPLE_24} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#BITS_PER_SAMPLE_32}
|
|
||||||
*
|
|
||||||
* @return the codec bits per sample
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public @BitsPerSample int getBitsPerSample() {
|
public @BitsPerSample int getBitsPerSample() {
|
||||||
return mBitsPerSample;
|
return mBitsPerSample;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codec channel mode. The value can be a bitmask with all
|
* Returns the codec channel mode. The value can be a bitmask with all
|
||||||
* supported channel modes:
|
* supported channel modes.
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#CHANNEL_MODE_NONE} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#CHANNEL_MODE_MONO} or
|
|
||||||
* {@link android.bluetooth.BluetoothCodecConfig#CHANNEL_MODE_STEREO}
|
|
||||||
*
|
|
||||||
* @return the codec channel mode
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public @ChannelMode int getChannelMode() {
|
public @ChannelMode int getChannelMode() {
|
||||||
return mChannelMode;
|
return mChannelMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a codec specific value1.
|
* Returns the codec specific value1.
|
||||||
*
|
|
||||||
* @return a codec specific value1.
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public long getCodecSpecific1() {
|
public long getCodecSpecific1() {
|
||||||
return mCodecSpecific1;
|
return mCodecSpecific1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a codec specific value2.
|
* Returns the codec specific value2.
|
||||||
*
|
|
||||||
* @return a codec specific value2
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public long getCodecSpecific2() {
|
public long getCodecSpecific2() {
|
||||||
return mCodecSpecific2;
|
return mCodecSpecific2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a codec specific value3.
|
* Returns the codec specific value3.
|
||||||
*
|
|
||||||
* @return a codec specific value3
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public long getCodecSpecific3() {
|
public long getCodecSpecific3() {
|
||||||
return mCodecSpecific3;
|
return mCodecSpecific3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a codec specific value4.
|
* Returns the codec specific value4.
|
||||||
*
|
|
||||||
* @return a codec specific value4
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public long getCodecSpecific4() {
|
public long getCodecSpecific4() {
|
||||||
return mCodecSpecific4;
|
return mCodecSpecific4;
|
||||||
}
|
}
|
||||||
@@ -551,7 +571,7 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
* Checks whether a value set presented by a bitmask has zero or single bit
|
* Checks whether a value set presented by a bitmask has zero or single bit
|
||||||
*
|
*
|
||||||
* @param valueSet the value set presented by a bitmask
|
* @param valueSet the value set presented by a bitmask
|
||||||
* @return true if the valueSet contains zero or single bit, otherwise false.
|
* @return {@code true} if the valueSet contains zero or single bit, {@code false} otherwise
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
private static boolean hasSingleBit(int valueSet) {
|
private static boolean hasSingleBit(int valueSet) {
|
||||||
@@ -559,9 +579,7 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the object contains none or single sample rate.
|
* Returns whether the object contains none or single sample rate.
|
||||||
*
|
|
||||||
* @return true if the object contains none or single sample rate, otherwise false.
|
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean hasSingleSampleRate() {
|
public boolean hasSingleSampleRate() {
|
||||||
@@ -569,9 +587,7 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the object contains none or single bits per sample.
|
* Returns whether the object contains none or single bits per sample.
|
||||||
*
|
|
||||||
* @return true if the object contains none or single bits per sample, otherwise false.
|
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean hasSingleBitsPerSample() {
|
public boolean hasSingleBitsPerSample() {
|
||||||
@@ -579,9 +595,7 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the object contains none or single channel mode.
|
* Returns whether the object contains none or single channel mode.
|
||||||
*
|
|
||||||
* @return true if the object contains none or single channel mode, otherwise false.
|
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean hasSingleChannelMode() {
|
public boolean hasSingleChannelMode() {
|
||||||
@@ -589,10 +603,10 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the audio feeding parameters are same.
|
* Checks whether the audio feeding parameters are the same.
|
||||||
*
|
*
|
||||||
* @param other the codec config to compare against
|
* @param other the codec config to compare against
|
||||||
* @return true if the audio feeding parameters are same, otherwise false
|
* @return {@code true} if the audio feeding parameters are same, {@code false} otherwise
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean sameAudioFeedingParameters(BluetoothCodecConfig other) {
|
public boolean sameAudioFeedingParameters(BluetoothCodecConfig other) {
|
||||||
@@ -606,7 +620,7 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
* Any parameters with NONE value will be considered to be a wildcard matching.
|
* Any parameters with NONE value will be considered to be a wildcard matching.
|
||||||
*
|
*
|
||||||
* @param other the codec config to compare against
|
* @param other the codec config to compare against
|
||||||
* @return true if the audio feeding parameters are similar, otherwise false.
|
* @return {@code true} if the audio feeding parameters are similar, {@code false} otherwise
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean similarCodecFeedingParameters(BluetoothCodecConfig other) {
|
public boolean similarCodecFeedingParameters(BluetoothCodecConfig other) {
|
||||||
@@ -614,18 +628,18 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int sampleRate = other.mSampleRate;
|
int sampleRate = other.mSampleRate;
|
||||||
if (mSampleRate == BluetoothCodecConfig.SAMPLE_RATE_NONE
|
if (mSampleRate == SAMPLE_RATE_NONE
|
||||||
|| sampleRate == BluetoothCodecConfig.SAMPLE_RATE_NONE) {
|
|| sampleRate == SAMPLE_RATE_NONE) {
|
||||||
sampleRate = mSampleRate;
|
sampleRate = mSampleRate;
|
||||||
}
|
}
|
||||||
int bitsPerSample = other.mBitsPerSample;
|
int bitsPerSample = other.mBitsPerSample;
|
||||||
if (mBitsPerSample == BluetoothCodecConfig.BITS_PER_SAMPLE_NONE
|
if (mBitsPerSample == BITS_PER_SAMPLE_NONE
|
||||||
|| bitsPerSample == BluetoothCodecConfig.BITS_PER_SAMPLE_NONE) {
|
|| bitsPerSample == BITS_PER_SAMPLE_NONE) {
|
||||||
bitsPerSample = mBitsPerSample;
|
bitsPerSample = mBitsPerSample;
|
||||||
}
|
}
|
||||||
int channelMode = other.mChannelMode;
|
int channelMode = other.mChannelMode;
|
||||||
if (mChannelMode == BluetoothCodecConfig.CHANNEL_MODE_NONE
|
if (mChannelMode == CHANNEL_MODE_NONE
|
||||||
|| channelMode == BluetoothCodecConfig.CHANNEL_MODE_NONE) {
|
|| channelMode == CHANNEL_MODE_NONE) {
|
||||||
channelMode = mChannelMode;
|
channelMode = mChannelMode;
|
||||||
}
|
}
|
||||||
return sameAudioFeedingParameters(new BluetoothCodecConfig(
|
return sameAudioFeedingParameters(new BluetoothCodecConfig(
|
||||||
@@ -636,25 +650,158 @@ public final class BluetoothCodecConfig implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the codec specific parameters are the same.
|
* Checks whether the codec specific parameters are the same.
|
||||||
|
* <p> Currently, only AAC VBR and LDAC Playback Quality on CodecSpecific1
|
||||||
|
* are compared.
|
||||||
*
|
*
|
||||||
* @param other the codec config to compare against
|
* @param other the codec config to compare against
|
||||||
* @return true if the codec specific parameters are the same, otherwise false.
|
* @return {@code true} if the codec specific parameters are the same, {@code false} otherwise
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean sameCodecSpecificParameters(BluetoothCodecConfig other) {
|
public boolean sameCodecSpecificParameters(BluetoothCodecConfig other) {
|
||||||
if (other == null && mCodecType != other.mCodecType) {
|
if (other == null && mCodecType != other.mCodecType) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Currently we only care about the AAC VBR and LDAC Playback Quality at CodecSpecific1
|
|
||||||
switch (mCodecType) {
|
switch (mCodecType) {
|
||||||
case SOURCE_CODEC_TYPE_AAC:
|
case SOURCE_CODEC_TYPE_AAC:
|
||||||
case SOURCE_CODEC_TYPE_LDAC:
|
case SOURCE_CODEC_TYPE_LDAC:
|
||||||
if (mCodecSpecific1 != other.mCodecSpecific1) {
|
if (mCodecSpecific1 != other.mCodecSpecific1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// fall through
|
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder for {@link BluetoothCodecConfig}.
|
||||||
|
* <p> By default, the codec type will be set to
|
||||||
|
* {@link BluetoothCodecConfig#SOURCE_CODEC_TYPE_INVALID}, the codec priority
|
||||||
|
* to {@link BluetoothCodecConfig#CODEC_PRIORITY_DEFAULT}, the sample rate to
|
||||||
|
* {@link BluetoothCodecConfig#SAMPLE_RATE_NONE}, the bits per sample to
|
||||||
|
* {@link BluetoothCodecConfig#BITS_PER_SAMPLE_NONE}, the channel mode to
|
||||||
|
* {@link BluetoothCodecConfig#CHANNEL_MODE_NONE}, and all the codec specific
|
||||||
|
* values to 0.
|
||||||
|
*/
|
||||||
|
public static final class Builder {
|
||||||
|
private int mCodecType = BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
|
||||||
|
private int mCodecPriority = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
|
||||||
|
private int mSampleRate = BluetoothCodecConfig.SAMPLE_RATE_NONE;
|
||||||
|
private int mBitsPerSample = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE;
|
||||||
|
private int mChannelMode = BluetoothCodecConfig.CHANNEL_MODE_NONE;
|
||||||
|
private long mCodecSpecific1 = 0;
|
||||||
|
private long mCodecSpecific2 = 0;
|
||||||
|
private long mCodecSpecific3 = 0;
|
||||||
|
private long mCodecSpecific4 = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set codec type for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param codecType of this codec
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setCodecType(@SourceCodecType int codecType) {
|
||||||
|
mCodecType = codecType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set codec priority for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param codecPriority of this codec
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setCodecPriority(@CodecPriority int codecPriority) {
|
||||||
|
mCodecPriority = codecPriority;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set sample rate for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param sampleRate of this codec
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setSampleRate(@SampleRate int sampleRate) {
|
||||||
|
mSampleRate = sampleRate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the bits per sample for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param bitsPerSample of this codec
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setBitsPerSample(@BitsPerSample int bitsPerSample) {
|
||||||
|
mBitsPerSample = bitsPerSample;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the channel mode for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param channelMode of this codec
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setChannelMode(@ChannelMode int channelMode) {
|
||||||
|
mChannelMode = channelMode;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the first codec specific values for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param codecSpecific1 codec specific value or 0 if default
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setCodecSpecific1(long codecSpecific1) {
|
||||||
|
mCodecSpecific1 = codecSpecific1;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the second codec specific values for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param codecSpecific2 codec specific value or 0 if default
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setCodecSpecific2(long codecSpecific2) {
|
||||||
|
mCodecSpecific2 = codecSpecific2;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the third codec specific values for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param codecSpecific3 codec specific value or 0 if default
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setCodecSpecific3(long codecSpecific3) {
|
||||||
|
mCodecSpecific3 = codecSpecific3;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the fourth codec specific values for Bluetooth codec config.
|
||||||
|
*
|
||||||
|
* @param codecSpecific4 codec specific value or 0 if default
|
||||||
|
* @return the same Builder instance
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setCodecSpecific4(long codecSpecific4) {
|
||||||
|
mCodecSpecific4 = codecSpecific4;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build {@link BluetoothCodecConfig}.
|
||||||
|
* @return new BluetoothCodecConfig built
|
||||||
|
*/
|
||||||
|
public @NonNull BluetoothCodecConfig build() {
|
||||||
|
return new BluetoothCodecConfig(mCodecType, mCodecPriority,
|
||||||
|
mSampleRate, mBitsPerSample,
|
||||||
|
mChannelMode, mCodecSpecific1,
|
||||||
|
mCodecSpecific2, mCodecSpecific3,
|
||||||
|
mCodecSpecific4);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,13 @@
|
|||||||
|
|
||||||
package android.bluetooth;
|
package android.bluetooth;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.compat.annotation.UnsupportedAppUsage;
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,8 +30,6 @@ import java.util.Objects;
|
|||||||
* A2DP source device.
|
* A2DP source device.
|
||||||
*
|
*
|
||||||
* {@see BluetoothA2dp}
|
* {@see BluetoothA2dp}
|
||||||
*
|
|
||||||
* {@hide}
|
|
||||||
*/
|
*/
|
||||||
public final class BluetoothCodecStatus implements Parcelable {
|
public final class BluetoothCodecStatus implements Parcelable {
|
||||||
/**
|
/**
|
||||||
@@ -39,22 +38,27 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
* This extra represents the current codec status of the A2DP
|
* This extra represents the current codec status of the A2DP
|
||||||
* profile.
|
* profile.
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public static final String EXTRA_CODEC_STATUS =
|
public static final String EXTRA_CODEC_STATUS =
|
||||||
"android.bluetooth.extra.CODEC_STATUS";
|
"android.bluetooth.extra.CODEC_STATUS";
|
||||||
|
|
||||||
private final @Nullable BluetoothCodecConfig mCodecConfig;
|
private final @Nullable BluetoothCodecConfig mCodecConfig;
|
||||||
private final BluetoothCodecConfig[] mCodecsLocalCapabilities;
|
private final @Nullable List<BluetoothCodecConfig> mCodecsLocalCapabilities;
|
||||||
private final BluetoothCodecConfig[] mCodecsSelectableCapabilities;
|
private final @Nullable List<BluetoothCodecConfig> mCodecsSelectableCapabilities;
|
||||||
|
|
||||||
public BluetoothCodecStatus(@Nullable BluetoothCodecConfig codecConfig,
|
public BluetoothCodecStatus(@Nullable BluetoothCodecConfig codecConfig,
|
||||||
@Nullable BluetoothCodecConfig[] codecsLocalCapabilities,
|
@Nullable List<BluetoothCodecConfig> codecsLocalCapabilities,
|
||||||
@Nullable BluetoothCodecConfig[] codecsSelectableCapabilities) {
|
@Nullable List<BluetoothCodecConfig> codecsSelectableCapabilities) {
|
||||||
mCodecConfig = codecConfig;
|
mCodecConfig = codecConfig;
|
||||||
mCodecsLocalCapabilities = codecsLocalCapabilities;
|
mCodecsLocalCapabilities = codecsLocalCapabilities;
|
||||||
mCodecsSelectableCapabilities = codecsSelectableCapabilities;
|
mCodecsSelectableCapabilities = codecsSelectableCapabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BluetoothCodecStatus(Parcel in) {
|
||||||
|
mCodecConfig = in.readTypedObject(BluetoothCodecConfig.CREATOR);
|
||||||
|
mCodecsLocalCapabilities = in.createTypedArrayList(BluetoothCodecConfig.CREATOR);
|
||||||
|
mCodecsSelectableCapabilities = in.createTypedArrayList(BluetoothCodecConfig.CREATOR);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(@Nullable Object o) {
|
public boolean equals(@Nullable Object o) {
|
||||||
if (o instanceof BluetoothCodecStatus) {
|
if (o instanceof BluetoothCodecStatus) {
|
||||||
@@ -68,26 +72,25 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether two arrays of capabilities contain same capabilities.
|
* Checks whether two lists of capabilities contain same capabilities.
|
||||||
* The order of the capabilities in each array is ignored.
|
* The order of the capabilities in each list is ignored.
|
||||||
*
|
*
|
||||||
* @param c1 the first array of capabilities to compare
|
* @param c1 the first list of capabilities to compare
|
||||||
* @param c2 the second array of capabilities to compare
|
* @param c2 the second list of capabilities to compare
|
||||||
* @return true if both arrays contain same capabilities
|
* @return {@code true} if both lists contain same capabilities
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
public static boolean sameCapabilities(BluetoothCodecConfig[] c1,
|
private static boolean sameCapabilities(@Nullable List<BluetoothCodecConfig> c1,
|
||||||
BluetoothCodecConfig[] c2) {
|
@Nullable List<BluetoothCodecConfig> c2) {
|
||||||
if (c1 == null) {
|
if (c1 == null) {
|
||||||
return (c2 == null);
|
return (c2 == null);
|
||||||
}
|
}
|
||||||
if (c2 == null) {
|
if (c2 == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (c1.length != c2.length) {
|
if (c1.size() != c2.size()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return Arrays.asList(c1).containsAll(Arrays.asList(c2));
|
return c1.containsAll(c2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,10 +98,9 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
* Any parameters of the codec config with NONE value will be considered a wildcard matching.
|
* Any parameters of the codec config with NONE value will be considered a wildcard matching.
|
||||||
*
|
*
|
||||||
* @param codecConfig the codec config to compare against
|
* @param codecConfig the codec config to compare against
|
||||||
* @return true if the codec config matches, otherwise false
|
* @return {@code true} if the codec config matches, {@code false} otherwise
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
public boolean isCodecConfigSelectable(BluetoothCodecConfig codecConfig) {
|
public boolean isCodecConfigSelectable(@Nullable BluetoothCodecConfig codecConfig) {
|
||||||
if (codecConfig == null || !codecConfig.hasSingleSampleRate()
|
if (codecConfig == null || !codecConfig.hasSingleSampleRate()
|
||||||
|| !codecConfig.hasSingleBitsPerSample() || !codecConfig.hasSingleChannelMode()) {
|
|| !codecConfig.hasSingleBitsPerSample() || !codecConfig.hasSingleChannelMode()) {
|
||||||
return false;
|
return false;
|
||||||
@@ -128,10 +130,7 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a hash based on the codec config and local capabilities
|
* Returns a hash based on the codec config and local capabilities.
|
||||||
*
|
|
||||||
* @return a hash based on the config values
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
@@ -139,17 +138,19 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
mCodecsLocalCapabilities);
|
mCodecsLocalCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a {@link String} that describes each BluetoothCodecStatus parameter
|
||||||
|
* current value.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{mCodecConfig:" + mCodecConfig
|
return "{mCodecConfig:" + mCodecConfig
|
||||||
+ ",mCodecsLocalCapabilities:" + Arrays.toString(mCodecsLocalCapabilities)
|
+ ",mCodecsLocalCapabilities:" + mCodecsLocalCapabilities
|
||||||
+ ",mCodecsSelectableCapabilities:" + Arrays.toString(mCodecsSelectableCapabilities)
|
+ ",mCodecsSelectableCapabilities:" + mCodecsSelectableCapabilities
|
||||||
+ "}";
|
+ "}";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Always returns 0
|
|
||||||
*
|
|
||||||
* @return 0
|
* @return 0
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -161,16 +162,7 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
public static final @android.annotation.NonNull Parcelable.Creator<BluetoothCodecStatus> CREATOR =
|
public static final @android.annotation.NonNull Parcelable.Creator<BluetoothCodecStatus> CREATOR =
|
||||||
new Parcelable.Creator<BluetoothCodecStatus>() {
|
new Parcelable.Creator<BluetoothCodecStatus>() {
|
||||||
public BluetoothCodecStatus createFromParcel(Parcel in) {
|
public BluetoothCodecStatus createFromParcel(Parcel in) {
|
||||||
final BluetoothCodecConfig codecConfig = in.readTypedObject(
|
return new BluetoothCodecStatus(in);
|
||||||
BluetoothCodecConfig.CREATOR);
|
|
||||||
final BluetoothCodecConfig[] codecsLocalCapabilities = in.createTypedArray(
|
|
||||||
BluetoothCodecConfig.CREATOR);
|
|
||||||
final BluetoothCodecConfig[] codecsSelectableCapabilities = in.createTypedArray(
|
|
||||||
BluetoothCodecConfig.CREATOR);
|
|
||||||
|
|
||||||
return new BluetoothCodecStatus(codecConfig,
|
|
||||||
codecsLocalCapabilities,
|
|
||||||
codecsSelectableCapabilities);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothCodecStatus[] newArray(int size) {
|
public BluetoothCodecStatus[] newArray(int size) {
|
||||||
@@ -179,47 +171,38 @@ public final class BluetoothCodecStatus implements Parcelable {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flattens the object to a parcel
|
* Flattens the object to a parcel.
|
||||||
*
|
*
|
||||||
* @param out The Parcel in which the object should be written.
|
* @param out The Parcel in which the object should be written
|
||||||
* @param flags Additional flags about how the object should be written.
|
* @param flags Additional flags about how the object should be written
|
||||||
*
|
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel out, int flags) {
|
public void writeToParcel(@NonNull Parcel out, int flags) {
|
||||||
out.writeTypedObject(mCodecConfig, 0);
|
out.writeTypedObject(mCodecConfig, 0);
|
||||||
out.writeTypedArray(mCodecsLocalCapabilities, 0);
|
out.writeTypedList(mCodecsLocalCapabilities);
|
||||||
out.writeTypedArray(mCodecsSelectableCapabilities, 0);
|
out.writeTypedList(mCodecsSelectableCapabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current codec configuration.
|
* Returns the current codec configuration.
|
||||||
*
|
|
||||||
* @return the current codec configuration
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
|
||||||
public @Nullable BluetoothCodecConfig getCodecConfig() {
|
public @Nullable BluetoothCodecConfig getCodecConfig() {
|
||||||
return mCodecConfig;
|
return mCodecConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codecs local capabilities.
|
* Returns the codecs local capabilities.
|
||||||
*
|
|
||||||
* @return an array with the codecs local capabilities
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
public @NonNull List<BluetoothCodecConfig> getCodecsLocalCapabilities() {
|
||||||
public @Nullable BluetoothCodecConfig[] getCodecsLocalCapabilities() {
|
return (mCodecsLocalCapabilities == null)
|
||||||
return mCodecsLocalCapabilities;
|
? Collections.emptyList() : mCodecsLocalCapabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the codecs selectable capabilities.
|
* Returns the codecs selectable capabilities.
|
||||||
*
|
|
||||||
* @return an array with the codecs selectable capabilities
|
|
||||||
*/
|
*/
|
||||||
@UnsupportedAppUsage
|
public @NonNull List<BluetoothCodecConfig> getCodecsSelectableCapabilities() {
|
||||||
public @Nullable BluetoothCodecConfig[] getCodecsSelectableCapabilities() {
|
return (mCodecsSelectableCapabilities == null)
|
||||||
return mCodecsSelectableCapabilities;
|
? Collections.emptyList() : mCodecsSelectableCapabilities;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package android.bluetooth;
|
package android.bluetooth;
|
||||||
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
@@ -34,7 +33,6 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.SOURCE_CODEC_TYPE_MAX,
|
|
||||||
BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID,
|
BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID,
|
||||||
};
|
};
|
||||||
private static final int[] kCodecPriorityArray = new int[] {
|
private static final int[] kCodecPriorityArray = new int[] {
|
||||||
@@ -168,20 +166,11 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
long codec_specific3 = selectCodecSpecific3(config_id);
|
long codec_specific3 = selectCodecSpecific3(config_id);
|
||||||
long codec_specific4 = selectCodecSpecific4(config_id);
|
long codec_specific4 = selectCodecSpecific4(config_id);
|
||||||
|
|
||||||
BluetoothCodecConfig bcc = new BluetoothCodecConfig(codec_type, codec_priority,
|
BluetoothCodecConfig bcc = buildBluetoothCodecConfig(codec_type, codec_priority,
|
||||||
sample_rate, bits_per_sample,
|
sample_rate, bits_per_sample,
|
||||||
channel_mode, codec_specific1,
|
channel_mode, codec_specific1,
|
||||||
codec_specific2, codec_specific3,
|
codec_specific2, codec_specific3,
|
||||||
codec_specific4);
|
codec_specific4);
|
||||||
if (sample_rate == BluetoothCodecConfig.SAMPLE_RATE_NONE) {
|
|
||||||
assertFalse(bcc.isValid());
|
|
||||||
} else if (bits_per_sample == BluetoothCodecConfig.BITS_PER_SAMPLE_NONE) {
|
|
||||||
assertFalse(bcc.isValid());
|
|
||||||
} else if (channel_mode == BluetoothCodecConfig.CHANNEL_MODE_NONE) {
|
|
||||||
assertFalse(bcc.isValid());
|
|
||||||
} else {
|
|
||||||
assertTrue(bcc.isValid());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC) {
|
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC) {
|
||||||
assertTrue(bcc.isMandatoryCodec());
|
assertTrue(bcc.isMandatoryCodec());
|
||||||
@@ -204,10 +193,6 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC) {
|
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC) {
|
||||||
assertEquals("LDAC", bcc.getCodecName());
|
assertEquals("LDAC", bcc.getCodecName());
|
||||||
}
|
}
|
||||||
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_MAX) {
|
|
||||||
assertEquals("UNKNOWN CODEC(" + BluetoothCodecConfig.SOURCE_CODEC_TYPE_MAX + ")",
|
|
||||||
bcc.getCodecName());
|
|
||||||
}
|
|
||||||
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID) {
|
if (codec_type == BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID) {
|
||||||
assertEquals("INVALID CODEC", bcc.getCodecName());
|
assertEquals("INVALID CODEC", bcc.getCodecName());
|
||||||
}
|
}
|
||||||
@@ -227,7 +212,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
@SmallTest
|
@SmallTest
|
||||||
public void testBluetoothCodecConfig_equals() {
|
public void testBluetoothCodecConfig_equals() {
|
||||||
BluetoothCodecConfig bcc1 =
|
BluetoothCodecConfig bcc1 =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -235,7 +220,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
BluetoothCodecConfig bcc2_same =
|
BluetoothCodecConfig bcc2_same =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -244,7 +229,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertTrue(bcc1.equals(bcc2_same));
|
assertTrue(bcc1.equals(bcc2_same));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc3_codec_type =
|
BluetoothCodecConfig bcc3_codec_type =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -253,7 +238,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc3_codec_type));
|
assertFalse(bcc1.equals(bcc3_codec_type));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc4_codec_priority =
|
BluetoothCodecConfig bcc4_codec_priority =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST,
|
BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -262,7 +247,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc4_codec_priority));
|
assertFalse(bcc1.equals(bcc4_codec_priority));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc5_sample_rate =
|
BluetoothCodecConfig bcc5_sample_rate =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -271,7 +256,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc5_sample_rate));
|
assertFalse(bcc1.equals(bcc5_sample_rate));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc6_bits_per_sample =
|
BluetoothCodecConfig bcc6_bits_per_sample =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
||||||
@@ -280,7 +265,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc6_bits_per_sample));
|
assertFalse(bcc1.equals(bcc6_bits_per_sample));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc7_channel_mode =
|
BluetoothCodecConfig bcc7_channel_mode =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -289,7 +274,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc7_channel_mode));
|
assertFalse(bcc1.equals(bcc7_channel_mode));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc8_codec_specific1 =
|
BluetoothCodecConfig bcc8_codec_specific1 =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -298,7 +283,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc8_codec_specific1));
|
assertFalse(bcc1.equals(bcc8_codec_specific1));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc9_codec_specific2 =
|
BluetoothCodecConfig bcc9_codec_specific2 =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -307,7 +292,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc9_codec_specific2));
|
assertFalse(bcc1.equals(bcc9_codec_specific2));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc10_codec_specific3 =
|
BluetoothCodecConfig bcc10_codec_specific3 =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -316,7 +301,7 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
assertFalse(bcc1.equals(bcc10_codec_specific3));
|
assertFalse(bcc1.equals(bcc10_codec_specific3));
|
||||||
|
|
||||||
BluetoothCodecConfig bcc11_codec_specific4 =
|
BluetoothCodecConfig bcc11_codec_specific4 =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -324,4 +309,21 @@ public class BluetoothCodecConfigTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4004);
|
1000, 2000, 3000, 4004);
|
||||||
assertFalse(bcc1.equals(bcc11_codec_specific4));
|
assertFalse(bcc1.equals(bcc11_codec_specific4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BluetoothCodecConfig buildBluetoothCodecConfig(int sourceCodecType,
|
||||||
|
int codecPriority, int sampleRate, int bitsPerSample, int channelMode,
|
||||||
|
long codecSpecific1, long codecSpecific2, long codecSpecific3, long codecSpecific4) {
|
||||||
|
return new BluetoothCodecConfig.Builder()
|
||||||
|
.setCodecType(sourceCodecType)
|
||||||
|
.setCodecPriority(codecPriority)
|
||||||
|
.setSampleRate(sampleRate)
|
||||||
|
.setBitsPerSample(bitsPerSample)
|
||||||
|
.setChannelMode(channelMode)
|
||||||
|
.setCodecSpecific1(codecSpecific1)
|
||||||
|
.setCodecSpecific2(codecSpecific2)
|
||||||
|
.setCodecSpecific3(codecSpecific3)
|
||||||
|
.setCodecSpecific4(codecSpecific4)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,13 +17,13 @@
|
|||||||
package android.bluetooth;
|
package android.bluetooth;
|
||||||
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit test cases for {@link BluetoothCodecStatus}.
|
* Unit test cases for {@link BluetoothCodecStatus}.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -34,7 +34,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
|
|
||||||
// Codec configs: A and B are same; C is different
|
// Codec configs: A and B are same; C is different
|
||||||
private static final BluetoothCodecConfig config_A =
|
private static final BluetoothCodecConfig config_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -42,7 +42,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig config_B =
|
private static final BluetoothCodecConfig config_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -50,7 +50,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig config_C =
|
private static final BluetoothCodecConfig config_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -59,7 +59,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
|
|
||||||
// Local capabilities: A and B are same; C is different
|
// Local capabilities: A and B are same; C is different
|
||||||
private static final BluetoothCodecConfig local_capability1_A =
|
private static final BluetoothCodecConfig local_capability1_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -69,7 +69,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability1_B =
|
private static final BluetoothCodecConfig local_capability1_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -79,7 +79,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability1_C =
|
private static final BluetoothCodecConfig local_capability1_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -89,7 +89,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
|
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability2_A =
|
private static final BluetoothCodecConfig local_capability2_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -99,7 +99,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability2_B =
|
private static final BluetoothCodecConfig local_capability2_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -109,7 +109,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability2_C =
|
private static final BluetoothCodecConfig local_capability2_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -118,7 +118,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability3_A =
|
private static final BluetoothCodecConfig local_capability3_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -128,7 +128,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability3_B =
|
private static final BluetoothCodecConfig local_capability3_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -138,7 +138,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability3_C =
|
private static final BluetoothCodecConfig local_capability3_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -147,7 +147,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability4_A =
|
private static final BluetoothCodecConfig local_capability4_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -157,7 +157,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability4_B =
|
private static final BluetoothCodecConfig local_capability4_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -167,7 +167,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability4_C =
|
private static final BluetoothCodecConfig local_capability4_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
BluetoothCodecConfig.SAMPLE_RATE_48000,
|
||||||
@@ -176,7 +176,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability5_A =
|
private static final BluetoothCodecConfig local_capability5_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
||||||
@@ -190,7 +190,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability5_B =
|
private static final BluetoothCodecConfig local_capability5_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
||||||
@@ -204,7 +204,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig local_capability5_C =
|
private static final BluetoothCodecConfig local_capability5_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
||||||
@@ -219,7 +219,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
|
|
||||||
// Selectable capabilities: A and B are same; C is different
|
// Selectable capabilities: A and B are same; C is different
|
||||||
private static final BluetoothCodecConfig selectable_capability1_A =
|
private static final BluetoothCodecConfig selectable_capability1_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -228,7 +228,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability1_B =
|
private static final BluetoothCodecConfig selectable_capability1_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -237,7 +237,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability1_C =
|
private static final BluetoothCodecConfig selectable_capability1_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -245,7 +245,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability2_A =
|
private static final BluetoothCodecConfig selectable_capability2_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -254,7 +254,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability2_B =
|
private static final BluetoothCodecConfig selectable_capability2_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -263,7 +263,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability2_C =
|
private static final BluetoothCodecConfig selectable_capability2_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -271,7 +271,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability3_A =
|
private static final BluetoothCodecConfig selectable_capability3_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -280,7 +280,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability3_B =
|
private static final BluetoothCodecConfig selectable_capability3_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -289,7 +289,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability3_C =
|
private static final BluetoothCodecConfig selectable_capability3_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_16,
|
||||||
@@ -297,7 +297,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability4_A =
|
private static final BluetoothCodecConfig selectable_capability4_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
||||||
@@ -306,7 +306,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability4_B =
|
private static final BluetoothCodecConfig selectable_capability4_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
||||||
@@ -315,7 +315,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability4_C =
|
private static final BluetoothCodecConfig selectable_capability4_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
BluetoothCodecConfig.SAMPLE_RATE_44100,
|
||||||
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
BluetoothCodecConfig.BITS_PER_SAMPLE_24,
|
||||||
@@ -323,7 +323,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability5_A =
|
private static final BluetoothCodecConfig selectable_capability5_A =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
||||||
@@ -337,7 +337,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability5_B =
|
private static final BluetoothCodecConfig selectable_capability5_B =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
||||||
@@ -351,7 +351,7 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig selectable_capability5_C =
|
private static final BluetoothCodecConfig selectable_capability5_C =
|
||||||
new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
buildBluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
|
||||||
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
BluetoothCodecConfig.SAMPLE_RATE_44100 |
|
||||||
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
BluetoothCodecConfig.SAMPLE_RATE_48000 |
|
||||||
@@ -363,79 +363,87 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
BluetoothCodecConfig.CHANNEL_MODE_STEREO,
|
BluetoothCodecConfig.CHANNEL_MODE_STEREO,
|
||||||
1000, 2000, 3000, 4000);
|
1000, 2000, 3000, 4000);
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] local_capability_A = {
|
private static final List<BluetoothCodecConfig> LOCAL_CAPABILITY_A =
|
||||||
local_capability1_A,
|
new ArrayList() {{
|
||||||
local_capability2_A,
|
add(local_capability1_A);
|
||||||
local_capability3_A,
|
add(local_capability2_A);
|
||||||
local_capability4_A,
|
add(local_capability3_A);
|
||||||
local_capability5_A,
|
add(local_capability4_A);
|
||||||
};
|
add(local_capability5_A);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] local_capability_B = {
|
private static final List<BluetoothCodecConfig> LOCAL_CAPABILITY_B =
|
||||||
local_capability1_B,
|
new ArrayList() {{
|
||||||
local_capability2_B,
|
add(local_capability1_B);
|
||||||
local_capability3_B,
|
add(local_capability2_B);
|
||||||
local_capability4_B,
|
add(local_capability3_B);
|
||||||
local_capability5_B,
|
add(local_capability4_B);
|
||||||
};
|
add(local_capability5_B);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] local_capability_B_reordered = {
|
private static final List<BluetoothCodecConfig> LOCAL_CAPABILITY_B_REORDERED =
|
||||||
local_capability5_B,
|
new ArrayList() {{
|
||||||
local_capability4_B,
|
add(local_capability5_B);
|
||||||
local_capability2_B,
|
add(local_capability4_B);
|
||||||
local_capability3_B,
|
add(local_capability2_B);
|
||||||
local_capability1_B,
|
add(local_capability3_B);
|
||||||
};
|
add(local_capability1_B);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] local_capability_C = {
|
private static final List<BluetoothCodecConfig> LOCAL_CAPABILITY_C =
|
||||||
local_capability1_C,
|
new ArrayList() {{
|
||||||
local_capability2_C,
|
add(local_capability1_C);
|
||||||
local_capability3_C,
|
add(local_capability2_C);
|
||||||
local_capability4_C,
|
add(local_capability3_C);
|
||||||
local_capability5_C,
|
add(local_capability4_C);
|
||||||
};
|
add(local_capability5_C);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] selectable_capability_A = {
|
private static final List<BluetoothCodecConfig> SELECTABLE_CAPABILITY_A =
|
||||||
selectable_capability1_A,
|
new ArrayList() {{
|
||||||
selectable_capability2_A,
|
add(selectable_capability1_A);
|
||||||
selectable_capability3_A,
|
add(selectable_capability2_A);
|
||||||
selectable_capability4_A,
|
add(selectable_capability3_A);
|
||||||
selectable_capability5_A,
|
add(selectable_capability4_A);
|
||||||
};
|
add(selectable_capability5_A);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] selectable_capability_B = {
|
private static final List<BluetoothCodecConfig> SELECTABLE_CAPABILITY_B =
|
||||||
selectable_capability1_B,
|
new ArrayList() {{
|
||||||
selectable_capability2_B,
|
add(selectable_capability1_B);
|
||||||
selectable_capability3_B,
|
add(selectable_capability2_B);
|
||||||
selectable_capability4_B,
|
add(selectable_capability3_B);
|
||||||
selectable_capability5_B,
|
add(selectable_capability4_B);
|
||||||
};
|
add(selectable_capability5_B);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] selectable_capability_B_reordered = {
|
private static final List<BluetoothCodecConfig> SELECTABLE_CAPABILITY_B_REORDERED =
|
||||||
selectable_capability5_B,
|
new ArrayList() {{
|
||||||
selectable_capability4_B,
|
add(selectable_capability5_B);
|
||||||
selectable_capability2_B,
|
add(selectable_capability4_B);
|
||||||
selectable_capability3_B,
|
add(selectable_capability2_B);
|
||||||
selectable_capability1_B,
|
add(selectable_capability3_B);
|
||||||
};
|
add(selectable_capability1_B);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecConfig[] selectable_capability_C = {
|
private static final List<BluetoothCodecConfig> SELECTABLE_CAPABILITY_C =
|
||||||
selectable_capability1_C,
|
new ArrayList() {{
|
||||||
selectable_capability2_C,
|
add(selectable_capability1_C);
|
||||||
selectable_capability3_C,
|
add(selectable_capability2_C);
|
||||||
selectable_capability4_C,
|
add(selectable_capability3_C);
|
||||||
selectable_capability5_C,
|
add(selectable_capability4_C);
|
||||||
};
|
add(selectable_capability5_C);
|
||||||
|
}};
|
||||||
|
|
||||||
private static final BluetoothCodecStatus bcs_A =
|
private static final BluetoothCodecStatus bcs_A =
|
||||||
new BluetoothCodecStatus(config_A, local_capability_A, selectable_capability_A);
|
new BluetoothCodecStatus(config_A, LOCAL_CAPABILITY_A, SELECTABLE_CAPABILITY_A);
|
||||||
private static final BluetoothCodecStatus bcs_B =
|
private static final BluetoothCodecStatus bcs_B =
|
||||||
new BluetoothCodecStatus(config_B, local_capability_B, selectable_capability_B);
|
new BluetoothCodecStatus(config_B, LOCAL_CAPABILITY_B, SELECTABLE_CAPABILITY_B);
|
||||||
private static final BluetoothCodecStatus bcs_B_reordered =
|
private static final BluetoothCodecStatus bcs_B_reordered =
|
||||||
new BluetoothCodecStatus(config_B, local_capability_B_reordered,
|
new BluetoothCodecStatus(config_B, LOCAL_CAPABILITY_B_REORDERED,
|
||||||
selectable_capability_B_reordered);
|
SELECTABLE_CAPABILITY_B_REORDERED);
|
||||||
private static final BluetoothCodecStatus bcs_C =
|
private static final BluetoothCodecStatus bcs_C =
|
||||||
new BluetoothCodecStatus(config_C, local_capability_C, selectable_capability_C);
|
new BluetoothCodecStatus(config_C, LOCAL_CAPABILITY_C, SELECTABLE_CAPABILITY_C);
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
public void testBluetoothCodecStatus_get_methods() {
|
public void testBluetoothCodecStatus_get_methods() {
|
||||||
@@ -444,16 +452,16 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
assertTrue(Objects.equals(bcs_A.getCodecConfig(), config_B));
|
assertTrue(Objects.equals(bcs_A.getCodecConfig(), config_B));
|
||||||
assertFalse(Objects.equals(bcs_A.getCodecConfig(), config_C));
|
assertFalse(Objects.equals(bcs_A.getCodecConfig(), config_C));
|
||||||
|
|
||||||
assertTrue(Arrays.equals(bcs_A.getCodecsLocalCapabilities(), local_capability_A));
|
assertTrue(bcs_A.getCodecsLocalCapabilities().equals(LOCAL_CAPABILITY_A));
|
||||||
assertTrue(Arrays.equals(bcs_A.getCodecsLocalCapabilities(), local_capability_B));
|
assertTrue(bcs_A.getCodecsLocalCapabilities().equals(LOCAL_CAPABILITY_B));
|
||||||
assertFalse(Arrays.equals(bcs_A.getCodecsLocalCapabilities(), local_capability_C));
|
assertFalse(bcs_A.getCodecsLocalCapabilities().equals(LOCAL_CAPABILITY_C));
|
||||||
|
|
||||||
assertTrue(Arrays.equals(bcs_A.getCodecsSelectableCapabilities(),
|
assertTrue(bcs_A.getCodecsSelectableCapabilities()
|
||||||
selectable_capability_A));
|
.equals(SELECTABLE_CAPABILITY_A));
|
||||||
assertTrue(Arrays.equals(bcs_A.getCodecsSelectableCapabilities(),
|
assertTrue(bcs_A.getCodecsSelectableCapabilities()
|
||||||
selectable_capability_B));
|
.equals(SELECTABLE_CAPABILITY_B));
|
||||||
assertFalse(Arrays.equals(bcs_A.getCodecsSelectableCapabilities(),
|
assertFalse(bcs_A.getCodecsSelectableCapabilities()
|
||||||
selectable_capability_C));
|
.equals(SELECTABLE_CAPABILITY_C));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@@ -465,4 +473,21 @@ public class BluetoothCodecStatusTest extends TestCase {
|
|||||||
assertFalse(bcs_A.equals(bcs_C));
|
assertFalse(bcs_A.equals(bcs_C));
|
||||||
assertFalse(bcs_C.equals(bcs_A));
|
assertFalse(bcs_C.equals(bcs_A));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static BluetoothCodecConfig buildBluetoothCodecConfig(int sourceCodecType,
|
||||||
|
int codecPriority, int sampleRate, int bitsPerSample, int channelMode,
|
||||||
|
long codecSpecific1, long codecSpecific2, long codecSpecific3, long codecSpecific4) {
|
||||||
|
return new BluetoothCodecConfig.Builder()
|
||||||
|
.setCodecType(sourceCodecType)
|
||||||
|
.setCodecPriority(codecPriority)
|
||||||
|
.setSampleRate(sampleRate)
|
||||||
|
.setBitsPerSample(bitsPerSample)
|
||||||
|
.setChannelMode(channelMode)
|
||||||
|
.setCodecSpecific1(codecSpecific1)
|
||||||
|
.setCodecSpecific2(codecSpecific2)
|
||||||
|
.setCodecSpecific3(codecSpecific3)
|
||||||
|
.setCodecSpecific4(codecSpecific4)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,13 +28,16 @@ import android.bluetooth.BluetoothDevice;
|
|||||||
import android.bluetooth.BluetoothProfile;
|
import android.bluetooth.BluetoothProfile;
|
||||||
import android.bluetooth.BluetoothUuid;
|
import android.bluetooth.BluetoothUuid;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.ParcelUuid;
|
import android.os.ParcelUuid;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
|
|
||||||
import com.android.settingslib.R;
|
import com.android.settingslib.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class A2dpProfile implements LocalBluetoothProfile {
|
public class A2dpProfile implements LocalBluetoothProfile {
|
||||||
@@ -226,6 +229,10 @@ public class A2dpProfile implements LocalBluetoothProfile {
|
|||||||
return support == BluetoothA2dp.OPTIONAL_CODECS_SUPPORTED;
|
return support == BluetoothA2dp.OPTIONAL_CODECS_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return whether high quality audio is enabled or not
|
||||||
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public boolean isHighQualityAudioEnabled(BluetoothDevice device) {
|
public boolean isHighQualityAudioEnabled(BluetoothDevice device) {
|
||||||
BluetoothDevice bluetoothDevice = (device != null) ? device : mService.getActiveDevice();
|
BluetoothDevice bluetoothDevice = (device != null) ? device : mService.getActiveDevice();
|
||||||
if (bluetoothDevice == null) {
|
if (bluetoothDevice == null) {
|
||||||
@@ -271,6 +278,13 @@ public class A2dpProfile implements LocalBluetoothProfile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the label associated with the codec of a Bluetooth device.
|
||||||
|
*
|
||||||
|
* @param device to get codec label from
|
||||||
|
* @return the label associated with the device codec
|
||||||
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public String getHighQualityAudioOptionLabel(BluetoothDevice device) {
|
public String getHighQualityAudioOptionLabel(BluetoothDevice device) {
|
||||||
BluetoothDevice bluetoothDevice = (device != null) ? device : mService.getActiveDevice();
|
BluetoothDevice bluetoothDevice = (device != null) ? device : mService.getActiveDevice();
|
||||||
int unknownCodecId = R.string.bluetooth_profile_a2dp_high_quality_unknown_codec;
|
int unknownCodecId = R.string.bluetooth_profile_a2dp_high_quality_unknown_codec;
|
||||||
@@ -280,18 +294,18 @@ public class A2dpProfile implements LocalBluetoothProfile {
|
|||||||
}
|
}
|
||||||
// We want to get the highest priority codec, since that's the one that will be used with
|
// We want to get the highest priority codec, since that's the one that will be used with
|
||||||
// this device, and see if it is high-quality (ie non-mandatory).
|
// this device, and see if it is high-quality (ie non-mandatory).
|
||||||
BluetoothCodecConfig[] selectable = null;
|
List<BluetoothCodecConfig> selectable = null;
|
||||||
if (mService.getCodecStatus(device) != null) {
|
if (mService.getCodecStatus(device) != null) {
|
||||||
selectable = mService.getCodecStatus(device).getCodecsSelectableCapabilities();
|
selectable = mService.getCodecStatus(device).getCodecsSelectableCapabilities();
|
||||||
// To get the highest priority, we sort in reverse.
|
// To get the highest priority, we sort in reverse.
|
||||||
Arrays.sort(selectable,
|
Collections.sort(selectable,
|
||||||
(a, b) -> {
|
(a, b) -> {
|
||||||
return b.getCodecPriority() - a.getCodecPriority();
|
return b.getCodecPriority() - a.getCodecPriority();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final BluetoothCodecConfig codecConfig = (selectable == null || selectable.length < 1)
|
final BluetoothCodecConfig codecConfig = (selectable == null || selectable.size() < 1)
|
||||||
? null : selectable[0];
|
? null : selectable.get(0);
|
||||||
final int codecType = (codecConfig == null || codecConfig.isMandatoryCodec())
|
final int codecType = (codecConfig == null || codecConfig.isMandatoryCodec())
|
||||||
? BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID : codecConfig.getCodecType();
|
? BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID : codecConfig.getCodecType();
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
import org.robolectric.shadow.api.Shadow;
|
import org.robolectric.shadow.api.Shadow;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {ShadowBluetoothAdapter.class})
|
@Config(shadows = {ShadowBluetoothAdapter.class})
|
||||||
public class A2dpProfileTest {
|
public class A2dpProfileTest {
|
||||||
@@ -179,7 +182,7 @@ public class A2dpProfileTest {
|
|||||||
BluetoothProfile.STATE_CONNECTED);
|
BluetoothProfile.STATE_CONNECTED);
|
||||||
BluetoothCodecStatus status = mock(BluetoothCodecStatus.class);
|
BluetoothCodecStatus status = mock(BluetoothCodecStatus.class);
|
||||||
BluetoothCodecConfig config = mock(BluetoothCodecConfig.class);
|
BluetoothCodecConfig config = mock(BluetoothCodecConfig.class);
|
||||||
BluetoothCodecConfig[] configs = {config};
|
List<BluetoothCodecConfig> configs = Arrays.asList(config);
|
||||||
when(mBluetoothA2dp.getCodecStatus(mDevice)).thenReturn(status);
|
when(mBluetoothA2dp.getCodecStatus(mDevice)).thenReturn(status);
|
||||||
when(status.getCodecsSelectableCapabilities()).thenReturn(configs);
|
when(status.getCodecsSelectableCapabilities()).thenReturn(configs);
|
||||||
|
|
||||||
@@ -194,7 +197,7 @@ public class A2dpProfileTest {
|
|||||||
BluetoothProfile.STATE_CONNECTED);
|
BluetoothProfile.STATE_CONNECTED);
|
||||||
BluetoothCodecStatus status = mock(BluetoothCodecStatus.class);
|
BluetoothCodecStatus status = mock(BluetoothCodecStatus.class);
|
||||||
BluetoothCodecConfig config = mock(BluetoothCodecConfig.class);
|
BluetoothCodecConfig config = mock(BluetoothCodecConfig.class);
|
||||||
BluetoothCodecConfig[] configs = {config};
|
List<BluetoothCodecConfig> configs = Arrays.asList(config);
|
||||||
when(mBluetoothA2dp.getCodecStatus(mDevice)).thenReturn(status);
|
when(mBluetoothA2dp.getCodecStatus(mDevice)).thenReturn(status);
|
||||||
when(status.getCodecsSelectableCapabilities()).thenReturn(configs);
|
when(status.getCodecsSelectableCapabilities()).thenReturn(configs);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user