Support different layout for kbd with same Vendor and Product ID

Some kbds can have same Product and vendor IDs but different kbd
info like language tag and layout type. Need to allow separate
configuration for each SKU type.

Test: manual
Bug: 259530132
Change-Id: I2f2461083e7f4cc8032f95b8883fbff9e62f1943
This commit is contained in:
Vaibhav Devmurari
2023-02-20 14:33:19 +00:00
parent b9991d2a97
commit e5f23891c9

View File

@@ -464,7 +464,7 @@ final class KeyboardLayoutManager implements InputManager.InputDeviceListener {
return LocaleList.forLanguageTags(languageTags.replace('|', ','));
}
private static String getLayoutDescriptor(@NonNull InputDeviceIdentifier identifier) {
private String getLayoutDescriptor(@NonNull InputDeviceIdentifier identifier) {
Objects.requireNonNull(identifier, "identifier must not be null");
Objects.requireNonNull(identifier.getDescriptor(), "descriptor must not be null");
@@ -474,7 +474,21 @@ final class KeyboardLayoutManager implements InputManager.InputDeviceListener {
// If vendor id and product id is available, use it as keys. This allows us to have the
// same setup for all keyboards with same product and vendor id. i.e. User can swap 2
// identical keyboards and still get the same setup.
return "vendor:" + identifier.getVendorId() + ",product:" + identifier.getProductId();
StringBuilder key = new StringBuilder();
key.append("vendor:").append(identifier.getVendorId()).append(",product:").append(
identifier.getProductId());
InputDevice inputDevice = getInputDevice(identifier);
Objects.requireNonNull(inputDevice, "Input device must not be null");
// Some keyboards can have same product ID and vendor ID but different Keyboard info like
// language tag and layout type.
if (!TextUtils.isEmpty(inputDevice.getKeyboardLanguageTag())) {
key.append(",languageTag:").append(inputDevice.getKeyboardLanguageTag());
}
if (!TextUtils.isEmpty(inputDevice.getKeyboardLayoutType())) {
key.append(",layoutType:").append(inputDevice.getKeyboardLanguageTag());
}
return key.toString();
}
@Nullable
@@ -1075,7 +1089,7 @@ final class KeyboardLayoutManager implements InputManager.InputDeviceListener {
identifier.getDescriptor()) : null;
}
private static String createLayoutKey(InputDeviceIdentifier identifier, int userId,
private String createLayoutKey(InputDeviceIdentifier identifier, int userId,
@NonNull InputMethodSubtypeHandle subtypeHandle) {
Objects.requireNonNull(subtypeHandle, "subtypeHandle must not be null");
return "layoutDescriptor:" + getLayoutDescriptor(identifier) + ",userId:" + userId