From 012ba80c507aee6dacfa5a9180ca020c84210463 Mon Sep 17 00:00:00 2001 From: chenjean Date: Tue, 8 Oct 2024 16:57:33 +0800 Subject: [PATCH 1/2] Create a method to allow child classes to define it's main switch toggle's pref key We'd like to make the main switch toggle's preference searchable. Since we construct the preference programmatically, this would allow the preference to be automatically scrolled to when the user is brought to this page from a search result. Bug: 372171003 Flag: EXEMPT refactor Test: manual Test: atest ToggleColorInversionPreferenceFragmentTest atest ToggleDaltonizerPreferenceFragmentTest atest ToggleFeaturePreferenceFragmentTest Change-Id: I6eed7598ad296a758573318cf4bde5de30c7005c --- ...chAccessibilityActivityPreferenceFragment.java | 2 +- .../ToggleDaltonizerPreferenceFragment.java | 2 +- .../ToggleFeaturePreferenceFragment.java | 9 ++++++--- ...oggleColorInversionPreferenceFragmentTest.java | 7 +++---- .../ToggleDaltonizerPreferenceFragmentTest.java | 3 +-- .../ToggleFeaturePreferenceFragmentTest.java | 15 +++++---------- 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java index 80d1ce0cdd0..91e65b1d4ec 100644 --- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java +++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java @@ -67,7 +67,7 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature initLaunchPreference(); final View view = super.onCreateView(inflater, container, savedInstanceState); - removePreference(KEY_USE_SERVICE_PREFERENCE); + removePreference(getUseServicePreferenceKey()); return view; } diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java index 86ddd71e262..d2fc6cc01c1 100644 --- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java @@ -106,7 +106,7 @@ public class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePreferenceF final List lists = new ArrayList<>(); lists.add(KEY_TOP_INTRO_PREFERENCE); lists.add(KEY_PREVIEW); - lists.add(KEY_USE_SERVICE_PREFERENCE); + lists.add(getUseServicePreferenceKey()); // Putting saturation level close to the preview so users can see what is changing. lists.add(KEY_SATURATION); lists.add(KEY_DEUTERANOMALY); diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 6649cf48354..a9f422e3749 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -83,7 +83,6 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment public static final String KEY_GENERAL_CATEGORY = "general_categories"; public static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference"; protected static final String KEY_TOP_INTRO_PREFERENCE = "top_intro"; - protected static final String KEY_USE_SERVICE_PREFERENCE = "use_service"; protected static final String KEY_HTML_DESCRIPTION_PREFERENCE = "html_description"; protected static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow"; protected static final String KEY_SAVED_QS_TOOLTIP_TYPE = "qs_tooltip_type"; @@ -325,6 +324,10 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment switchPreference.setTitle(title); } + protected String getUseServicePreferenceKey() { + return "use_service"; + } + protected CharSequence getShortcutTitle() { return getString(R.string.accessibility_shortcut_title, mPackageName); } @@ -411,7 +414,7 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment final List lists = new ArrayList<>(); lists.add(KEY_TOP_INTRO_PREFERENCE); lists.add(KEY_ANIMATED_IMAGE); - lists.add(KEY_USE_SERVICE_PREFERENCE); + lists.add(getUseServicePreferenceKey()); lists.add(KEY_GENERAL_CATEGORY); lists.add(KEY_HTML_DESCRIPTION_PREFERENCE); return lists; @@ -476,7 +479,7 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment private void initToggleServiceSwitchPreference() { mToggleServiceSwitchPreference = new SettingsMainSwitchPreference(getPrefContext()); - mToggleServiceSwitchPreference.setKey(KEY_USE_SERVICE_PREFERENCE); + mToggleServiceSwitchPreference.setKey(getUseServicePreferenceKey()); if (getArguments().containsKey(AccessibilitySettings.EXTRA_CHECKED)) { final boolean enabled = getArguments().getBoolean(AccessibilitySettings.EXTRA_CHECKED); mToggleServiceSwitchPreference.setChecked(enabled); diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java index 1a82a25b2f7..eb2e6fd78c1 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java @@ -18,7 +18,6 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; -import static com.android.settings.accessibility.ToggleColorInversionPreferenceFragment.KEY_USE_SERVICE_PREFERENCE; import static com.google.common.truth.Truth.assertThat; @@ -93,10 +92,10 @@ public class ToggleColorInversionPreferenceFragmentTest { when(mActivity.getContentResolver()).thenReturn(mContext.getContentResolver()); mScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null)); - when(mScreen.findPreference(KEY_USE_SERVICE_PREFERENCE)) + when(mScreen.findPreference(mFragment.getUseServicePreferenceKey())) .thenReturn(mFragment.mToggleServiceSwitchPreference); doReturn(mScreen).when(mFragment).getPreferenceScreen(); - mSwitchPreference = mScreen.findPreference(KEY_USE_SERVICE_PREFERENCE); + mSwitchPreference = mScreen.findPreference(mFragment.getUseServicePreferenceKey()); } @Test @@ -220,7 +219,7 @@ public class ToggleColorInversionPreferenceFragmentTest { mComponentName = PLACEHOLDER_COMPONENT_NAME; final SettingsMainSwitchPreference switchPreference = new SettingsMainSwitchPreference(context); - switchPreference.setKey(KEY_USE_SERVICE_PREFERENCE); + switchPreference.setKey(getUseServicePreferenceKey()); mToggleServiceSwitchPreference = switchPreference; setArguments(new Bundle()); } diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java index a5bfec2f0db..fd82994123d 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java @@ -18,7 +18,6 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; -import static com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment.KEY_USE_SERVICE_PREFERENCE; import static com.google.common.truth.Truth.assertThat; @@ -189,6 +188,6 @@ public class ToggleDaltonizerPreferenceFragmentTest { private SettingsMainSwitchPreference getMainFeatureToggle( ToggleDaltonizerPreferenceFragment fragment) { - return fragment.findPreference(KEY_USE_SERVICE_PREFERENCE); + return fragment.findPreference(fragment.getUseServicePreferenceKey()); } } diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java index 71855e023d0..844fabe2647 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java @@ -235,8 +235,7 @@ public class ToggleFeaturePreferenceFragmentTest { @Test @Config(shadows = ShadowFragment.class) public void onPreferenceToggledOnDisabledService_notShowTooltipView() { - mFragment.onPreferenceToggled( - ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ false); + mFragment.onPreferenceToggled(mFragment.getUseServicePreferenceKey(), /* enabled= */ false); assertThat(getLatestPopupWindow()).isNull(); } @@ -245,8 +244,7 @@ public class ToggleFeaturePreferenceFragmentTest { @DisableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT) @Config(shadows = ShadowFragment.class) public void onPreferenceToggledOnEnabledService_showTooltipView() { - mFragment.onPreferenceToggled( - ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true); + mFragment.onPreferenceToggled(mFragment.getUseServicePreferenceKey(), /* enabled= */ true); assertThat(getLatestPopupWindow().isShowing()).isTrue(); } @@ -258,8 +256,7 @@ public class ToggleFeaturePreferenceFragmentTest { suwIntent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true); when(mActivity.getIntent()).thenReturn(suwIntent); - mFragment.onPreferenceToggled( - ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true); + mFragment.onPreferenceToggled(mFragment.getUseServicePreferenceKey(), /* enabled= */ true); assertThat(getLatestPopupWindow()).isNull(); } @@ -268,12 +265,10 @@ public class ToggleFeaturePreferenceFragmentTest { @DisableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT) @Config(shadows = ShadowFragment.class) public void onPreferenceToggledOnEnabledService_tooltipViewShown_notShowTooltipView() { - mFragment.onPreferenceToggled( - ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true); + mFragment.onPreferenceToggled(mFragment.getUseServicePreferenceKey(), /* enabled= */ true); getLatestPopupWindow().dismiss(); - mFragment.onPreferenceToggled( - ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true); + mFragment.onPreferenceToggled(mFragment.getUseServicePreferenceKey(), /* enabled= */ true); assertThat(getLatestPopupWindow().isShowing()).isFalse(); } From 806b91414d221ec98472a9be261f9d02063912dd Mon Sep 17 00:00:00 2001 From: chenjean Date: Mon, 7 Oct 2024 15:24:57 +0800 Subject: [PATCH 2/2] Makes Use Color inversion searchable. Fix: 354773587 Flag: com.android.settings.accessibility.fix_a11y_settings_search Test: atest ToggleColorInversionPreferenceFragmentTest Test: adb shell pm clear com.google.android.settings.intelligence; search Settings for 'use color inversion', observe 'use color inversion' present; Change-Id: Iad13fbe163002af6e84a79fdeafb8517d53e2b09 --- ...oggleColorInversionPreferenceFragment.java | 38 ++++++++++++---- ...eColorInversionPreferenceFragmentTest.java | 43 ++++++++++++++++++- 2 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java index ccba9e7f68a..24aae3f521c 100644 --- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java @@ -33,6 +33,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.VisibleForTesting; + import com.android.settings.R; import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType; import com.android.settings.search.BaseSearchIndexProvider; @@ -52,7 +54,10 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere private static final String TAG = "ToggleColorInversionPreferenceFragment"; private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED; - private static final String KEY_SHORTCUT_PREFERENCE = "color_inversion_shortcut_key"; + @VisibleForTesting + static final String KEY_SHORTCUT_PREFERENCE = "color_inversion_shortcut_key"; + @VisibleForTesting + static final String KEY_SWITCH_PREFERENCE = "color_inversion_switch_preference_key"; @Override protected void registerKeysToObserverCallback( @@ -73,9 +78,9 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere mHtmlDescription = getText(R.string.accessibility_display_inversion_preference_subtitle); mTopIntroTitle = getText(R.string.accessibility_display_inversion_preference_intro_text); mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) - .authority(getPrefContext().getPackageName()) - .appendPath(String.valueOf(R.raw.a11y_color_inversion_banner)) - .build(); + .authority(getPrefContext().getPackageName()) + .appendPath(String.valueOf(R.raw.a11y_color_inversion_banner)) + .build(); final View view = super.onCreateView(inflater, container, savedInstanceState); updateFooterPreference(); return view; @@ -131,6 +136,11 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere switchPreference.setTitle(R.string.accessibility_display_inversion_switch_title); } + @Override + protected String getUseServicePreferenceKey() { + return KEY_SWITCH_PREFERENCE; + } + @Override protected CharSequence getShortcutTitle() { return getText(R.string.accessibility_display_inversion_shortcut_title); @@ -165,7 +175,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override int getUserShortcutTypes() { return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), - mComponentName); + mComponentName); } @Override @@ -176,8 +186,8 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override CharSequence getTileTooltipContent(@QuickSettingsTooltipType int type) { return getText(type == QuickSettingsTooltipType.GUIDE_TO_EDIT - ? R.string.accessibility_color_inversion_qs_tooltip_content - : R.string.accessibility_color_inversion_auto_added_qs_tooltip_content); + ? R.string.accessibility_color_inversion_qs_tooltip_content + : R.string.accessibility_color_inversion_auto_added_qs_tooltip_content); } @Override @@ -194,12 +204,22 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public List getRawDataToIndex(Context context, boolean enabled) { - final List rawData = new ArrayList<>(); + final List rawData = + super.getRawDataToIndex(context, enabled); + SearchIndexableRaw raw = new SearchIndexableRaw(context); raw.key = KEY_SHORTCUT_PREFERENCE; raw.title = context.getString( - R.string.accessibility_display_inversion_shortcut_title); + R.string.accessibility_display_inversion_shortcut_title); rawData.add(raw); + + if (Flags.fixA11ySettingsSearch()) { + SearchIndexableRaw mainPreferenceRaw = new SearchIndexableRaw(context); + mainPreferenceRaw.key = KEY_SWITCH_PREFERENCE; + mainPreferenceRaw.title = context.getString( + R.string.accessibility_display_inversion_switch_title); + rawData.add(mainPreferenceRaw); + } return rawData; } }; diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java index eb2e6fd78c1..e9711864909 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java @@ -18,6 +18,8 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; +import static com.android.settings.accessibility.ToggleColorInversionPreferenceFragment.KEY_SHORTCUT_PREFERENCE; +import static com.android.settings.accessibility.ToggleColorInversionPreferenceFragment.KEY_SWITCH_PREFERENCE; import static com.google.common.truth.Truth.assertThat; @@ -31,12 +33,12 @@ import android.content.ComponentName; import android.content.Context; import android.os.Bundle; import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.accessibility.Flags; import android.widget.PopupWindow; import androidx.fragment.app.FragmentActivity; @@ -49,6 +51,7 @@ import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltip import com.android.settings.testutils.XmlTestUtils; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.widget.SettingsMainSwitchPreference; +import com.android.settingslib.search.SearchIndexableRaw; import org.junit.Before; import org.junit.Rule; @@ -62,6 +65,7 @@ import org.robolectric.annotation.Config; import org.robolectric.shadow.api.Shadow; import org.robolectric.shadows.ShadowApplication; +import java.util.ArrayList; import java.util.List; /** Tests for {@link ToggleColorInversionPreferenceFragment} */ @@ -136,7 +140,7 @@ public class ToggleColorInversionPreferenceFragmentTest { } @Test - @DisableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) + @DisableFlags(android.view.accessibility.Flags.FLAG_A11Y_QS_SHORTCUT) public void onPreferenceToggled_colorCorrectDisabled_shouldReturnTrueAndShowTooltipView() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, OFF); @@ -198,6 +202,41 @@ public class ToggleColorInversionPreferenceFragmentTest { assertThat(keys).containsAtLeastElementsIn(niks); } + @Test + @DisableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH) + public void getRawDataToIndex_flagOff_returnShortcutIndexablePreferences() { + List rawData = ToggleColorInversionPreferenceFragment + .SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, /* enabled= */ true); + + assertThat(rawData).hasSize(1); + assertThat(rawData.get(0).key).isEqualTo(KEY_SHORTCUT_PREFERENCE); + assertThat(rawData.get(0).title).isEqualTo(mContext.getString( + R.string.accessibility_display_inversion_shortcut_title)); + + } + + @Test + @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH) + public void getRawDataToIndex_flagOn_returnAllIndexablePreferences() { + String[] expectedKeys = {KEY_SHORTCUT_PREFERENCE, KEY_SWITCH_PREFERENCE}; + String[] expectedTitles = { + mContext.getString(R.string.accessibility_display_inversion_shortcut_title), + mContext.getString(R.string.accessibility_display_inversion_switch_title)}; + List keysResultList = new ArrayList<>(); + List titlesResultList = new ArrayList<>(); + List rawData = ToggleColorInversionPreferenceFragment + .SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, /* enabled= */ true); + + for (SearchIndexableRaw rawDataItem : rawData) { + keysResultList.add(rawDataItem.key); + titlesResultList.add(rawDataItem.title); + } + + assertThat(rawData).hasSize(2); + assertThat(keysResultList).containsExactly(expectedKeys); + assertThat(titlesResultList).containsExactly(expectedTitles); + } + private static PopupWindow getLatestPopupWindow() { final ShadowApplication shadowApplication = Shadow.extract(ApplicationProvider.getApplicationContext());