summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/audio/AudioDeviceBroker.java54
-rw-r--r--services/core/java/com/android/server/audio/AudioDeviceInventory.java69
-rw-r--r--services/core/java/com/android/server/audio/BtHelper.java54
-rw-r--r--services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java3
4 files changed, 96 insertions, 84 deletions
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index 6d42da663dc6..c05a1f645674 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -772,7 +772,6 @@ public class AudioDeviceBroker {
final int mVolume;
final boolean mIsLeOutput;
final @NonNull String mEventSource;
- final @AudioSystem.AudioFormatNativeEnumForBtCodec int mCodec;
final int mAudioSystemDevice;
final int mMusicDevice;
@@ -787,7 +786,6 @@ public class AudioDeviceBroker {
mEventSource = d.mEventSource;
mAudioSystemDevice = audioDevice;
mMusicDevice = AudioSystem.DEVICE_NONE;
- mCodec = codec;
}
// constructor used by AudioDeviceBroker to search similar message
@@ -796,7 +794,6 @@ public class AudioDeviceBroker {
mProfile = profile;
mEventSource = "";
mMusicDevice = AudioSystem.DEVICE_NONE;
- mCodec = AudioSystem.AUDIO_FORMAT_DEFAULT;
mAudioSystemDevice = 0;
mState = 0;
mSupprNoisy = false;
@@ -811,7 +808,6 @@ public class AudioDeviceBroker {
mProfile = profile;
mEventSource = "";
mMusicDevice = musicDevice;
- mCodec = AudioSystem.AUDIO_FORMAT_DEFAULT;
mAudioSystemDevice = audioSystemDevice;
mState = state;
mSupprNoisy = false;
@@ -829,7 +825,6 @@ public class AudioDeviceBroker {
mEventSource = src.mEventSource;
mAudioSystemDevice = src.mAudioSystemDevice;
mMusicDevice = src.mMusicDevice;
- mCodec = src.mCodec;
}
// redefine equality op so we can match messages intended for this device
@@ -847,6 +842,19 @@ public class AudioDeviceBroker {
}
return false;
}
+
+ @Override
+ public String toString() {
+ return "BtDeviceInfo: device=" + mDevice.toString()
+ + " state=" + mState
+ + " prof=" + mProfile
+ + " supprNoisy=" + mSupprNoisy
+ + " volume=" + mVolume
+ + " isLeOutput=" + mIsLeOutput
+ + " eventSource=" + mEventSource
+ + " audioSystemDevice=" + mAudioSystemDevice
+ + " musicDevice=" + mMusicDevice;
+ }
}
BtDeviceInfo createBtDeviceInfo(@NonNull BtDeviceChangedData d, @NonNull BluetoothDevice device,
@@ -859,9 +867,6 @@ public class AudioDeviceBroker {
break;
case BluetoothProfile.A2DP:
audioDevice = AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP;
- synchronized (mDeviceStateLock) {
- codec = mBtHelper.getA2dpCodec(device);
- }
break;
case BluetoothProfile.HEARING_AID:
audioDevice = AudioSystem.DEVICE_OUT_HEARING_AID;
@@ -1696,8 +1701,11 @@ public class AudioDeviceBroker {
case MSG_L_SET_BT_ACTIVE_DEVICE:
synchronized (mSetModeLock) {
synchronized (mDeviceStateLock) {
- BtDeviceInfo btInfo = (BtDeviceInfo) msg.obj;
- mDeviceInventory.onSetBtActiveDevice(btInfo,
+ final BtDeviceInfo btInfo = (BtDeviceInfo) msg.obj;
+ @AudioSystem.AudioFormatNativeEnumForBtCodec final int codec =
+ mBtHelper.getA2dpCodecWithFallbackToSBC(
+ btInfo.mDevice, "MSG_L_SET_BT_ACTIVE_DEVICE");
+ mDeviceInventory.onSetBtActiveDevice(btInfo, codec,
(btInfo.mProfile
!= BluetoothProfile.LE_AUDIO || btInfo.mIsLeOutput)
? mAudioService.getBluetoothContextualVolumeStream()
@@ -1730,12 +1738,16 @@ public class AudioDeviceBroker {
(String) msg.obj, msg.arg1);
}
break;
- case MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE:
+ case MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE: {
+ final BtDeviceInfo btInfo = (BtDeviceInfo) msg.obj;
synchronized (mDeviceStateLock) {
+ @AudioSystem.AudioFormatNativeEnumForBtCodec final int codec =
+ mBtHelper.getA2dpCodecWithFallbackToSBC(
+ btInfo.mDevice, "MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE");
mDeviceInventory.onBluetoothDeviceConfigChange(
- (BtDeviceInfo) msg.obj, BtHelper.EVENT_DEVICE_CONFIG_CHANGE);
+ btInfo, codec, BtHelper.EVENT_DEVICE_CONFIG_CHANGE);
}
- break;
+ } break;
case MSG_BROADCAST_AUDIO_BECOMING_NOISY:
onSendBecomingNoisyIntent();
break;
@@ -1831,20 +1843,12 @@ public class AudioDeviceBroker {
}
break;
case MSG_L_BT_ACTIVE_DEVICE_CHANGE_EXT: {
- final BtDeviceInfo info = (BtDeviceInfo) msg.obj;
- if (info.mDevice == null) break;
+ final BtDeviceInfo btInfo = (BtDeviceInfo) msg.obj;
+ if (btInfo.mDevice == null) break;
AudioService.sDeviceLogger.enqueue((new EventLogger.StringEvent(
- "msg: onBluetoothActiveDeviceChange "
- + " state=" + info.mState
- // only querying address as this is the only readily available
- // field on the device
- + " addr=" + info.mDevice.getAddress()
- + " prof=" + info.mProfile
- + " supprNoisy=" + info.mSupprNoisy
- + " src=" + info.mEventSource
- )).printLog(TAG));
+ "msg: onBluetoothActiveDeviceChange " + btInfo)).printLog(TAG));
synchronized (mDeviceStateLock) {
- mDeviceInventory.setBluetoothActiveDevice(info);
+ mDeviceInventory.setBluetoothActiveDevice(btInfo);
}
} break;
case MSG_IL_SAVE_PREF_DEVICES_FOR_STRATEGY: {
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index da8950294a44..60af280614e2 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -503,9 +503,11 @@ public class AudioDeviceInventory {
}
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
- void onSetBtActiveDevice(@NonNull AudioDeviceBroker.BtDeviceInfo btInfo, int streamType) {
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
+ void onSetBtActiveDevice(@NonNull AudioDeviceBroker.BtDeviceInfo btInfo,
+ @AudioSystem.AudioFormatNativeEnumForBtCodec int codec,
+ int streamType) {
if (AudioService.DEBUG_DEVICES) {
Log.d(TAG, "onSetBtActiveDevice"
+ " btDevice=" + btInfo.mDevice
@@ -518,10 +520,7 @@ public class AudioDeviceInventory {
}
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent("BT connected:"
- + " addr=" + address
- + " profile=" + btInfo.mProfile
- + " state=" + btInfo.mState
- + " codec=" + AudioSystem.audioFormatToString(btInfo.mCodec)));
+ + btInfo + " codec=" + AudioSystem.audioFormatToString(codec)));
new MediaMetrics.Item(mMetricsId + "onSetBtActiveDevice")
.set(MediaMetrics.Property.STATUS, btInfo.mProfile)
@@ -529,7 +528,7 @@ public class AudioDeviceInventory {
AudioSystem.getDeviceName(btInfo.mAudioSystemDevice))
.set(MediaMetrics.Property.ADDRESS, address)
.set(MediaMetrics.Property.ENCODING,
- AudioSystem.audioFormatToString(btInfo.mCodec))
+ AudioSystem.audioFormatToString(codec))
.set(MediaMetrics.Property.EVENT, "onSetBtActiveDevice")
.set(MediaMetrics.Property.STREAM_TYPE,
AudioSystem.streamToString(streamType))
@@ -568,7 +567,7 @@ public class AudioDeviceInventory {
btInfo.mVolume * 10, btInfo.mAudioSystemDevice,
"onSetBtActiveDevice");
}
- makeA2dpDeviceAvailable(btInfo, "onSetBtActiveDevice");
+ makeA2dpDeviceAvailable(btInfo, codec, "onSetBtActiveDevice");
}
break;
case BluetoothProfile.HEARING_AID:
@@ -594,9 +593,10 @@ public class AudioDeviceInventory {
}
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ void onBluetoothDeviceConfigChange(
- @NonNull AudioDeviceBroker.BtDeviceInfo btInfo, int event) {
+ @NonNull AudioDeviceBroker.BtDeviceInfo btInfo,
+ @AudioSystem.AudioFormatNativeEnumForBtCodec int codec, int event) {
MediaMetrics.Item mmi = new MediaMetrics.Item(mMetricsId
+ "onBluetoothDeviceConfigChange")
.set(MediaMetrics.Property.EVENT, BtHelper.deviceEventToString(event));
@@ -610,7 +610,6 @@ public class AudioDeviceInventory {
Log.d(TAG, "onBluetoothDeviceConfigChange btDevice=" + btDevice);
}
int volume = btInfo.mVolume;
- @AudioSystem.AudioFormatNativeEnumForBtCodec final int audioCodec = btInfo.mCodec;
String address = btDevice.getAddress();
if (!BluetoothAdapter.checkBluetoothAddress(address)) {
@@ -639,8 +638,7 @@ public class AudioDeviceInventory {
}
mmi.set(MediaMetrics.Property.ADDRESS, address)
- .set(MediaMetrics.Property.ENCODING,
- AudioSystem.audioFormatToString(audioCodec))
+ .set(MediaMetrics.Property.ENCODING, AudioSystem.audioFormatToString(codec))
.set(MediaMetrics.Property.INDEX, volume)
.set(MediaMetrics.Property.NAME, di.mDeviceName);
@@ -648,20 +646,19 @@ public class AudioDeviceInventory {
if (event == BtHelper.EVENT_DEVICE_CONFIG_CHANGE) {
boolean a2dpCodecChange = false;
if (btInfo.mProfile == BluetoothProfile.A2DP) {
- if (di.mDeviceCodecFormat != audioCodec) {
- di.mDeviceCodecFormat = audioCodec;
+ if (di.mDeviceCodecFormat != codec) {
+ di.mDeviceCodecFormat = codec;
mConnectedDevices.replace(key, di);
a2dpCodecChange = true;
}
final int res = mAudioSystem.handleDeviceConfigChange(
- btInfo.mAudioSystemDevice, address,
- BtHelper.getName(btDevice), audioCodec);
+ btInfo.mAudioSystemDevice, address, BtHelper.getName(btDevice), codec);
if (res != AudioSystem.AUDIO_STATUS_OK) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"APM handleDeviceConfigChange failed for A2DP device addr="
+ address + " codec="
- + AudioSystem.audioFormatToString(audioCodec))
+ + AudioSystem.audioFormatToString(codec))
.printLog(TAG));
// force A2DP device disconnection in case of error so that AudioService
@@ -672,7 +669,7 @@ public class AudioDeviceInventory {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"APM handleDeviceConfigChange success for A2DP device addr="
+ address
- + " codec=" + AudioSystem.audioFormatToString(audioCodec))
+ + " codec=" + AudioSystem.audioFormatToString(codec))
.printLog(TAG));
}
@@ -1338,7 +1335,7 @@ public class AudioDeviceInventory {
* @param device the device whose connection state is queried
* @return true if connected
*/
- // called with AudioDeviceBroker.mDeviceStateLock lock held
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
public boolean isDeviceConnected(@NonNull AudioDeviceAttributes device) {
final String key = DeviceInfo.makeDeviceListKey(device.getInternalType(),
device.getAddress());
@@ -1489,7 +1486,7 @@ public class AudioDeviceInventory {
}
}
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ void onBtProfileDisconnected(int profile) {
switch (profile) {
case BluetoothProfile.HEADSET:
@@ -1554,7 +1551,7 @@ public class AudioDeviceInventory {
disconnectLeAudio(AudioSystem.DEVICE_OUT_BLE_BROADCAST);
}
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
private void disconnectHeadset() {
boolean disconnect = false;
synchronized (mDevicesLock) {
@@ -1594,9 +1591,10 @@ public class AudioDeviceInventory {
return mCurAudioRoutes;
}
- // only public for mocking/spying
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
- @VisibleForTesting
+ /**
+ * Set a Bluetooth device to active.
+ */
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
public int setBluetoothActiveDevice(@NonNull AudioDeviceBroker.BtDeviceInfo info) {
int delay;
synchronized (mDevicesLock) {
@@ -1617,12 +1615,7 @@ public class AudioDeviceInventory {
}
if (AudioService.DEBUG_DEVICES) {
- Log.i(TAG, "setBluetoothActiveDevice device: " + info.mDevice
- + " profile: " + BluetoothProfile.getProfileName(info.mProfile)
- + " state: " + BluetoothProfile.getConnectionStateName(info.mState)
- + " delay(ms): " + delay
- + " codec:" + Integer.toHexString(info.mCodec)
- + " suppressNoisyIntent: " + info.mSupprNoisy);
+ Log.i(TAG, "setBluetoothActiveDevice " + info.toString() + " delay(ms): " + delay);
}
mDeviceBroker.postBluetoothActiveDevice(info, delay);
if (info.mProfile == BluetoothProfile.HEARING_AID
@@ -1658,10 +1651,10 @@ public class AudioDeviceInventory {
@GuardedBy("mDevicesLock")
private void makeA2dpDeviceAvailable(AudioDeviceBroker.BtDeviceInfo btInfo,
+ @AudioSystem.AudioFormatNativeEnumForBtCodec int codec,
String eventSource) {
final String address = btInfo.mDevice.getAddress();
final String name = BtHelper.getName(btInfo.mDevice);
- final int a2dpCodec = btInfo.mCodec;
// enable A2DP before notifying A2DP connection to avoid unnecessary processing in
// audio policy manager
@@ -1671,7 +1664,7 @@ public class AudioDeviceInventory {
AudioDeviceAttributes ada = new AudioDeviceAttributes(
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address, name);
final int res = mAudioSystem.setDeviceConnectionState(ada,
- AudioSystem.DEVICE_STATE_AVAILABLE, a2dpCodec);
+ AudioSystem.DEVICE_STATE_AVAILABLE, codec);
// TODO: log in MediaMetrics once distinction between connection failure and
// double connection is made.
@@ -1694,7 +1687,7 @@ public class AudioDeviceInventory {
// time_low = 0, time_mid = 0, time_hi = 0, clock_seq = 0, node = MAC Address
UUID sensorUuid = UuidUtils.uuidFromAudioDeviceAttributes(ada);
final DeviceInfo di = new DeviceInfo(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, name,
- address, a2dpCodec, sensorUuid);
+ address, codec, sensorUuid);
final String diKey = di.getKey();
mConnectedDevices.put(diKey, di);
// on a connection always overwrite the device seen by AudioPolicy, see comment above when
@@ -1910,9 +1903,9 @@ public class AudioDeviceInventory {
}
@GuardedBy("mDevicesLock")
- private void makeA2dpDeviceUnavailableNow(String address, int a2dpCodec) {
+ private void makeA2dpDeviceUnavailableNow(String address, int codec) {
MediaMetrics.Item mmi = new MediaMetrics.Item(mMetricsId + "a2dp." + address)
- .set(MediaMetrics.Property.ENCODING, AudioSystem.audioFormatToString(a2dpCodec))
+ .set(MediaMetrics.Property.ENCODING, AudioSystem.audioFormatToString(codec))
.set(MediaMetrics.Property.EVENT, "makeA2dpDeviceUnavailableNow");
if (address == null) {
@@ -1939,7 +1932,7 @@ public class AudioDeviceInventory {
AudioDeviceAttributes ada = new AudioDeviceAttributes(
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address);
final int res = mAudioSystem.setDeviceConnectionState(ada,
- AudioSystem.DEVICE_STATE_UNAVAILABLE, a2dpCodec);
+ AudioSystem.DEVICE_STATE_UNAVAILABLE, codec);
if (res != AudioSystem.AUDIO_STATUS_OK) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java
index 1462b3cd4e72..6af409e7af3a 100644
--- a/services/core/java/com/android/server/audio/BtHelper.java
+++ b/services/core/java/com/android/server/audio/BtHelper.java
@@ -173,8 +173,8 @@ public class BtHelper {
//----------------------------------------------------------------------
// Interface for AudioDeviceBroker
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized void onSystemReady() {
mScoConnectionState = android.media.AudioManager.SCO_AUDIO_STATE_ERROR;
resetBluetoothSco();
@@ -263,8 +263,20 @@ public class BtHelper {
return AudioSystem.bluetoothCodecToAudioFormat(btCodecConfig.getCodecType());
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ /*package*/ synchronized @AudioSystem.AudioFormatNativeEnumForBtCodec
+ int getA2dpCodecWithFallbackToSBC(
+ @NonNull BluetoothDevice device, @NonNull String source) {
+ @AudioSystem.AudioFormatNativeEnumForBtCodec int codec = getA2dpCodec(device);
+ if (codec == AudioSystem.AUDIO_FORMAT_DEFAULT) {
+ AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
+ "getA2dpCodec DEFAULT from " + source + " fallback to SBC"));
+ return AudioSystem.AUDIO_FORMAT_SBC;
+ }
+ return codec;
+ }
+
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized void onReceiveBtEvent(Intent intent) {
final String action = intent.getAction();
@@ -283,8 +295,8 @@ public class BtHelper {
* Exclusively called from AudioDeviceBroker when handling MSG_L_RECEIVED_BT_EVENT
* as part of the serialization of the communication route selection
*/
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
private void onScoAudioStateChanged(int state) {
boolean broadcast = false;
int scoAudioState = AudioManager.SCO_AUDIO_STATE_ERROR;
@@ -355,16 +367,16 @@ public class BtHelper {
== BluetoothHeadset.STATE_AUDIO_CONNECTED;
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized boolean startBluetoothSco(int scoAudioMode,
@NonNull String eventSource) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(eventSource));
return requestScoState(BluetoothHeadset.STATE_AUDIO_CONNECTED, scoAudioMode);
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized boolean stopBluetoothSco(@NonNull String eventSource) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(eventSource));
return requestScoState(BluetoothHeadset.STATE_AUDIO_DISCONNECTED, SCO_MODE_VIRTUAL_CALL);
@@ -435,8 +447,8 @@ public class BtHelper {
mScoConnectionState = state;
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized void resetBluetoothSco() {
mScoAudioState = SCO_STATE_INACTIVE;
broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
@@ -445,7 +457,8 @@ public class BtHelper {
mDeviceBroker.setBluetoothScoOn(false, "resetBluetoothSco");
}
- //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized void onBtProfileDisconnected(int profile) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"BT profile " + BluetoothProfile.getProfileName(profile) + " disconnected"));
@@ -474,7 +487,8 @@ public class BtHelper {
}
}
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package*/ synchronized void onBtProfileConnected(int profile, BluetoothProfile proxy) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"BT profile " + BluetoothProfile.getProfileName(profile) + " connected to proxy "
@@ -522,8 +536,8 @@ public class BtHelper {
}
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
private void onHeadsetProfileConnected(BluetoothHeadset headset) {
// Discard timeout message
mDeviceBroker.handleCancelFailureToConnectToBtHeadsetService();
@@ -642,8 +656,8 @@ public class BtHelper {
return btDevice == null ? "(null)" : btDevice.getAnonymizedAddress();
}
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
/*package */ synchronized void onSetBtScoActiveDevice(BluetoothDevice btDevice) {
Log.i(TAG, "onSetBtScoActiveDevice: " + getAnonymizedAddress(mBluetoothHeadsetDevice)
+ " -> " + getAnonymizedAddress(btDevice));
@@ -712,8 +726,8 @@ public class BtHelper {
//----------------------------------------------------------------------
- // @GuardedBy("AudioDeviceBroker.mSetModeLock")
- //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
+ // @GuardedBy("mDeviceBroker.mSetModeLock")
+ // @GuardedBy("AudioDeviceBroker.this.mDeviceStateLock")
@GuardedBy("BtHelper.this")
private boolean requestScoState(int state, int scoAudioMode) {
checkScoAudioState();
diff --git a/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java b/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java
index aba24fbd55b7..7f8ad4583d5a 100644
--- a/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java
+++ b/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java
@@ -261,7 +261,8 @@ public class AudioDeviceBrokerTest {
// Verify disconnection has been cancelled and we're seeing two connections attempts,
// with the device connected at the end of the test
verify(mSpyDevInventory, times(2)).onSetBtActiveDevice(
- any(AudioDeviceBroker.BtDeviceInfo.class), anyInt());
+ any(AudioDeviceBroker.BtDeviceInfo.class), anyInt() /*codec*/,
+ anyInt() /*streamType*/);
Assert.assertTrue("Mock device not connected",
mSpyDevInventory.isA2dpDeviceConnected(mFakeBtDevice));