diff --git a/res/values/strings.xml b/res/values/strings.xml index a8101e4db6f..2d813086458 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -156,6 +156,8 @@ Shortcut, hearing aid compatibility Preset + + There are no presets programmed by your audiologist Couldn\u2019t update preset diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java index 564e1384779..f7ccc610870 100644 --- a/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java +++ b/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java @@ -159,19 +159,22 @@ public class BluetoothDetailsHearingAidsPresetsController extends mPreference.setEnabled(mCachedDevice.isConnectedHapClientDevice()); loadAllPresetInfo(); + mPreference.setSummary(null); if (mPreference.getEntries().length == 0) { - if (DEBUG) { - Log.w(TAG, "Disable the preference since preset info size = 0"); + if (mPreference.isEnabled()) { + if (DEBUG) { + Log.w(TAG, "Disable the preference since preset info size = 0"); + } + mPreference.setEnabled(false); + mPreference.setSummary(mContext.getString( + R.string.bluetooth_hearing_aids_presets_empty_list_message)); } - mPreference.setEnabled(false); } else { int activePresetIndex = mHapClientProfile.getActivePresetIndex( mCachedDevice.getDevice()); if (activePresetIndex != BluetoothHapClient.PRESET_INDEX_UNAVAILABLE) { mPreference.setValue(Integer.toString(activePresetIndex)); mPreference.setSummary(mPreference.getEntry()); - } else { - mPreference.setSummary(null); } } } @@ -273,7 +276,8 @@ public class BluetoothDetailsHearingAidsPresetsController extends return; } List infoList = mHapClientProfile.getAllPresetInfo( - mCachedDevice.getDevice()); + mCachedDevice.getDevice()).stream().filter( + BluetoothHapPresetInfo::isAvailable).toList(); CharSequence[] presetNames = new CharSequence[infoList.size()]; CharSequence[] presetIndexes = new CharSequence[infoList.size()]; for (int i = 0; i < infoList.size(); i++) { diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java index cf80a871416..7c865f340a6 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java @@ -38,6 +38,7 @@ import android.bluetooth.BluetoothHapPresetInfo; import androidx.preference.ListPreference; import androidx.preference.PreferenceCategory; +import com.android.settings.R; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.HapClientProfile; import com.android.settingslib.bluetooth.LocalBluetoothManager; @@ -215,11 +216,13 @@ public class BluetoothDetailsHearingAidsPresetsControllerTest extends assertThat(mController.getPreference()).isNotNull(); assertThat(mController.getPreference().isEnabled()).isFalse(); + assertThat(String.valueOf(mController.getPreference().getSummary())).isEqualTo( + mContext.getString(R.string.bluetooth_hearing_aids_presets_empty_list_message)); } @Test public void refresh_validPresetInfo_preferenceEnabled() { - BluetoothHapPresetInfo info = getTestPresetInfo(); + BluetoothHapPresetInfo info = getTestPresetInfo(true); when(mHapClientProfile.getAllPresetInfo(mDevice)).thenReturn(List.of(info)); mController.refresh(); @@ -230,7 +233,7 @@ public class BluetoothDetailsHearingAidsPresetsControllerTest extends @Test public void refresh_invalidActivePresetIndex_summaryIsNull() { - BluetoothHapPresetInfo info = getTestPresetInfo(); + BluetoothHapPresetInfo info = getTestPresetInfo(true); when(mHapClientProfile.getAllPresetInfo(mDevice)).thenReturn(List.of(info)); when(mHapClientProfile.getActivePresetIndex(mDevice)).thenReturn(PRESET_INDEX_UNAVAILABLE); @@ -242,7 +245,7 @@ public class BluetoothDetailsHearingAidsPresetsControllerTest extends @Test public void refresh_validActivePresetIndex_summaryIsNotNull() { - BluetoothHapPresetInfo info = getTestPresetInfo(); + BluetoothHapPresetInfo info = getTestPresetInfo(true); when(mHapClientProfile.getAllPresetInfo(mDevice)).thenReturn(List.of(info)); when(mHapClientProfile.getActivePresetIndex(mDevice)).thenReturn(TEST_PRESET_INDEX); @@ -262,10 +265,30 @@ public class BluetoothDetailsHearingAidsPresetsControllerTest extends verify(mHapClientProfile).selectPreset(mDevice, TEST_PRESET_INDEX); } - private BluetoothHapPresetInfo getTestPresetInfo() { + @Test + public void loadAllPresetInfo_unavailablePreset_notAddedToEntries() { + BluetoothHapPresetInfo info = getTestPresetInfo(false); + when(mHapClientProfile.getAllPresetInfo(mDevice)).thenReturn(List.of(info)); + + mController.refresh(); + + assertThat(mController.getPreference().getEntries().length).isEqualTo(0); + } + + @Test + public void loadAllPresetInfo_availablePreset_addedToEntries() { + BluetoothHapPresetInfo info = getTestPresetInfo(true); + when(mHapClientProfile.getAllPresetInfo(mDevice)).thenReturn(List.of(info)); + + mController.refresh(); + + assertThat(mController.getPreference().getEntries().length).isEqualTo(1); + } + private BluetoothHapPresetInfo getTestPresetInfo(boolean available) { BluetoothHapPresetInfo info = mock(BluetoothHapPresetInfo.class); when(info.getName()).thenReturn(TEST_PRESET_NAME); when(info.getIndex()).thenReturn(TEST_PRESET_INDEX); + when(info.isAvailable()).thenReturn(available); return info; }