Merge "Fix LE Audio toggle missing issue for dual mode hearing device" into main

This commit is contained in:
Angela Wang
2024-08-06 09:31:28 +00:00
committed by Android (Google) Code Review
2 changed files with 50 additions and 9 deletions

View File

@@ -308,7 +308,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
* Helper to get the list of connectable and special profiles.
*/
private List<LocalBluetoothProfile> getProfiles() {
List<LocalBluetoothProfile> result = new ArrayList<LocalBluetoothProfile>();
List<LocalBluetoothProfile> result = new ArrayList<>();
mProfileDeviceMap.clear();
if (mAllOfCachedDevices == null || mAllOfCachedDevices.isEmpty()) {
return result;
@@ -319,8 +319,7 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
if (mProfileDeviceMap.containsKey(profile.toString())) {
mProfileDeviceMap.get(profile.toString()).add(cachedItem);
} else {
List<CachedBluetoothDevice> tmpCachedDeviceList =
new ArrayList<CachedBluetoothDevice>();
List<CachedBluetoothDevice> tmpCachedDeviceList = new ArrayList<>();
tmpCachedDeviceList.add(cachedItem);
mProfileDeviceMap.put(profile.toString(), tmpCachedDeviceList);
result.add(profile);
@@ -356,6 +355,10 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
}
boolean hearingAidSupported = result.contains(
mManager.getProfileManager().getHearingAidProfile());
// Remove hearing aids toggle anyway since showing the toggle will confuse users
if (hearingAidSupported) {
result.remove(mManager.getProfileManager().getHearingAidProfile());
}
if (leAudioSupported && !classicAudioSupported && !hearingAidSupported) {
mIsLeAudioOnlyDevice = true;
}

View File

@@ -44,6 +44,7 @@ import com.android.settings.testutils.shadow.ShadowBluetoothDevice;
import com.android.settingslib.R;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LeAudioProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
@@ -90,8 +91,12 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
@Mock
private CachedBluetoothDeviceManager mCachedBluetoothDeviceManager;
private @Mock A2dpProfile mA2dpProfile;
private @Mock LeAudioProfile mLeAudioProfile;
@Mock
private A2dpProfile mA2dpProfile;
@Mock
private LeAudioProfile mLeAudioProfile;
@Mock
private HearingAidProfile mHearingAidProfile;
@Override
public void setUp() {
@@ -399,18 +404,23 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
when(mProfileManager.getProfileByName(eq(mA2dpProfile.toString())))
.thenReturn(mA2dpProfile);
when(mA2dpProfile.getNameResource(any()))
.thenReturn(com.android.settingslib.R.string.bluetooth_profile_a2dp);
.thenReturn(R.string.bluetooth_profile_a2dp);
when(mA2dpProfile.getHighQualityAudioOptionLabel(any())).thenReturn(
mContext.getString(com.android.settingslib.R
.string.bluetooth_profile_a2dp_high_quality_unknown_codec));
mContext.getString(R.string.bluetooth_profile_a2dp_high_quality_unknown_codec));
when(mA2dpProfile.isProfileReady()).thenReturn(true);
when(mProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
when(mLeAudioProfile.toString()).thenReturn("LE_AUDIO");
when(mLeAudioProfile.getNameResource(any()))
.thenReturn(com.android.settingslib.R.string.bluetooth_profile_le_audio);
.thenReturn(R.string.bluetooth_profile_le_audio);
when(mLeAudioProfile.isProfileReady()).thenReturn(true);
when(mProfileManager.getLeAudioProfile()).thenReturn(mLeAudioProfile);
when(mHearingAidProfile.toString()).thenReturn("HearingAid");
when(mHearingAidProfile.getNameResource(any()))
.thenReturn(R.string.bluetooth_profile_hearing_aid);
when(mHearingAidProfile.isProfileReady()).thenReturn(true);
when(mProfileManager.getHearingAidProfile()).thenReturn(mHearingAidProfile);
}
private void addA2dpProfileToDevice(boolean preferred, boolean supportsHighQualityAudio,
@@ -426,6 +436,11 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
mConnectableProfiles.add(mLeAudioProfile);
}
private void addHearingAidProfileToDevice(boolean enabled) {
when(mHearingAidProfile.isEnabled(any())).thenReturn(enabled);
mConnectableProfiles.add(mHearingAidProfile);
}
private SwitchPreferenceCompat getHighQualityAudioPref() {
return (SwitchPreferenceCompat) mScreen.findPreference(
BluetoothDetailsProfilesController.HIGH_QUALITY_AUDIO_PREF_TAG);
@@ -591,4 +606,27 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
List<SwitchPreferenceCompat> switches = getProfileSwitches(false);
assertThat(switches.get(0).isVisible()).isFalse();
}
@Test
public void ashaHearingAid_hideAshaToggle() {
setupDevice(makeDefaultDeviceConfig());
addHearingAidProfileToDevice(true);
showScreen(mController);
List<SwitchPreferenceCompat> switches = getProfileSwitches(false);
assertThat(switches.isEmpty()).isTrue();
}
@Test
public void ashaHearingAidWithLeAudio_showLeAudioToggle() {
setupDevice(makeDefaultDeviceConfig());
addHearingAidProfileToDevice(false);
addLeAudioProfileToDevice(true);
showScreen(mController);
List<SwitchPreferenceCompat> switches = getProfileSwitches(false);
assertThat(switches.getFirst().getTitle()).isEqualTo(
mContext.getString(mLeAudioProfile.getNameResource(mDevice)));
}
}