Loading res/xml/one_handed_settings.xml +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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" Loading src/com/android/settings/gestures/OneHandedSettings.java +25 −1 Original line number Original line Diff line number Diff line Loading @@ -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 * * Loading @@ -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"; Loading Loading @@ -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 Loading tests/robotests/src/com/android/settings/gestures/OneHandedSettingsTest.java +42 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading Loading @@ -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"); } } } Loading
res/xml/one_handed_settings.xml +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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" Loading
src/com/android/settings/gestures/OneHandedSettings.java +25 −1 Original line number Original line Diff line number Diff line Loading @@ -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 * * Loading @@ -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"; Loading Loading @@ -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 Loading
tests/robotests/src/com/android/settings/gestures/OneHandedSettingsTest.java +42 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading Loading @@ -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"); } } }