Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0dda8579 authored by SongFerng Wang's avatar SongFerng Wang Committed by Automerger Merge Worker
Browse files

Merge "[LE unicast] The isBusy state should involve the state of sub device"...

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20059745



Change-Id: Ia1de4d623521c4cded71c2cc38c148a962af3a18
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 004ba6f5 c6cc319d
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -758,16 +758,23 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
    }

    public boolean isBusy() {
        synchronized (mProfileLock) {
            for (LocalBluetoothProfile profile : mProfiles) {
                int status = getProfileConnectionState(profile);
        for (CachedBluetoothDevice memberDevice : getMemberDevice()) {
            if (isBusyState(memberDevice)) {
                return true;
            }
        }
        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 getBondState() == BluetoothDevice.BOND_BONDING;
        }
        return device.getBondState() == BluetoothDevice.BOND_BONDING;
    }

    private boolean updateProfiles() {
+76 −0
Original line number Diff line number Diff line
@@ -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();
    }
}