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

Commit 1148eb84 authored by Asmita Poddar's avatar Asmita Poddar
Browse files

Solve bug for numpad mouse keys not working

Initially device cache wasn't getting updated for numpad keys.
Fixed the bug.

Bug: 433792869
Test: atest FrameworksServicesTests:MouseKeysInterceptorTest
Flag: EXEMPT bugfix
Change-Id: I1ddf96f1a146d8c0947c4b41e5b694865842f41c
parent 1e16d399
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -736,10 +736,10 @@ public class MouseKeysInterceptor extends BaseEventStreamTransformation
     */
    private boolean deviceHasNumpad(@NonNull InputDevice device) {
        final int deviceId = device.getId();
        Boolean hasNumpad = mDeviceNumpadCapabilityCache.get(deviceId);

        if (hasNumpad != null) {
            return hasNumpad;
        // Return numpad capability for device if the device ID exists in the cache
        if (mDeviceNumpadCapabilityCache.indexOfKey(deviceId) >= 0) {
            return mDeviceNumpadCapabilityCache.get(deviceId);
        }

        int[] numpadKeys = MouseKeyEvent.getAllMouseKeys(/* usePrimaryKeys= */ false);
@@ -880,11 +880,7 @@ public class MouseKeysInterceptor extends BaseEventStreamTransformation
     */
    @Override
    public void onInputDeviceAdded(int deviceId) {
        final InputDevice inputDevice = mInputManager.getInputDevice(deviceId);
        if (isDeviceEligible(inputDevice)) {
            deviceHasNumpad(inputDevice);
        }
        onInputDeviceChangedInternal(inputDevice);
        onInputDeviceChangedInternal(deviceId);
    }

    @Override
@@ -902,15 +898,15 @@ public class MouseKeysInterceptor extends BaseEventStreamTransformation
     */
    @Override
    public void onInputDeviceChanged(int deviceId) {
        InputDevice inputDevice = mInputManager.getInputDevice(deviceId);
        onInputDeviceChangedInternal(inputDevice);
        onInputDeviceChangedInternal(deviceId);
    }

    private void onInputDeviceChangedInternal(@NonNull InputDevice inputDevice) {
        // Update the enum mapping only if input device that changed is a keyboard
    private void onInputDeviceChangedInternal(int deviceId) {
        final InputDevice inputDevice = mInputManager.getInputDevice(deviceId);
        // Update the enum mapping only if input device that changed is a physical keyboard
        if (isDeviceEligible(inputDevice)) {
            initializeDeviceToEnumMap(inputDevice, shouldUsePrimaryKeysForDevice(inputDevice));
            Slog.i(LOG_TAG, "Updating key code enum map for device ID: " + inputDevice.getId());
            Slog.i(LOG_TAG, "Updating key code enum map for device ID: " + deviceId);
        }
    }