Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ddd74b9 authored by Daniel Norman's avatar Daniel Norman
Browse files

Fix Settings Search for OneHandedSettings

- Marks top header preference as non-searchable
- Makes shortcut preference searchable

Fix: 353591062
Test: manually confirm above behaviors
Test: atest OneHandedSettingsTest
Flag: com.android.settings.accessibility.fix_a11y_settings_search
Change-Id: I3355f817358cec1d265b89d75229ffc2742efe1c
parent 7b846bc9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -24,7 +24,8 @@

    <com.android.settingslib.widget.TopIntroPreference
        android:key="gesture_one_handed_mode_intro"
        android:title="@string/one_handed_mode_intro_text"/>
        android:title="@string/one_handed_mode_intro_text"
        settings:searchable="false"/>

    <com.android.settingslib.widget.IllustrationPreference
        android:key="one_handed_header"
+25 −1
Original line number Diff line number Diff line
@@ -29,15 +29,19 @@ import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;

import com.android.internal.accessibility.AccessibilityShortcutController;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityFragmentUtils;
import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.widget.IllustrationPreference;
import com.android.settingslib.widget.MainSwitchPreference;

import java.util.List;

/**
 * Fragment for One-handed mode settings
 *
@@ -48,7 +52,8 @@ import com.android.settingslib.widget.MainSwitchPreference;
public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment {

    private static final String TAG = "OneHandedSettings";
    private static final String ONE_HANDED_SHORTCUT_KEY = "one_handed_shortcuts_preference";
    @VisibleForTesting
    static final String ONE_HANDED_SHORTCUT_KEY = "one_handed_shortcuts_preference";
    private static final String ONE_HANDED_ILLUSTRATION_KEY = "one_handed_header";
    protected static final String ONE_HANDED_MAIN_SWITCH_KEY =
            "gesture_one_handed_mode_enabled_main_switch";
@@ -180,6 +185,25 @@ public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment {
                protected boolean isPageSearchEnabled(Context context) {
                    return OneHandedSettingsUtils.isSupportOneHandedMode();
                }

                @Override
                public List<SearchIndexableRaw> getRawDataToIndex(Context context,
                        boolean enabled) {
                    final List<SearchIndexableRaw> rawData =
                            super.getRawDataToIndex(context, enabled);
                    if (!com.android.settings.accessibility.Flags.fixA11ySettingsSearch()) {
                        return rawData;
                    }
                    rawData.add(createShortcutPreferenceSearchData(context));
                    return rawData;
                }

                private SearchIndexableRaw createShortcutPreferenceSearchData(Context context) {
                    final SearchIndexableRaw raw = new SearchIndexableRaw(context);
                    raw.key = ONE_HANDED_SHORTCUT_KEY;
                    raw.title = context.getString(R.string.one_handed_mode_shortcut_title);
                    return raw;
                }
            };

    @Override
+42 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.gestures;

import static com.android.settings.gestures.OneHandedSettings.ONE_HANDED_SHORTCUT_KEY;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.spy;
@@ -23,14 +25,19 @@ import static org.mockito.Mockito.when;

import android.content.Context;
import android.os.SystemProperties;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.SearchIndexableResource;

import androidx.test.core.app.ApplicationProvider;

import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settingslib.search.SearchIndexableRaw;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -43,12 +50,16 @@ import java.util.List;
@RunWith(RobolectricTestRunner.class)
public class OneHandedSettingsTest {

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private final Context mContext = ApplicationProvider.getApplicationContext();
    private OneHandedSettings mSettings;

    @Before
    public void setUp() {
        mSettings = spy(new OneHandedSettings());
        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
    }

    @Test
@@ -102,4 +113,35 @@ public class OneHandedSettingsTest {
        final boolean isEnabled = (Boolean) obj;
        assertThat(isEnabled).isFalse();
    }

    @Test
    @DisableFlags(com.android.settings.accessibility.Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
    public void getRawDataToIndex_flagDisabled_isEmpty() {
        final List<SearchIndexableRaw> rawData = OneHandedSettings
                .SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true);
        final List<String> actualSearchKeys = rawData.stream().map(raw -> raw.key).toList();

        assertThat(actualSearchKeys).isEmpty();
    }

    @Test
    @EnableFlags(com.android.settings.accessibility.Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
    public void getRawDataToIndex_returnsOnlyShortcutKey() {
        final List<SearchIndexableRaw> rawData = OneHandedSettings
                .SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true);
        final List<String> actualSearchKeys = rawData.stream().map(raw -> raw.key).toList();

        assertThat(actualSearchKeys).containsExactly(ONE_HANDED_SHORTCUT_KEY);
    }

    @Test
    public void getNonIndexableKeys_containsNonSearchableElements() {
        final List<String> niks = OneHandedSettings.SEARCH_INDEX_DATA_PROVIDER
                .getNonIndexableKeys(mContext);

        assertThat(niks).containsExactly(
                "gesture_one_handed_mode_intro",
                "one_handed_header",
                "one_handed_mode_footer");
    }
}