Fix LE Audio toggle missing issue for dual mode hearing device
After the code change of ag/28283226, they hide the LE Audio toggle for LE Audio only device since turning off the profile may cause this device no functioning. But the dual mode hearing devices(LE Audio + Asha) are wrongly recognized as LE Audio only devices since HearingAidProfile.accessProfileEnabled() return false. This make the users lost the ability to switch between profiles they preferred. Make HearingAidProfile.accessProfileEnabled() return true and hide the Hearing Aid toggle by default since it's also meaningless to turn off the Asha profile for Asha-only devices. Flag: com.android.settingslib.flags.asha_profile_access_profile_enabled_true Bug: 356530795 Test: manual checking the UI Test: atest BluetoothDetailsProfilesControllerTest Change-Id: Ica350b4c16c1b07945399bfee1038f7b0824baed
This commit is contained in:
@@ -309,7 +309,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;
|
||||||
@@ -320,8 +320,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);
|
||||||
@@ -357,6 +356,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;
|
||||||
}
|
}
|
||||||
|
@@ -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)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user