From b7616da05c8af33b41931a662c9924c6df8cda87 Mon Sep 17 00:00:00 2001 From: shaoweishen Date: Mon, 8 Jul 2024 02:52:58 +0000 Subject: [PATCH] [Physical Keyboard] Add intent support for PK layout setting page This is part of feature for keyboard setting update, which allows gBoard to deep link to layout picker page. document: go/deeplink_pk_layout_picker Change-Id: I4277e175be7eed338f855e8144b5531c614e2c04 Bug: 318594345 Flag: com.android.settings.keyboard.keyboard_and_touchpad_a11y_new_page_enabled Test: verified on Device --- Android.bp | 1 + AndroidManifest.xml | 15 ++++++++++ res/values/strings.xml | 2 ++ src/com/android/settings/Settings.java | 3 ++ .../InputPeripheralsSettingsUtils.java | 1 + ...wKeyboardLayoutEnabledLocalesFragment.java | 29 +++++++++++++++++++ 6 files changed, 51 insertions(+) diff --git a/Android.bp b/Android.bp index fccbfca4dab..a16078551cf 100644 --- a/Android.bp +++ b/Android.bp @@ -135,6 +135,7 @@ android_library { "android.app.flags-aconfig", "android.provider.flags-aconfig", "android.security.flags-aconfig", + "keyboard_flags", ], } diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7d335c36f45..dca74676a55 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1230,6 +1230,21 @@ android:value="@string/menu_key_system"/> + + + + + + + + + Accessibility Physical keyboard + + Physical keyboard layout picker Bounce keys diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index cb4358fcf52..d5cf9aa2281 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -92,6 +92,9 @@ public class Settings extends SettingsActivity { public static class AvailableVirtualKeyboardActivity extends SettingsActivity { /* empty */ } public static class KeyboardLayoutPickerActivity extends SettingsActivity { /* empty */ } public static class PhysicalKeyboardActivity extends SettingsActivity { /* empty */ } + public static class PhysicalKeyboardLayoutPickerActivity extends SettingsActivity { + /* empty */ + } public static class InputMethodAndSubtypeEnablerActivity extends SettingsActivity { /* empty */ } public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ } public static class LocalePickerActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java b/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java index 6e3d11caa58..14f79bf93d1 100644 --- a/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java +++ b/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java @@ -51,6 +51,7 @@ public class InputPeripheralsSettingsUtils { static final String EXTRA_TITLE = "keyboard_layout_picker_title"; static final String EXTRA_USER_ID = "user_id"; static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier"; + static final String EXTRA_INPUT_DEVICE = "input_device"; static final String EXTRA_INPUT_METHOD_INFO = "input_method_info"; static final String EXTRA_INPUT_METHOD_SUBTYPE = "input_method_subtype"; diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java index 08aacf8c833..d9195d68dce 100644 --- a/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java +++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; +import android.app.Activity; import android.app.settings.SettingsEnums; import android.content.Context; import android.hardware.input.InputDeviceIdentifier; @@ -35,6 +36,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; +import com.android.internal.util.Preconditions; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher; @@ -106,6 +108,16 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment mIm = mContext.getSystemService(InputManager.class); mImm = mContext.getSystemService(InputMethodManager.class); mInputDeviceId = -1; + + Activity activity = Preconditions.checkNotNull(getActivity()); + InputDevice inputDeviceFromIntent = + activity.getIntent().getParcelableExtra( + InputPeripheralsSettingsUtils.EXTRA_INPUT_DEVICE, + InputDevice.class); + + if (inputDeviceFromIntent != null) { + launchLayoutPickerWithIdentifier(inputDeviceFromIntent.getIdentifier()); + } } @Override @@ -161,6 +173,23 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment mInputDeviceId = -1; } + private void launchLayoutPickerWithIdentifier( + InputDeviceIdentifier inputDeviceIdentifier) { + if (InputPeripheralsSettingsUtils.getInputDevice(mIm, inputDeviceIdentifier) == null) { + return; + } + InputMethodInfo info = mImm.getCurrentInputMethodInfoAsUser(UserHandle.of(mUserId)); + InputMethodSubtype subtype = mImm.getCurrentInputMethodSubtype(); + CharSequence subtypeLabel = getSubtypeLabel(mContext, info, subtype); + + showKeyboardLayoutPicker( + subtypeLabel, + inputDeviceIdentifier, + mUserId, + info, + subtype); + } + private void updateCheckedState() { if (InputPeripheralsSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) { return;