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;
}