[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/Android.bp b/Android.bp
index fccbfca..a160785 100644
--- a/Android.bp
+++ b/Android.bp
@@ -135,6 +135,7 @@
         "android.app.flags-aconfig",
         "android.provider.flags-aconfig",
         "android.security.flags-aconfig",
+        "keyboard_flags",
     ],
 }
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7d335c3..dca7467 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1230,6 +1230,21 @@
                        android:value="@string/menu_key_system"/>
         </activity>
 
+        <activity android:name="Settings$PhysicalKeyboardLayoutPickerActivity"
+            android:label="@string/physical_keyboard_layout_picker_title"
+            android:exported="true"
+            android:clearTaskOnLaunch="true"
+            android:featureFlag="com.android.settings.keyboard.keyboard_and_touchpad_a11y_new_page_enabled">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.HARD_KEYBOARD_LAYOUT_PICKER_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.inputmethod.NewKeyboardLayoutEnabledLocalesFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_system"/>
+        </activity>
+
         <!-- Keep compatibility with old shortcuts. -->
         <activity-alias android:name="LanguageSettings"
                 android:label="@string/language_input_gesture_title"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d50f865..aee8409 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4559,6 +4559,8 @@
     <string name="keyboard_a11y_category">Accessibility</string>
     <!-- Title for the 'physical keyboard' settings screen. [CHAR LIMIT=35] -->
     <string name="physical_keyboard_title">Physical keyboard</string>
+    <!-- Title for the 'physical keyboard' settings screen. [CHAR LIMIT=35] -->
+    <string name="physical_keyboard_layout_picker_title">Physical keyboard layout picker</string>
     <!-- Title for the 'Bounce keys' preference switch. [CHAR LIMIT=35] -->
     <string name="bounce_keys">Bounce keys</string>
     <!-- Summary text for the 'Bounce keys' preference sub-screen. [CHAR LIMIT=300] -->
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;