Merge "BLE hearing aid information in Bluetooth device preference"

This commit is contained in:
Angela Wang
2022-11-30 04:20:00 +00:00
committed by Android (Google) Code Review
3 changed files with 54 additions and 6 deletions

View File

@@ -115,12 +115,24 @@ public class BluetoothUtils {
}
List<LocalBluetoothProfile> profiles = cachedDevice.getProfiles();
int resId = 0;
for (LocalBluetoothProfile profile : profiles) {
int resId = profile.getDrawableResource(btClass);
if (resId != 0) {
return new Pair<>(getBluetoothDrawable(context, resId), null);
int profileResId = profile.getDrawableResource(btClass);
if (profileResId != 0) {
// The device should show hearing aid icon if it contains any hearing aid related
// profiles
if (profile instanceof HearingAidProfile || profile instanceof HapClientProfile) {
return new Pair<>(getBluetoothDrawable(context, profileResId), null);
}
if (resId == 0) {
resId = profileResId;
}
}
}
if (resId != 0) {
return new Pair<>(getBluetoothDrawable(context, resId), null);
}
if (btClass != null) {
if (doesClassMatch(btClass, BluetoothClass.PROFILE_HEADSET)) {
return new Pair<>(

View File

@@ -1164,14 +1164,22 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
// Try to show left/right information if can not get it from battery for hearing
// aids specifically.
if (mIsActiveDeviceHearingAid
boolean isActiveAshaHearingAid = mIsActiveDeviceHearingAid;
boolean isActiveLeAudioHearingAid = mIsActiveDeviceLeAudio
&& isConnectedHapClientDevice();
if ((isActiveAshaHearingAid || isActiveLeAudioHearingAid)
&& stringRes == R.string.bluetooth_active_no_battery_level) {
final Set<CachedBluetoothDevice> memberDevices = getMemberDevice();
final CachedBluetoothDevice subDevice = getSubDevice();
if (subDevice != null && subDevice.isConnected()) {
if (memberDevices.stream().anyMatch(m -> m.isConnected())) {
stringRes = R.string.bluetooth_hearing_aid_left_and_right_active;
} else if (subDevice != null && subDevice.isConnected()) {
stringRes = R.string.bluetooth_hearing_aid_left_and_right_active;
} else {
int deviceSide = getDeviceSide();
if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT) {
if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT_AND_RIGHT) {
stringRes = R.string.bluetooth_hearing_aid_left_and_right_active;
} else if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT) {
stringRes = R.string.bluetooth_hearing_aid_left_active;
} else if (deviceSide == HearingAidInfo.DeviceSide.SIDE_RIGHT) {
stringRes = R.string.bluetooth_hearing_aid_right_active;

View File

@@ -29,6 +29,7 @@ import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothLeAudio;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
@@ -446,6 +447,26 @@ public class CachedBluetoothDeviceTest {
assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 10% battery");
}
@Test
public void getConnectionSummary_testActiveDeviceLeAudioHearingAid() {
// Test without battery level
// Set HAP Client and LE Audio profile to be connected and test connection state summary
when(mProfileManager.getHapClientProfile()).thenReturn(mHapClientProfile);
updateProfileStatus(mHapClientProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mLeAudioProfile, BluetoothProfile.STATE_CONNECTED);
assertThat(mCachedDevice.getConnectionSummary()).isNull();
// Set device as Active for LE Audio and test connection state summary
mCachedDevice.setHearingAidInfo(getLeftLeAudioHearingAidInfo());
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.LE_AUDIO);
assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, left only");
// Set LE Audio profile to be disconnected and test connection state summary
mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.LE_AUDIO);
mCachedDevice.onProfileStateChanged(mLeAudioProfile, BluetoothProfile.STATE_DISCONNECTED);
assertThat(mCachedDevice.getConnectionSummary()).isNull();
}
@Test
public void getConnectionSummary_testMultipleProfilesActiveDevice() {
// Test without battery level
@@ -1110,9 +1131,16 @@ public class CachedBluetoothDeviceTest {
.setAshaDeviceSide(HearingAidProfile.DeviceSide.SIDE_LEFT)
.build();
}
private HearingAidInfo getRightAshaHearingAidInfo() {
return new HearingAidInfo.Builder()
.setAshaDeviceSide(HearingAidProfile.DeviceSide.SIDE_RIGHT)
.build();
}
private HearingAidInfo getLeftLeAudioHearingAidInfo() {
return new HearingAidInfo.Builder()
.setLeAudioLocation(BluetoothLeAudio.AUDIO_LOCATION_SIDE_LEFT)
.build();
}
}