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

View File

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