Merge "Physical keyboard related options shouldn't be searchable when invisible" into main

This commit is contained in:
Chun-Ku Lin
2024-07-31 19:09:06 +00:00
committed by Android (Google) Code Review
8 changed files with 158 additions and 6 deletions

View File

@@ -51,6 +51,16 @@ flag {
bug: "301198830" bug: "301198830"
} }
flag {
name: "fix_a11y_settings_search"
namespace: "accessibility"
description: "Fix the a11y related search items in Settings app"
bug: "333437173"
metadata {
purpose: PURPOSE_BUGFIX
}
}
flag { flag {
name: "hide_magnification_always_on_toggle_when_window_mode_only" name: "hide_magnification_always_on_toggle_when_window_mode_only"
namespace: "accessibility" namespace: "accessibility"

View File

@@ -613,7 +613,7 @@ public class AccessibilitySettings extends DashboardFragment implements
} }
} }
private boolean isAnyHardKeyboardsExist() { static boolean isAnyHardKeyboardsExist() {
for (int deviceId : InputDevice.getDeviceIds()) { for (int deviceId : InputDevice.getDeviceIds()) {
final InputDevice device = InputDevice.getDevice(deviceId); final InputDevice device = InputDevice.getDevice(deviceId);
if (device != null && !device.isVirtual() && device.isFullKeyboard()) { if (device != null && !device.isVirtual() && device.isFullKeyboard()) {

View File

@@ -19,16 +19,21 @@ package com.android.settings.accessibility;
import android.content.Context; import android.content.Context;
import android.hardware.input.InputSettings; import android.hardware.input.InputSettings;
import android.util.Log;
import androidx.annotation.NonNull;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import java.util.List;
/** /**
* A toggle preference controller for keyboard bounce key. * A toggle preference controller for keyboard bounce key.
*/ */
public class KeyboardBounceKeyPreferenceController extends TogglePreferenceController { public class KeyboardBounceKeyPreferenceController extends TogglePreferenceController {
private static final String TAG = "BounceKeyPrefController";
static final String PREF_KEY = "toggle_keyboard_bounce_keys"; static final String PREF_KEY = "toggle_keyboard_bounce_keys";
public KeyboardBounceKeyPreferenceController(Context context, String preferenceKey) { public KeyboardBounceKeyPreferenceController(Context context, String preferenceKey) {
@@ -58,4 +63,17 @@ public class KeyboardBounceKeyPreferenceController extends TogglePreferenceContr
public int getSliceHighlightMenuRes() { public int getSliceHighlightMenuRes() {
return R.string.menu_key_accessibility; return R.string.menu_key_accessibility;
} }
@Override
public void updateNonIndexableKeys(@NonNull List<String> keys) {
super.updateNonIndexableKeys(keys);
if (Flags.fixA11ySettingsSearch() && !AccessibilitySettings.isAnyHardKeyboardsExist()) {
if (keys.contains(getPreferenceKey())) {
Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list.");
return;
}
keys.add(getPreferenceKey());
}
}
} }

View File

@@ -19,15 +19,21 @@ package com.android.settings.accessibility;
import android.content.Context; import android.content.Context;
import android.hardware.input.InputSettings; import android.hardware.input.InputSettings;
import android.util.Log;
import androidx.annotation.NonNull;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import java.util.List;
/** /**
* A toggle preference controller for keyboard slow key. * A toggle preference controller for keyboard slow key.
*/ */
public class KeyboardSlowKeyPreferenceController extends TogglePreferenceController { public class KeyboardSlowKeyPreferenceController extends TogglePreferenceController {
private static final String TAG = "SlowKeyPrefController";
static final String PREF_KEY = "toggle_keyboard_slow_keys"; static final String PREF_KEY = "toggle_keyboard_slow_keys";
@@ -58,4 +64,17 @@ public class KeyboardSlowKeyPreferenceController extends TogglePreferenceControl
public int getSliceHighlightMenuRes() { public int getSliceHighlightMenuRes() {
return R.string.menu_key_accessibility; return R.string.menu_key_accessibility;
} }
@Override
public void updateNonIndexableKeys(@NonNull List<String> keys) {
super.updateNonIndexableKeys(keys);
if (Flags.fixA11ySettingsSearch() && !AccessibilitySettings.isAnyHardKeyboardsExist()) {
if (keys.contains(getPreferenceKey())) {
Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list.");
return;
}
keys.add(getPreferenceKey());
}
}
} }

View File

@@ -19,15 +19,20 @@ package com.android.settings.accessibility;
import android.content.Context; import android.content.Context;
import android.hardware.input.InputSettings; import android.hardware.input.InputSettings;
import android.util.Log;
import androidx.annotation.NonNull;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
import java.util.List;
/** /**
* A toggle preference controller for keyboard sticky key. * A toggle preference controller for keyboard sticky key.
*/ */
public class KeyboardStickyKeyPreferenceController extends TogglePreferenceController { public class KeyboardStickyKeyPreferenceController extends TogglePreferenceController {
private static final String TAG = "StickyKeyPrefController";
static final String PREF_KEY = "toggle_keyboard_sticky_keys"; static final String PREF_KEY = "toggle_keyboard_sticky_keys";
public KeyboardStickyKeyPreferenceController(Context context, String preferenceKey) { public KeyboardStickyKeyPreferenceController(Context context, String preferenceKey) {
@@ -55,4 +60,17 @@ public class KeyboardStickyKeyPreferenceController extends TogglePreferenceContr
public int getSliceHighlightMenuRes() { public int getSliceHighlightMenuRes() {
return R.string.menu_key_accessibility; return R.string.menu_key_accessibility;
} }
@Override
public void updateNonIndexableKeys(@NonNull List<String> keys) {
super.updateNonIndexableKeys(keys);
if (Flags.fixA11ySettingsSearch() && !AccessibilitySettings.isAnyHardKeyboardsExist()) {
if (keys.contains(getPreferenceKey())) {
Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list.");
return;
}
keys.add(getPreferenceKey());
}
}
} }

View File

@@ -25,6 +25,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.content.Context; import android.content.Context;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings; import android.provider.Settings;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@@ -34,19 +36,24 @@ import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import org.junit.Assume;
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;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class KeyboardBounceKeyPreferenceControllerTest { public class KeyboardBounceKeyPreferenceControllerTest {
private static final String KEY_ACCESSIBILITY_BOUNCE_KEYS = private static final String KEY_ACCESSIBILITY_BOUNCE_KEYS =
Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS; Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS;
private static final int UNKNOWN = -1; private static final int UNKNOWN = -1;
@Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private final Context mContext = ApplicationProvider.getApplicationContext(); private final Context mContext = ApplicationProvider.getApplicationContext();
private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext)); private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
private final KeyboardBounceKeyPreferenceController mController = private final KeyboardBounceKeyPreferenceController mController =
@@ -131,4 +138,26 @@ public class KeyboardBounceKeyPreferenceControllerTest {
mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS,
UNKNOWN)).isNotEqualTo(OFF); UNKNOWN)).isNotEqualTo(OFF);
} }
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void updateNonIndexableKeys_physicalKeyboardExists_returnEmptyList() {
Assume.assumeTrue(AccessibilitySettings.isAnyHardKeyboardsExist());
List<String> nonIndexableKeys = new ArrayList<>();
mController.updateNonIndexableKeys(nonIndexableKeys);
assertThat(nonIndexableKeys).isEmpty();
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void updateNonIndexableKeys_noPhysicalKeyboard_returnPreKey() {
Assume.assumeFalse(AccessibilitySettings.isAnyHardKeyboardsExist());
List<String> nonIndexableKeys = new ArrayList<>();
mController.updateNonIndexableKeys(nonIndexableKeys);
assertThat(nonIndexableKeys).contains(mController.getPreferenceKey());
}
} }

View File

@@ -25,6 +25,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.content.Context; import android.content.Context;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings; import android.provider.Settings;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@@ -34,19 +36,24 @@ import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import org.junit.Assume;
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;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class KeyboardSlowKeyPreferenceControllerTest { public class KeyboardSlowKeyPreferenceControllerTest {
private static final String KEY_ACCESSIBILITY_SLOW_KEYS = private static final String KEY_ACCESSIBILITY_SLOW_KEYS =
Settings.Secure.ACCESSIBILITY_SLOW_KEYS; Settings.Secure.ACCESSIBILITY_SLOW_KEYS;
private static final int UNKNOWN = -1; private static final int UNKNOWN = -1;
@Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private final Context mContext = ApplicationProvider.getApplicationContext(); private final Context mContext = ApplicationProvider.getApplicationContext();
private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext)); private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
private final KeyboardSlowKeyPreferenceController mController = private final KeyboardSlowKeyPreferenceController mController =
@@ -131,4 +138,26 @@ public class KeyboardSlowKeyPreferenceControllerTest {
mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, UNKNOWN)).isNotEqualTo( mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, UNKNOWN)).isNotEqualTo(
OFF); OFF);
} }
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void updateNonIndexableKeys_physicalKeyboardExists_returnEmptyList() {
Assume.assumeTrue(AccessibilitySettings.isAnyHardKeyboardsExist());
List<String> nonIndexableKeys = new ArrayList<>();
mController.updateNonIndexableKeys(nonIndexableKeys);
assertThat(nonIndexableKeys).isEmpty();
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void updateNonIndexableKeys_noPhysicalKeyboard_returnPreKey() {
Assume.assumeFalse(AccessibilitySettings.isAnyHardKeyboardsExist());
List<String> nonIndexableKeys = new ArrayList<>();
mController.updateNonIndexableKeys(nonIndexableKeys);
assertThat(nonIndexableKeys).contains(mController.getPreferenceKey());
}
} }

