Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5f23891 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari
Browse files

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
parent b9991d2a
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -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