From 9a8b50baea32516e2a0919cbb6c4f4c9df0a5134 Mon Sep 17 00:00:00 2001 From: Angela Wang Date: Wed, 19 Jun 2024 06:56:52 +0000 Subject: [PATCH 1/2] Show message when no preset info is obtained from the remote device Display message when hearing aid has no presets configured. Previously, the preset item was grayed out with no explanation, causing confusion. Now, a clear message informs users that presets are not available on their device. Bug: 345112286 Test: atest BluetoothDetailsHearingAidsPresetsControllerTest Flag: EXEMPT bugfix Change-Id: Ie1ece8f08933eb28a5947e2a030888a6bc49bc9f --- res/values/strings.xml | 2 ++ ...luetoothDetailsHearingAidsPresetsController.java | 13 ++++++++----- ...oothDetailsHearingAidsPresetsControllerTest.java | 3 +++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index f92fd2aca84..ee06f9bef10 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..12f904b6ae2 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); } } } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java index cf80a871416..36838852b8a 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,6 +216,8 @@ 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 From 2b78c17e84267aea414fa49ac2a521d86cc88f42 Mon Sep 17 00:00:00 2001 From: Angela Wang Date: Wed, 19 Jun 2024 08:10:09 +0000 Subject: [PATCH 2/2] Remove unavailable preset info option Bug: 347134589 Test: atest BluetoothDetailsHearingAidsPresetsControllerTest Flag: EXEMPT bugfix Change-Id: Iabdbe675a08fcd172617ef31dd0b8fbe8dccbb89 --- ...thDetailsHearingAidsPresetsController.java | 3 +- ...tailsHearingAidsPresetsControllerTest.java | 28 ++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java index 12f904b6ae2..f7ccc610870 100644 --- a/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java +++ b/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsController.java @@ -276,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 36838852b8a..7c865f340a6 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingAidsPresetsControllerTest.java @@ -222,7 +222,7 @@ public class BluetoothDetailsHearingAidsPresetsControllerTest extends @Test public void refresh_validPresetInfo_preferenceEnabled() { - BluetoothHapPresetInfo info = getTestPresetInfo(); + BluetoothHapPresetInfo info = getTestPresetInfo(true); when(mHapClientProfile.getAllPresetInfo(mDevice)).thenReturn(List.of(info)); mController.refresh(); @@ -233,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); @@ -245,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); @@ -265,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; }