Merge "[LE unicast] The isBusy state should involve the state of sub device" into tm-qpr-dev

This commit is contained in:
SongFerng Wang
2022-09-28 19:45:28 +00:00
committed by Android (Google) Code Review
2 changed files with 91 additions and 8 deletions

View File

@@ -758,16 +758,23 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
} }
public boolean isBusy() { public boolean isBusy() {
synchronized (mProfileLock) { for (CachedBluetoothDevice memberDevice : getMemberDevice()) {
for (LocalBluetoothProfile profile : mProfiles) { if (isBusyState(memberDevice)) {
int status = getProfileConnectionState(profile); return true;
if (status == BluetoothProfile.STATE_CONNECTING
|| status == BluetoothProfile.STATE_DISCONNECTING) {
return true;
}
} }
return getBondState() == BluetoothDevice.BOND_BONDING;
} }
return isBusyState(this);
}
private boolean isBusyState(CachedBluetoothDevice device){
for (LocalBluetoothProfile profile : device.getProfiles()) {
int status = device.getProfileConnectionState(profile);
if (status == BluetoothProfile.STATE_CONNECTING
|| status == BluetoothProfile.STATE_DISCONNECTING) {
return true;
}
}
return device.getBondState() == BluetoothDevice.BOND_BONDING;
} }
private boolean updateProfiles() { private boolean updateProfiles() {

View File

@@ -1069,4 +1069,80 @@ public class CachedBluetoothDeviceTest {
assertThat(mSubCachedDevice.mDevice).isEqualTo(mDevice); assertThat(mSubCachedDevice.mDevice).isEqualTo(mDevice);
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue(); assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
} }
@Test
public void isBusy_mainDeviceIsConnecting_returnsBusy() {
mCachedDevice.addMemberDevice(mSubCachedDevice);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateSubDeviceProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mSubDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTING);
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
assertThat(mCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mSubCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mCachedDevice.isBusy()).isTrue();
}
@Test
public void isBusy_mainDeviceIsBonding_returnsBusy() {
mCachedDevice.addMemberDevice(mSubCachedDevice);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateSubDeviceProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
when(mSubDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDING);
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
assertThat(mCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mSubCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mCachedDevice.isBusy()).isTrue();
}
@Test
public void isBusy_memberDeviceIsConnecting_returnsBusy() {
mCachedDevice.addMemberDevice(mSubCachedDevice);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateSubDeviceProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mSubDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
updateSubDeviceProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTING);
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
assertThat(mCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mSubCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mCachedDevice.isBusy()).isTrue();
}
@Test
public void isBusy_memberDeviceIsBonding_returnsBusy() {
mCachedDevice.addMemberDevice(mSubCachedDevice);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateSubDeviceProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mSubDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDING);
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
assertThat(mCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mSubCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mCachedDevice.isBusy()).isTrue();
}
@Test
public void isBusy_allDevicesAreNotBusy_returnsNotBusy() {
mCachedDevice.addMemberDevice(mSubCachedDevice);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateSubDeviceProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mSubDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
assertThat(mCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mSubCachedDevice.getProfiles().contains(mA2dpProfile)).isTrue();
assertThat(mCachedDevice.isBusy()).isFalse();
}
} }