Makes Caption Language searchable only if captions are enabled.

Fix: 354785578
Flag: com.android.settings.accessibility.fix_a11y_settings_search
Test: atest CaptioningMoreOptionsFragmentTest
Test: adb shell pm clear com.google.android.settings.intelligence;
      disable captioning;
      search Settings for 'language', observe caption language missing
      enable captioning;
      search Settings for 'language', observe caption language present
Change-Id: I015d2c77fbd3f7b8fe713bafb3a49a86160ca958
diff --git a/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
index 2895e75..85b48e9 100644
--- a/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
+++ b/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
@@ -17,6 +17,8 @@
 package com.android.settings.accessibility;
 
 import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.provider.Settings;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -50,5 +52,16 @@
     }
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider(R.xml.captioning_more_options);
+            new BaseSearchIndexProvider(R.xml.captioning_more_options) {
+                @Override
+                protected boolean isPageSearchEnabled(Context context) {
+                    if (!Flags.fixA11ySettingsSearch()) {
+                        return super.isPageSearchEnabled(context);
+                    }
+                    // CaptioningMoreOptions is only searchable if captions are enabled, so that we
+                    // don't show search results for settings that will cause no change to the user.
+                    return Settings.Secure.getInt(context.getContentResolver(),
+                            Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, 0) == 1;
+                }
+            };
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
index 6969472..5486808 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
@@ -20,6 +20,9 @@
 
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.provider.Settings;
 
 import androidx.test.core.app.ApplicationProvider;
 
@@ -27,15 +30,23 @@
 import com.android.settings.testutils.XmlTestUtils;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /** Tests for {@link CaptioningMoreOptionsFragment}. */
 @RunWith(RobolectricTestRunner.class)
 public class CaptioningMoreOptionsFragmentTest {
+    // Language/locale preference key, from captioning_more_options.xml
+    private static final String CAPTIONING_LOCALE_KEY = "captioning_locale";
+
+    @Rule
+    public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
 
     private final Context mContext = ApplicationProvider.getApplicationContext();
     private CaptioningMoreOptionsFragment mFragment;
@@ -65,11 +76,40 @@
     @Test
     public void getNonIndexableKeys_existInXmlLayout() {
         final List<String> niks = CaptioningMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
-                .getNonIndexableKeys(mContext);
+                .getNonIndexableKeys(mContext)
+                .stream().filter(Objects::nonNull).collect(Collectors.toList());
         final List<String> keys =
-                XmlTestUtils.getKeysFromPreferenceXml(mContext,
-                        R.xml.captioning_more_options);
+                XmlTestUtils.getKeysFromPreferenceXml(mContext, R.xml.captioning_more_options);
 
         assertThat(keys).containsAtLeastElementsIn(niks);
     }
+
+    @Test
+    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
+    public void getNonIndexableKeys_captioningEnabled_localeIsSearchable() {
+        setCaptioningEnabled(true);
+
+        final List<String> niks = CaptioningMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+
+        // Not in NonIndexableKeys == searchable
+        assertThat(niks).doesNotContain(CAPTIONING_LOCALE_KEY);
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
+    public void getNonIndexableKeys_captioningDisabled_localeIsNotSearchable() {
+        setCaptioningEnabled(false);
+
+        final List<String> niks = CaptioningMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+
+        // In NonIndexableKeys == not searchable
+        assertThat(niks).contains(CAPTIONING_LOCALE_KEY);
+    }
+
+    private void setCaptioningEnabled(boolean enabled) {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, enabled ? 1 : 0);
+    }
 }