diff options
| author | 2022-09-13 06:03:14 +0000 | |
|---|---|---|
| committer | 2022-09-13 06:03:14 +0000 | |
| commit | 7b083c729be1fb8574dc7de3bfa0132156236c15 (patch) | |
| tree | fc4c78f145526487ca9a0be793728bb1cea950de | |
| parent | 7fbcf5975028adc7c7ba3b01864d36624d6b69ae (diff) | |
| parent | bf7c555c2f43b525d0cdb5deb57a25f62eceb233 (diff) | |
Merge "Fix hearing aid appears wrong side after device reboot." into tm-qpr-dev am: bf7c555c2f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19903185
Change-Id: Ifee717d914fdd1cc3800c08ea7bafc95482fca9e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2 files changed, 70 insertions, 7 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java index 818f5ca33ebf..cf4e1ee99f92 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java @@ -46,16 +46,43 @@ public class HearingAidDeviceManager { if (isValidHiSyncId(hiSyncId)) { // Once hiSyncId is valid, assign hiSyncId newDevice.setHiSyncId(hiSyncId); + final int side = getDeviceSide(newDevice.getDevice()); + final int mode = getDeviceMode(newDevice.getDevice()); + newDevice.setDeviceSide(side); + newDevice.setDeviceMode(mode); } } private long getHiSyncId(BluetoothDevice device) { - LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager(); - HearingAidProfile profileProxy = profileManager.getHearingAidProfile(); - if (profileProxy != null) { - return profileProxy.getHiSyncId(device); + final LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager(); + final HearingAidProfile profileProxy = profileManager.getHearingAidProfile(); + if (profileProxy == null) { + return BluetoothHearingAid.HI_SYNC_ID_INVALID; } - return BluetoothHearingAid.HI_SYNC_ID_INVALID; + + return profileProxy.getHiSyncId(device); + } + + private int getDeviceSide(BluetoothDevice device) { + final LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager(); + final HearingAidProfile profileProxy = profileManager.getHearingAidProfile(); + if (profileProxy == null) { + Log.w(TAG, "HearingAidProfile is not supported and not ready to fetch device side"); + return HearingAidProfile.DeviceSide.SIDE_INVALID; + } + + return profileProxy.getDeviceSide(device); + } + + private int getDeviceMode(BluetoothDevice device) { + final LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager(); + final HearingAidProfile profileProxy = profileManager.getHearingAidProfile(); + if (profileProxy == null) { + Log.w(TAG, "HearingAidProfile is not supported and not ready to fetch device mode"); + return HearingAidProfile.DeviceMode.MODE_INVALID; + } + + return profileProxy.getDeviceMode(device); } boolean setSubDeviceIfNeeded(CachedBluetoothDevice newDevice) { @@ -98,6 +125,10 @@ public class HearingAidDeviceManager { if (isValidHiSyncId(newHiSyncId)) { cachedDevice.setHiSyncId(newHiSyncId); newSyncIdSet.add(newHiSyncId); + final int side = getDeviceSide(cachedDevice.getDevice()); + final int mode = getDeviceMode(cachedDevice.getDevice()); + cachedDevice.setDeviceSide(side); + cachedDevice.setDeviceMode(mode); } } } 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 d80a59178c1c..611b0a4a28b8 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 @@ -102,16 +102,25 @@ public class HearingAidDeviceManagerTest { } /** - * Test initHearingAidDeviceIfNeeded, a valid HiSyncId will be assigned + * Test initHearingAidDeviceIfNeeded, set HearingAid's information, including HiSyncId, + * deviceSide, deviceMode. */ @Test - public void initHearingAidDeviceIfNeeded_validHiSyncId_verifyHiSyncId() { + public void initHearingAidDeviceIfNeeded_validHiSyncId_setHearingAidInfos() { when(mHearingAidProfile.getHiSyncId(mDevice1)).thenReturn(HISYNCID1); + when(mHearingAidProfile.getDeviceMode(mDevice1)).thenReturn( + HearingAidProfile.DeviceMode.MODE_BINAURAL); + when(mHearingAidProfile.getDeviceSide(mDevice1)).thenReturn( + HearingAidProfile.DeviceSide.SIDE_RIGHT); assertThat(mCachedDevice1.getHiSyncId()).isNotEqualTo(HISYNCID1); mHearingAidDeviceManager.initHearingAidDeviceIfNeeded(mCachedDevice1); assertThat(mCachedDevice1.getHiSyncId()).isEqualTo(HISYNCID1); + assertThat(mCachedDevice1.getDeviceMode()).isEqualTo( + HearingAidProfile.DeviceMode.MODE_BINAURAL); + assertThat(mCachedDevice1.getDeviceSide()).isEqualTo( + HearingAidProfile.DeviceSide.SIDE_RIGHT); } /** @@ -251,6 +260,29 @@ public class HearingAidDeviceManagerTest { } /** + * Test updateHearingAidsDevices, set HearingAid's information, including HiSyncId, deviceSide, + * deviceMode. + */ + @Test + public void updateHearingAidsDevices_validHiSyncId_setHearingAidInfos() { + when(mHearingAidProfile.getHiSyncId(mDevice1)).thenReturn(HISYNCID1); + when(mHearingAidProfile.getDeviceMode(mDevice1)).thenReturn( + HearingAidProfile.DeviceMode.MODE_BINAURAL); + when(mHearingAidProfile.getDeviceSide(mDevice1)).thenReturn( + HearingAidProfile.DeviceSide.SIDE_RIGHT); + mCachedDeviceManager.mCachedDevices.add(mCachedDevice1); + + mHearingAidDeviceManager.updateHearingAidsDevices(); + + assertThat(mCachedDevice1.getHiSyncId()).isEqualTo(HISYNCID1); + assertThat(mCachedDevice1.getDeviceMode()).isEqualTo( + HearingAidProfile.DeviceMode.MODE_BINAURAL); + assertThat(mCachedDevice1.getDeviceSide()).isEqualTo( + HearingAidProfile.DeviceSide.SIDE_RIGHT); + verify(mHearingAidDeviceManager).onHiSyncIdChanged(HISYNCID1); + } + + /** * Test onProfileConnectionStateChangedIfProcessed. * When first hearing aid device is connected, to process it same as other generic devices. * No need to process it. |