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

Commit 167336e3 authored by jasonwshsu's avatar jasonwshsu
Browse files

Fix ASHA Hearing aids connection status incorrect

Root Cause: After disconnecting one side of hearing aid, the mainDevice
did not update device side information from subDevice.

Solution: switch subDevice information to mainDevice.

Bug: 233708857
Test: make RunSettingsLibRoboTests ROBOTEST_FILTER=CachedBluetoothDeviceTest
Test: make RunSettingsLibRoboTests ROBOTEST_FILTER=HearingAidDeviceManagerTest
Change-Id: I5977c11828464863610cfdaabd91154b710b4151
parent f505fefd
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1390,16 +1390,19 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
    public void switchSubDeviceContent() {
        // Backup from main device
        BluetoothDevice tmpDevice = mDevice;
        short tmpRssi = mRssi;
        boolean tmpJustDiscovered = mJustDiscovered;
        final short tmpRssi = mRssi;
        final boolean tmpJustDiscovered = mJustDiscovered;
        final int tmpDeviceSide = mDeviceSide;
        // Set main device from sub device
        mDevice = mSubDevice.mDevice;
        mRssi = mSubDevice.mRssi;
        mJustDiscovered = mSubDevice.mJustDiscovered;
        mDeviceSide = mSubDevice.mDeviceSide;
        // Set sub device from backup
        mSubDevice.mDevice = tmpDevice;
        mSubDevice.mRssi = tmpRssi;
        mSubDevice.mJustDiscovered = tmpJustDiscovered;
        mSubDevice.mDeviceSide = tmpDeviceSide;
        fetchActiveDevices();
    }

+6 −6
Original line number Diff line number Diff line
@@ -965,24 +965,24 @@ public class CachedBluetoothDeviceTest {

        mCachedDevice.mRssi = RSSI_1;
        mCachedDevice.mJustDiscovered = JUSTDISCOVERED_1;
        mCachedDevice.setDeviceSide(HearingAidProfile.DeviceSide.SIDE_LEFT);
        mSubCachedDevice.mRssi = RSSI_2;
        mSubCachedDevice.mJustDiscovered = JUSTDISCOVERED_2;
        mSubCachedDevice.setDeviceSide(HearingAidProfile.DeviceSide.SIDE_RIGHT);
        mCachedDevice.setSubDevice(mSubCachedDevice);

        assertThat(mCachedDevice.mRssi).isEqualTo(RSSI_1);
        assertThat(mCachedDevice.mJustDiscovered).isEqualTo(JUSTDISCOVERED_1);
        assertThat(mCachedDevice.mDevice).isEqualTo(mDevice);
        assertThat(mSubCachedDevice.mRssi).isEqualTo(RSSI_2);
        assertThat(mSubCachedDevice.mJustDiscovered).isEqualTo(JUSTDISCOVERED_2);
        assertThat(mSubCachedDevice.mDevice).isEqualTo(mSubDevice);
        mCachedDevice.switchSubDeviceContent();

        assertThat(mCachedDevice.mRssi).isEqualTo(RSSI_2);
        assertThat(mCachedDevice.mJustDiscovered).isEqualTo(JUSTDISCOVERED_2);
        assertThat(mCachedDevice.mDevice).isEqualTo(mSubDevice);
        assertThat(mCachedDevice.getDeviceSide()).isEqualTo(
                HearingAidProfile.DeviceSide.SIDE_RIGHT);
        assertThat(mSubCachedDevice.mRssi).isEqualTo(RSSI_1);
        assertThat(mSubCachedDevice.mJustDiscovered).isEqualTo(JUSTDISCOVERED_1);
        assertThat(mSubCachedDevice.mDevice).isEqualTo(mDevice);
        assertThat(mSubCachedDevice.getDeviceSide()).isEqualTo(
                HearingAidProfile.DeviceSide.SIDE_LEFT);
    }

    @Test
+6 −0
Original line number Diff line number Diff line
@@ -358,8 +358,10 @@ public class HearingAidDeviceManagerTest {
    public void onProfileConnectionStateChanged_disconnected_mainDevice_subDeviceConnected_switch()
    {
        when(mCachedDevice1.getHiSyncId()).thenReturn(HISYNCID1);
        mCachedDevice1.setDeviceSide(HearingAidProfile.DeviceSide.SIDE_LEFT);
        when(mCachedDevice2.getHiSyncId()).thenReturn(HISYNCID1);
        when(mCachedDevice2.isConnected()).thenReturn(true);
        mCachedDevice2.setDeviceSide(HearingAidProfile.DeviceSide.SIDE_RIGHT);
        mCachedDeviceManager.mCachedDevices.add(mCachedDevice1);
        mCachedDevice1.setSubDevice(mCachedDevice2);

@@ -370,6 +372,10 @@ public class HearingAidDeviceManagerTest {

        assertThat(mCachedDevice1.mDevice).isEqualTo(mDevice2);
        assertThat(mCachedDevice2.mDevice).isEqualTo(mDevice1);
        assertThat(mCachedDevice1.getDeviceSide()).isEqualTo(
                HearingAidProfile.DeviceSide.SIDE_RIGHT);
        assertThat(mCachedDevice2.getDeviceSide()).isEqualTo(
                HearingAidProfile.DeviceSide.SIDE_LEFT);
        verify(mCachedDevice1).refresh();
    }