[LE unicast] The isBusy state should involve the state of sub device
Bug: 245697292 Test: make RunSettingsLibRoboTests ROBOTEST_FILTER=CachedBluetoothDeviceTest Change-Id: I7fc640ccf30329e7a9bba7ad8b7e2485c39b8f6c
This commit is contained in:
@@ -756,16 +756,23 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
|
||||
}
|
||||
|
||||
public boolean isBusy() {
|
||||
synchronized (mProfileLock) {
|
||||
for (LocalBluetoothProfile profile : mProfiles) {
|
||||
int status = getProfileConnectionState(profile);
|
||||
if (status == BluetoothProfile.STATE_CONNECTING
|
||||
|| status == BluetoothProfile.STATE_DISCONNECTING) {
|
||||
return true;
|
||||
}
|
||||
for (CachedBluetoothDevice memberDevice : getMemberDevice()) {
|
||||
if (isBusyState(memberDevice)) {
|
||||
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() {
|
||||
|
||||
@@ -1069,4 +1069,80 @@ public class CachedBluetoothDeviceTest {
|
||||
assertThat(mSubCachedDevice.mDevice).isEqualTo(mDevice);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user