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

Commit 156b2d63 authored by Biswarup Pal's avatar Biswarup Pal
Browse files

Fix multiple virtual input device removal on VD#close

.. and add some missing locks in InputController

Test: atest VirtualInputDeviceGenericTest
Fixes: 421892084
Flag: EXEMPT bugfix
Change-Id: Iab3a1556ed27368b513157868ee61f0b5a982fb6
parent 926b83c0
Loading
Loading
Loading
Loading
+9 −9
Original line number Original line Diff line number Diff line
@@ -73,7 +73,7 @@ class InputController {
        synchronized (mLock) {
        synchronized (mLock) {
            final Iterator<Map.Entry<IBinder, IVirtualInputDevice>> iterator =
            final Iterator<Map.Entry<IBinder, IVirtualInputDevice>> iterator =
                    mInputDevices.entrySet().iterator();
                    mInputDevices.entrySet().iterator();
            if (iterator.hasNext()) {
            while (iterator.hasNext()) {
                final Map.Entry<IBinder, IVirtualInputDevice> entry = iterator.next();
                final Map.Entry<IBinder, IVirtualInputDevice> entry = iterator.next();
                final IBinder token = entry.getKey();
                final IBinder token = entry.getKey();
                iterator.remove();
                iterator.remove();
@@ -86,7 +86,7 @@ class InputController {
        IVirtualInputDevice device = mInputManagerInternal.createVirtualDpad(token, config);
        IVirtualInputDevice device = mInputManagerInternal.createVirtualDpad(token, config);
        Counter.logIncrementWithUid("virtual_devices.value_virtual_dpad_created_count",
        Counter.logIncrementWithUid("virtual_devices.value_virtual_dpad_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -95,7 +95,7 @@ class InputController {
        IVirtualInputDevice device = mInputManagerInternal.createVirtualKeyboard(token, config);
        IVirtualInputDevice device = mInputManagerInternal.createVirtualKeyboard(token, config);
        Counter.logIncrementWithUid("virtual_devices.value_virtual_keyboard_created_count",
        Counter.logIncrementWithUid("virtual_devices.value_virtual_keyboard_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -103,7 +103,7 @@ class InputController {
        IVirtualInputDevice device = mInputManagerInternal.createVirtualMouse(token, config);
        IVirtualInputDevice device = mInputManagerInternal.createVirtualMouse(token, config);
        Counter.logIncrementWithUid("virtual_devices.value_virtual_mouse_created_count",
        Counter.logIncrementWithUid("virtual_devices.value_virtual_mouse_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -112,7 +112,7 @@ class InputController {
        IVirtualInputDevice device = mInputManagerInternal.createVirtualTouchscreen(token, config);
        IVirtualInputDevice device = mInputManagerInternal.createVirtualTouchscreen(token, config);
        Counter.logIncrementWithUid("virtual_devices.value_virtual_touchscreen_created_count",
        Counter.logIncrementWithUid("virtual_devices.value_virtual_touchscreen_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -123,7 +123,7 @@ class InputController {
        Counter.logIncrementWithUid(
        Counter.logIncrementWithUid(
                "virtual_devices.value_virtual_navigationtouchpad_created_count",
                "virtual_devices.value_virtual_navigationtouchpad_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -131,7 +131,7 @@ class InputController {
        IVirtualInputDevice device = mInputManagerInternal.createVirtualStylus(token, config);
        IVirtualInputDevice device = mInputManagerInternal.createVirtualStylus(token, config);
        Counter.logIncrementWithUid("virtual_devices.value_virtual_stylus_created_count",
        Counter.logIncrementWithUid("virtual_devices.value_virtual_stylus_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -141,7 +141,7 @@ class InputController {
                mInputManagerInternal.createVirtualRotaryEncoder(token, config);
                mInputManagerInternal.createVirtualRotaryEncoder(token, config);
        Counter.logIncrementWithUid("virtual_devices.value_virtual_rotary_created_count",
        Counter.logIncrementWithUid("virtual_devices.value_virtual_rotary_created_count",
                mAttributionSource.getUid());
                mAttributionSource.getUid());
        mInputDevices.put(token, device);
        addDevice(token, device);
        return device;
        return device;
    }
    }


@@ -176,7 +176,7 @@ class InputController {
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    void addDeviceForTesting(IBinder token, IVirtualInputDevice device) {
    void addDevice(IBinder token, IVirtualInputDevice device) {
        synchronized (mLock) {
        synchronized (mLock) {
            mInputDevices.put(token, device);
            mInputDevices.put(token, device);
        }
        }
+1 −1
Original line number Original line Diff line number Diff line
@@ -633,7 +633,7 @@ public class VirtualDeviceManagerServiceTest {


        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isFalse();
        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isFalse();


        mInputController.addDeviceForTesting(BINDER, mIVirtualInputDevice);
        mInputController.addDevice(BINDER, mIVirtualInputDevice);
        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isTrue();
        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isTrue();


        mInputController.removeDeviceForTesting(BINDER);
        mInputController.removeDeviceForTesting(BINDER);