From 167336e3c36d942f6ff023718f07e5ee025e1262 Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Wed, 25 May 2022 20:35:57 +0800 Subject: [PATCH] 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 --- .../settingslib/bluetooth/CachedBluetoothDevice.java | 7 +++++-- .../bluetooth/CachedBluetoothDeviceTest.java | 12 ++++++------ .../bluetooth/HearingAidDeviceManagerTest.java | 6 ++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 4229b6881f739..f598bc46456bd 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -1390,16 +1390,19 @@ public class CachedBluetoothDevice implements Comparable 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(); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java index be2a55ede9429..76c066cd029e6 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java @@ -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 diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java index a8e607549ab1f..d80a59178c1cd 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java @@ -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(); }