[Physical Keyboard][Setting] New pk a11y entry under a11y page
Add entry for physical keyboard a11y page under a11y setting
Bug: 345399212
Test: atest SettingsRoboTests
Flag: com.android.settings.keyboard.keyboard_and_touchpad_a11y_new_page_enabled
Change-Id: I0c59c3a9df1b5df5e22349ab3907f767682d6fb9
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 18e6455..fcc5ce3 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -120,37 +120,14 @@
settings:controller="com.android.settings.inputmethod.PointerTouchpadPreferenceController"
settings:searchable="true"/>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:key="physical_keyboard_options_category"
- android:persistent="false"
- android:title="@string/keyboard_category_title">
-
- <SwitchPreferenceCompat
+ <Preference
android:icon="@drawable/ic_sticky_keys"
- android:key="toggle_keyboard_sticky_keys"
+ android:key="physical_keyboard_a11y"
+ android:title="@string/keyboard_a11y_settings"
+ android:summary="@string/keyboard_a11y_settings_summary"
android:persistent="false"
- android:summary="@string/sticky_keys_summary"
- android:title="@string/sticky_keys"
- settings:controller="com.android.settings.accessibility.KeyboardStickyKeyPreferenceController"
- settings:searchable="true" />
-
- <SwitchPreferenceCompat
- android:icon="@drawable/ic_bounce_keys"
- android:key="toggle_keyboard_bounce_keys"
- android:persistent="false"
- android:title="@string/bounce_keys"
- settings:controller="com.android.settings.accessibility.KeyboardBounceKeyPreferenceController"
- settings:searchable="true" />
-
- <SwitchPreferenceCompat
- android:icon="@drawable/ic_slow_keys"
- android:key="toggle_keyboard_slow_keys"
- android:persistent="false"
- android:title="@string/slow_keys"
- settings:controller="com.android.settings.accessibility.KeyboardSlowKeyPreferenceController"
- settings:searchable="true" />
+ android:fragment="com.android.settings.inputmethod.PhysicalKeyboardA11yFragment"
+ settings:controller="com.android.settings.inputmethod.PhysicalKeyboardA11yPreferenceController" />
</PreferenceCategory>
<PreferenceCategory
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index db8f937..801d3ee 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -30,7 +30,6 @@
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArrayMap;
-import android.view.InputDevice;
import android.view.accessibility.AccessibilityManager;
import androidx.annotation.NonNull;
@@ -45,7 +44,6 @@
import com.android.settings.accessibility.AccessibilityUtil.AccessibilityServiceFragmentType;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.development.Enable16kUtils;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.RestrictedPreference;
@@ -73,14 +71,12 @@
private static final String CATEGORY_DISPLAY = "display_category";
@VisibleForTesting
static final String CATEGORY_DOWNLOADED_SERVICES = "user_installed_services_category";
- private static final String CATEGORY_KEYBOARD_OPTIONS = "physical_keyboard_options_category";
@VisibleForTesting
static final String CATEGORY_INTERACTION_CONTROL = "interaction_control_category";
private static final String[] CATEGORIES = new String[]{
CATEGORY_SCREEN_READER, CATEGORY_CAPTIONS, CATEGORY_AUDIO, CATEGORY_DISPLAY,
- CATEGORY_SPEECH, CATEGORY_INTERACTION_CONTROL,
- CATEGORY_KEYBOARD_OPTIONS, CATEGORY_DOWNLOADED_SERVICES
+ CATEGORY_SPEECH, CATEGORY_INTERACTION_CONTROL, CATEGORY_DOWNLOADED_SERVICES
};
// Extras passed to sub-fragments.
@@ -275,7 +271,7 @@
* @return The service summary
*/
public static CharSequence getServiceSummary(Context context, AccessibilityServiceInfo info,
- boolean serviceEnabled) {
+ boolean serviceEnabled) {
if (serviceEnabled && info.crashed) {
return context.getText(R.string.accessibility_summary_state_stopped);
}
@@ -461,7 +457,6 @@
// Hide category if it is empty.
updatePreferenceCategoryVisibility(CATEGORY_SCREEN_READER);
updatePreferenceCategoryVisibility(CATEGORY_SPEECH);
- updatePreferenceCategoryVisibility(CATEGORY_KEYBOARD_OPTIONS);
}
/**
@@ -556,9 +551,7 @@
/**
* Updates preferences related to system configurations.
*/
- protected void updateSystemPreferences() {
- updateKeyboardPreferencesVisibility();
- }
+ protected void updateSystemPreferences() {}
private void updatePreferencesState() {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
@@ -567,53 +560,6 @@
findPreference(controller.getPreferenceKey())));
}
- private void updateKeyboardPreferencesVisibility() {
- if (!mCategoryToPrefCategoryMap.containsKey(CATEGORY_KEYBOARD_OPTIONS)) {
- return;
- }
- boolean isVisible = isAnyHardKeyboardsExist()
- && isAnyKeyboardPreferenceAvailable();
- mCategoryToPrefCategoryMap.get(CATEGORY_KEYBOARD_OPTIONS).setVisible(
- isVisible);
- if (isVisible) {
- //set summary here.
- findPreference(KeyboardBounceKeyPreferenceController.PREF_KEY).setSummary(
- getContext().getString(R.string.bounce_keys_summary,
- PhysicalKeyboardFragment.BOUNCE_KEYS_THRESHOLD));
- findPreference(KeyboardSlowKeyPreferenceController.PREF_KEY).setSummary(
- getContext().getString(R.string.slow_keys_summary,
- PhysicalKeyboardFragment.SLOW_KEYS_THRESHOLD));
- }
- }
-
- static boolean isAnyHardKeyboardsExist() {
- for (int deviceId : InputDevice.getDeviceIds()) {
- final InputDevice device = InputDevice.getDevice(deviceId);
- if (device != null && !device.isVirtual() && device.isFullKeyboard()) {
- return true;
- }
- }
- return false;
- }
-
- private boolean isAnyKeyboardPreferenceAvailable() {
- for (List<AbstractPreferenceController> controllerList : getPreferenceControllers()) {
- for (AbstractPreferenceController controller : controllerList) {
- if (controller.getPreferenceKey().equals(
- KeyboardBounceKeyPreferenceController.PREF_KEY)
- || controller.getPreferenceKey().equals(
- KeyboardSlowKeyPreferenceController.PREF_KEY)
- || controller.getPreferenceKey().equals(
- KeyboardStickyKeyPreferenceController.PREF_KEY)) {
- if (controller.isAvailable()) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.accessibility_settings) {
@Override
@@ -671,10 +617,12 @@
};
@Override
- public void onInputDeviceAdded(int deviceId) {}
+ public void onInputDeviceAdded(int deviceId) {
+ }
@Override
- public void onInputDeviceRemoved(int deviceId) {}
+ public void onInputDeviceRemoved(int deviceId) {
+ }
@Override
public void onInputDeviceChanged(int deviceId) {
diff --git a/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceController.java b/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceController.java
deleted file mode 100644
index 840caa6..0000000
--- a/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceController.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-
-import android.content.Context;
-import android.hardware.input.InputSettings;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
-
-import java.util.List;
-
-/**
- * A toggle preference controller for keyboard bounce key.
- */
-public class KeyboardBounceKeyPreferenceController extends TogglePreferenceController {
- private static final String TAG = "BounceKeyPrefController";
- static final String PREF_KEY = "toggle_keyboard_bounce_keys";
-
- public KeyboardBounceKeyPreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return InputSettings.isAccessibilityBounceKeysFeatureEnabled()
- ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-
- @Override
- public boolean isChecked() {
- return InputSettings.isAccessibilityBounceKeysEnabled(mContext);
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- InputSettings.setAccessibilityBounceKeysThreshold(mContext,
- isChecked ? PhysicalKeyboardFragment.BOUNCE_KEYS_THRESHOLD
- : 0);
- return true;
- }
-
- @Override
- public int getSliceHighlightMenuRes() {
- 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());
- }
- }
-}
diff --git a/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceController.java b/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceController.java
deleted file mode 100644
index bb9d950..0000000
--- a/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceController.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-
-import android.content.Context;
-import android.hardware.input.InputSettings;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
-
-import java.util.List;
-
-/**
- * A toggle preference controller for keyboard slow key.
- */
-public class KeyboardSlowKeyPreferenceController extends TogglePreferenceController {
- private static final String TAG = "SlowKeyPrefController";
-
- static final String PREF_KEY = "toggle_keyboard_slow_keys";
-
- public KeyboardSlowKeyPreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()
- ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-
- @Override
- public boolean isChecked() {
- return InputSettings.isAccessibilitySlowKeysEnabled(mContext);
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- InputSettings.setAccessibilitySlowKeysThreshold(mContext,
- isChecked ? PhysicalKeyboardFragment.SLOW_KEYS_THRESHOLD
- : 0);
- return true;
- }
-
- @Override
- public int getSliceHighlightMenuRes() {
- 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());
- }
- }
-}
diff --git a/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceController.java b/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceController.java
deleted file mode 100644
index c896c9c..0000000
--- a/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceController.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-
-import android.content.Context;
-import android.hardware.input.InputSettings;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-
-import java.util.List;
-
-/**
- * A toggle preference controller for keyboard sticky key.
- */
-public class KeyboardStickyKeyPreferenceController extends TogglePreferenceController {
- private static final String TAG = "StickyKeyPrefController";
- static final String PREF_KEY = "toggle_keyboard_sticky_keys";
-
- public KeyboardStickyKeyPreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return InputSettings.isAccessibilityStickyKeysFeatureEnabled()
- ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-
- @Override
- public boolean isChecked() {
- return InputSettings.isAccessibilityStickyKeysEnabled(mContext);
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- InputSettings.setAccessibilityStickyKeysEnabled(mContext, isChecked);
- return true;
- }
-
- @Override
- public int getSliceHighlightMenuRes() {
- 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());
- }
- }
-}
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceController.java b/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceController.java
new file mode 100644
index 0000000..41be5b9
--- /dev/null
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceController.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.inputmethod;
+
+import static com.android.settings.keyboard.Flags.keyboardAndTouchpadA11yNewPageEnabled;
+
+import android.content.Context;
+import android.view.InputDevice;
+
+import com.android.settings.core.BasePreferenceController;
+
+/** Controller that shows and updates the Physical Keyboard a11y preference. */
+public class PhysicalKeyboardA11yPreferenceController extends BasePreferenceController {
+
+
+ public PhysicalKeyboardA11yPreferenceController(Context context,
+ String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return keyboardAndTouchpadA11yNewPageEnabled()
+ && isAnyHardKeyboardsExist() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ private static boolean isAnyHardKeyboardsExist() {
+ for (int deviceId : InputDevice.getDeviceIds()) {
+ final InputDevice device = InputDevice.getDevice(deviceId);
+ if (device != null && !device.isVirtual() && device.isFullKeyboard()) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceControllerTest.java
deleted file mode 100644
index bf6efd0..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceControllerTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class KeyboardBounceKeyPreferenceControllerTest {
- private static final String KEY_ACCESSIBILITY_BOUNCE_KEYS =
- Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS;
- private static final int UNKNOWN = -1;
-
- @Rule
- public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
- private final Context mContext = ApplicationProvider.getApplicationContext();
- private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
- private final KeyboardBounceKeyPreferenceController mController =
- new KeyboardBounceKeyPreferenceController(mContext,
- KeyboardBounceKeyPreferenceController.PREF_KEY);
-
- @Before
- public void setUp() {
- final PreferenceManager preferenceManager = new PreferenceManager(mContext);
- final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
- mSwitchPreference.setKey(KeyboardBounceKeyPreferenceController.PREF_KEY);
- screen.addPreference(mSwitchPreference);
- mController.displayPreference(screen);
- }
-
- @Test
- public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- BasePreferenceController.AVAILABLE);
- }
-
- @Test
- public void isChecked_disableBounceKey_onResumeShouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, OFF);
-
- mController.updateState(mSwitchPreference);
-
- assertThat(mController.isChecked()).isFalse();
- assertThat(mSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void isChecked_enableBounceKey_onResumeShouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, ON);
-
- mController.updateState(mSwitchPreference);
-
- assertThat(mController.isChecked()).isTrue();
- assertThat(mSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void performClick_enableBounceKey_shouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, OFF);
-
- mController.updateState(mSwitchPreference);
-
- mSwitchPreference.performClick();
-
- verify(mSwitchPreference).setChecked(true);
- assertThat(mController.isChecked()).isTrue();
- assertThat(mSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void performClick_disableBounceKey_shouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, ON);
-
- mController.updateState(mSwitchPreference);
-
- mSwitchPreference.performClick();
-
- verify(mSwitchPreference).setChecked(false);
- assertThat(mController.isChecked()).isFalse();
- assertThat(mSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void setChecked_setFalse_shouldDisableBounceKey() {
- mController.setChecked(false);
-
- assertThat(Settings.Secure.getInt(
- mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, UNKNOWN)).isEqualTo(
- OFF);
- }
-
- @Test
- public void setChecked_setTrue_shouldEnableBounceKey() {
- mController.setChecked(true);
-
- assertThat(Settings.Secure.getInt(
- mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS,
- 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());
- }
-}
diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceControllerTest.java
deleted file mode 100644
index 2721a64..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceControllerTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class KeyboardSlowKeyPreferenceControllerTest {
- private static final String KEY_ACCESSIBILITY_SLOW_KEYS =
- Settings.Secure.ACCESSIBILITY_SLOW_KEYS;
- private static final int UNKNOWN = -1;
-
- @Rule
- public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
- private final Context mContext = ApplicationProvider.getApplicationContext();
- private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
- private final KeyboardSlowKeyPreferenceController mController =
- new KeyboardSlowKeyPreferenceController(mContext,
- KeyboardSlowKeyPreferenceController.PREF_KEY);
-
- @Before
- public void setUp() {
- final PreferenceManager preferenceManager = new PreferenceManager(mContext);
- final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
- mSwitchPreference.setKey(KeyboardSlowKeyPreferenceController.PREF_KEY);
- screen.addPreference(mSwitchPreference);
- mController.displayPreference(screen);
- }
-
- @Test
- public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- BasePreferenceController.AVAILABLE);
- }
-
- @Test
- public void isChecked_disableSlowKey_onResumeShouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, OFF);
-
- mController.updateState(mSwitchPreference);
-
- assertThat(mController.isChecked()).isFalse();
- assertThat(mSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void isChecked_enableSlowKey_onResumeShouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, ON);
-
- mController.updateState(mSwitchPreference);
-
- assertThat(mController.isChecked()).isTrue();
- assertThat(mSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void performClick_enableSlowKey_shouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, OFF);
-
- mController.updateState(mSwitchPreference);
-
- mSwitchPreference.performClick();
-
- verify(mSwitchPreference).setChecked(true);
- assertThat(mController.isChecked()).isTrue();
- assertThat(mSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void performClick_disableSlowKey_shouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, ON);
-
- mController.updateState(mSwitchPreference);
-
- mSwitchPreference.performClick();
-
- verify(mSwitchPreference).setChecked(false);
- assertThat(mController.isChecked()).isFalse();
- assertThat(mSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void setChecked_setFalse_shouldDisableSlowKey() {
- mController.setChecked(false);
-
- assertThat(Settings.Secure.getInt(
- mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, UNKNOWN)).isEqualTo(
- OFF);
- }
-
- @Test
- public void setChecked_setTrue_shouldEnableSlowKey() {
- mController.setChecked(true);
-
- assertThat(Settings.Secure.getInt(
- mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, 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());
- }
-}
diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceControllerTest.java
deleted file mode 100644
index 0001e85..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceControllerTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class KeyboardStickyKeyPreferenceControllerTest {
- private static final String KEY_ACCESSIBILITY_STICKY_KEYS =
- Settings.Secure.ACCESSIBILITY_STICKY_KEYS;
- private static final int UNKNOWN = -1;
-
- @Rule
- public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
- private final Context mContext = ApplicationProvider.getApplicationContext();
- private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
- private final KeyboardStickyKeyPreferenceController mController =
- new KeyboardStickyKeyPreferenceController(mContext,
- KeyboardStickyKeyPreferenceController.PREF_KEY);
-
- @Before
- public void setUp() {
- final PreferenceManager preferenceManager = new PreferenceManager(mContext);
- final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
- mSwitchPreference.setKey(KeyboardStickyKeyPreferenceController.PREF_KEY);
- screen.addPreference(mSwitchPreference);
- mController.displayPreference(screen);
- }
-
- @Test
- public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- BasePreferenceController.AVAILABLE);
- }
-
- @Test
- public void isChecked_disableStickyKey_onResumeShouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, OFF);
-
- mController.updateState(mSwitchPreference);
-
- assertThat(mController.isChecked()).isFalse();
- assertThat(mSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void isChecked_enableStickyKey_onResumeShouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, ON);
-
- mController.updateState(mSwitchPreference);
-
- assertThat(mController.isChecked()).isTrue();
- assertThat(mSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void performClick_enableStickyKey_shouldReturnTrue() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, OFF);
-
- mController.updateState(mSwitchPreference);
-
- mSwitchPreference.performClick();
-
- verify(mSwitchPreference).setChecked(true);
- assertThat(mController.isChecked()).isTrue();
- assertThat(mSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void performClick_disableStickyKey_shouldReturnFalse() {
- Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, ON);
-
- mController.updateState(mSwitchPreference);
-
- mSwitchPreference.performClick();
-
- verify(mSwitchPreference).setChecked(false);
- assertThat(mController.isChecked()).isFalse();
- assertThat(mSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void setChecked_setFalse_shouldDisableStickyKey() {
- mController.setChecked(false);
-
- assertThat(Settings.Secure.getInt(
- mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, UNKNOWN)).isEqualTo(OFF);
- }
-
- @Test
- public void setChecked_setTrue_shouldEnableStickyKey() {
- mController.setChecked(true);
-
- assertThat(Settings.Secure.getInt(
- 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());
- }
-}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceControllerTest.java
new file mode 100644
index 0000000..5c6dd14
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceControllerTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.view.InputDevice;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.keyboard.Flags;
+import com.android.settings.testutils.shadow.ShadowInputDevice;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+/** Tests for {@link PhysicalKeyboardA11yPreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+ com.android.settings.testutils.shadow.ShadowInputDevice.class,
+})
+public class PhysicalKeyboardA11yPreferenceControllerTest {
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+ private static final String PREFERENCE_KEY = "physical_keyboard_a11y";
+ private Context mContext;
+ private PhysicalKeyboardA11yPreferenceController mController;
+ @Mock
+ InputDevice mInputDevice;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mController = new PhysicalKeyboardA11yPreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_KEYBOARD_AND_TOUCHPAD_A11Y_NEW_PAGE_ENABLED)
+ public void getAvailabilityStatus_expected() {
+ int deviceId = 1;
+ ShadowInputDevice.sDeviceIds = new int[]{deviceId};
+ when(mInputDevice.isVirtual()).thenReturn(false);
+ when(mInputDevice.isFullKeyboard()).thenReturn(true);
+
+ ShadowInputDevice.addDevice(deviceId, mInputDevice);
+
+ assertThat(InputDevice.getDeviceIds()).isNotEmpty();
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_KEYBOARD_AND_TOUCHPAD_A11Y_NEW_PAGE_ENABLED)
+ public void getAvailabilityStatus_deviceIsNotAsExpected_unavailable() {
+ int deviceId = 1;
+ ShadowInputDevice.sDeviceIds = new int[]{deviceId};
+ when(mInputDevice.isVirtual()).thenReturn(true);
+ when(mInputDevice.isFullKeyboard()).thenReturn(false);
+
+ ShadowInputDevice.addDevice(deviceId, mInputDevice);
+
+ assertThat(InputDevice.getDeviceIds()).isNotEmpty();
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+
+ }
+
+}