From 48d984511a00ed601916c76aaa8128e11596ed5f Mon Sep 17 00:00:00 2001 From: Candice Date: Mon, 28 Oct 2024 02:31:06 +0000 Subject: [PATCH] Enable HearingAid page search if the device supports hearing aid Bug: 353847080 Flag: com.android.settings.accessibility.fix_a11y_settings_search Test: atest AccessibilityHearingAidsFragmentTest Test: let the HearingAidHelper return false in supporting availability and check if the items exist during search Change-Id: I6b6ffddb5ccd44795db292d1ddc3b60f69166b2a --- .../AccessibilityHearingAidsFragment.java | 18 +++++++- .../AccessibilityHearingAidsFragmentTest.java | 45 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java b/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java index 0f551b0fa1f..09e2d97e48b 100644 --- a/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java @@ -26,6 +26,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceCategory; import com.android.internal.accessibility.AccessibilityShortcutController; @@ -118,6 +119,21 @@ public class AccessibilityHearingAidsFragment extends AccessibilityShortcutPrefe return getText(R.string.accessibility_hearing_device_shortcut_title); } + @VisibleForTesting + static boolean isPageSearchEnabled(Context context) { + final HearingAidHelper mHelper = new HearingAidHelper(context); + return mHelper.isHearingAidSupported(); + } + public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids); + new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids) { + @Override + protected boolean isPageSearchEnabled(Context context) { + if (Flags.fixA11ySettingsSearch()) { + return AccessibilityHearingAidsFragment.isPageSearchEnabled(context); + } else { + return super.isPageSearchEnabled(context); + } + } + }; } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java index e5e89501c0e..25a2cc16b4e 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java @@ -22,33 +22,52 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothProfile; import android.content.Context; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.telephony.TelephonyManager; import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; +import com.android.settings.bluetooth.Utils; import com.android.settings.testutils.XmlTestUtils; +import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; +import com.android.settings.testutils.shadow.ShadowBluetoothUtils; +import com.android.settingslib.bluetooth.LocalBluetoothManager; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; import java.util.List; /** Tests for {@link AccessibilityHearingAidsFragment}. */ @RunWith(RobolectricTestRunner.class) +@Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class}) public class AccessibilityHearingAidsFragmentTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Rule + public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Spy private final Context mContext = ApplicationProvider.getApplicationContext(); + + @Mock + private LocalBluetoothManager mLocalBluetoothManager; + private ShadowBluetoothAdapter mShadowBluetoothAdapter; + private BluetoothAdapter mBluetoothAdapter; private TelephonyManager mTelephonyManager; @Before @@ -56,10 +75,18 @@ public class AccessibilityHearingAidsFragmentTest { mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class)); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported(); + + ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager; + mLocalBluetoothManager = Utils.getLocalBtManager(mContext); + mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + mShadowBluetoothAdapter = Shadow.extract(mBluetoothAdapter); } @Test public void getNonIndexableKeys_existInXmlLayout() { + mShadowBluetoothAdapter.clearSupportedProfiles(); + mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID); + final List niks = AccessibilityHearingAidsFragment.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(mContext); final List keys = @@ -67,4 +94,22 @@ public class AccessibilityHearingAidsFragmentTest { assertThat(keys).containsAtLeastElementsIn(niks); } + + @Test + @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH) + public void deviceSupportsHearingAid_isPageSearchEnabled_returnTrue() { + mShadowBluetoothAdapter.clearSupportedProfiles(); + mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID); + + assertThat(AccessibilityHearingAidsFragment.isPageSearchEnabled(mContext)).isTrue(); + } + + @Test + @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH) + public void deviceDoesNotSupportHearingAid_isPageSearchEnabled_returnFalse() { + mShadowBluetoothAdapter.clearSupportedProfiles(); + mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEADSET); + + assertThat(AccessibilityHearingAidsFragment.isPageSearchEnabled(mContext)).isFalse(); + } }