[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
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index cb4358f..d5cf9aa 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -92,6 +92,9 @@
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 6e3d11c..14f79bf 100644
--- a/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java
+++ b/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java
@@ -51,6 +51,7 @@
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 08aacf8..d9195d6 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.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 @@
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 @@
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;