Merge "Support different layout for kbd with same Vendor and Product ID" into udc-dev

This commit is contained in:
Vaibhav Devmurari
2023-02-23 10:12:27 +00:00
committed by Android (Google) Code Review

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