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
This commit is contained in:
@@ -24,7 +24,8 @@
|
|||||||
|
|
||||||
<com.android.settingslib.widget.TopIntroPreference
|
<com.android.settingslib.widget.TopIntroPreference
|
||||||
android:key="gesture_one_handed_mode_intro"
|
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
|
<com.android.settingslib.widget.IllustrationPreference
|
||||||
android:key="one_handed_header"
|
android:key="one_handed_header"
|
||||||
|
@@ -29,15 +29,19 @@ import android.view.ViewGroup;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.android.internal.accessibility.AccessibilityShortcutController;
|
import com.android.internal.accessibility.AccessibilityShortcutController;
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.accessibility.AccessibilityFragmentUtils;
|
import com.android.settings.accessibility.AccessibilityFragmentUtils;
|
||||||
import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
|
import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
|
||||||
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settingslib.search.SearchIndexable;
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
import com.android.settingslib.widget.IllustrationPreference;
|
import com.android.settingslib.widget.IllustrationPreference;
|
||||||
import com.android.settingslib.widget.MainSwitchPreference;
|
import com.android.settingslib.widget.MainSwitchPreference;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment for One-handed mode settings
|
* Fragment for One-handed mode settings
|
||||||
*
|
*
|
||||||
@@ -48,7 +52,8 @@ import com.android.settingslib.widget.MainSwitchPreference;
|
|||||||
public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment {
|
public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment {
|
||||||
|
|
||||||
private static final String TAG = "OneHandedSettings";
|
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";
|
private static final String ONE_HANDED_ILLUSTRATION_KEY = "one_handed_header";
|
||||||
protected static final String ONE_HANDED_MAIN_SWITCH_KEY =
|
protected static final String ONE_HANDED_MAIN_SWITCH_KEY =
|
||||||
"gesture_one_handed_mode_enabled_main_switch";
|
"gesture_one_handed_mode_enabled_main_switch";
|
||||||
@@ -180,6 +185,25 @@ public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment {
|
|||||||
protected boolean isPageSearchEnabled(Context context) {
|
protected boolean isPageSearchEnabled(Context context) {
|
||||||
return OneHandedSettingsUtils.isSupportOneHandedMode();
|
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
|
@Override
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.gestures;
|
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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
@@ -23,14 +25,19 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.SystemProperties;
|
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 android.provider.SearchIndexableResource;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
@@ -43,12 +50,16 @@ import java.util.List;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class OneHandedSettingsTest {
|
public class OneHandedSettingsTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
||||||
|
|
||||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||||
private OneHandedSettings mSettings;
|
private OneHandedSettings mSettings;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mSettings = spy(new OneHandedSettings());
|
mSettings = spy(new OneHandedSettings());
|
||||||
|
SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -102,4 +113,35 @@ public class OneHandedSettingsTest {
|
|||||||
final boolean isEnabled = (Boolean) obj;
|
final boolean isEnabled = (Boolean) obj;
|
||||||
assertThat(isEnabled).isFalse();
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user