View File

@@ -25,6 +25,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.content.Context; import android.content.Context;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings; import android.provider.Settings;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@@ -34,19 +36,24 @@ import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import org.junit.Assume;
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;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class KeyboardStickyKeyPreferenceControllerTest { public class KeyboardStickyKeyPreferenceControllerTest {
private static final String KEY_ACCESSIBILITY_STICKY_KEYS = private static final String KEY_ACCESSIBILITY_STICKY_KEYS =
Settings.Secure.ACCESSIBILITY_STICKY_KEYS; Settings.Secure.ACCESSIBILITY_STICKY_KEYS;
private static final int UNKNOWN = -1; private static final int UNKNOWN = -1;
@Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private final Context mContext = ApplicationProvider.getApplicationContext(); private final Context mContext = ApplicationProvider.getApplicationContext();
private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext)); private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
private final KeyboardStickyKeyPreferenceController mController = private final KeyboardStickyKeyPreferenceController mController =
@@ -129,4 +136,26 @@ public class KeyboardStickyKeyPreferenceControllerTest {
assertThat(Settings.Secure.getInt( assertThat(Settings.Secure.getInt(
mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, UNKNOWN)).isEqualTo(ON); mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, UNKNOWN)).isEqualTo(ON);
} }
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void updateNonIndexableKeys_physicalKeyboardExists_returnEmptyList() {
Assume.assumeTrue(AccessibilitySettings.isAnyHardKeyboardsExist());
List<String> nonIndexableKeys = new ArrayList<>();
mController.updateNonIndexableKeys(nonIndexableKeys);
assertThat(nonIndexableKeys).isEmpty();
}
@Test
@EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
public void updateNonIndexableKeys_noPhysicalKeyboard_returnPreKey() {
Assume.assumeFalse(AccessibilitySettings.isAnyHardKeyboardsExist());
List<String> nonIndexableKeys = new ArrayList<>();
mController.updateNonIndexableKeys(nonIndexableKeys);
assertThat(nonIndexableKeys).contains(mController.getPreferenceKey());
}
} }