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

Commit e53175bc authored by Vladimir Komsiyski's avatar Vladimir Komsiyski Committed by Android (Google) Code Review
Browse files

Merge "Add VDMInternal#isInputDeviceOwnedByVirtualDevice API" into main

parents fc4e5499 1a1d734d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -437,7 +437,7 @@ class InputController {
        }
    }

    @VisibleForTesting
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    Map<IBinder, InputDeviceDescriptor> getInputDeviceDescriptors() {
        final Map<IBinder, InputDeviceDescriptor> inputDeviceDescriptors = new ArrayMap<>();
        synchronized (mLock) {
@@ -529,7 +529,8 @@ class InputController {
        }
    }

    @VisibleForTesting static final class InputDeviceDescriptor {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    static final class InputDeviceDescriptor {

        static final int TYPE_KEYBOARD = 1;
        static final int TYPE_MOUSE = 2;
+5 −0
Original line number Diff line number Diff line
@@ -1337,6 +1337,11 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
        }
    }

    boolean isInputDeviceOwnedByVirtualDevice(int inputDeviceId) {
        return mInputController.getInputDeviceDescriptors().values().stream().anyMatch(
                inputDeviceDescriptor -> inputDeviceDescriptor.getInputDeviceId() == inputDeviceId);
    }

    void onEnteringPipBlocked(int uid) {
        // Do nothing. ActivityRecord#checkEnterPictureInPictureState logs that the display does not
        // support PiP.
+3 −2
Original line number Diff line number Diff line
@@ -838,10 +838,11 @@ public class VirtualDeviceManagerService extends SystemService {
        }

        @Override
        public boolean isDisplayOwnedByAnyVirtualDevice(int displayId) {
        public boolean isInputDeviceOwnedByVirtualDevice(int inputDeviceId) {
            ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
            for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
                if (virtualDevicesSnapshot.get(i).isDisplayOwnedByVirtualDevice(displayId)) {
                if (virtualDevicesSnapshot.get(i)
                        .isInputDeviceOwnedByVirtualDevice(inputDeviceId)) {
                    return true;
                }
            }
+2 −2
Original line number Diff line number Diff line
@@ -137,9 +137,9 @@ public abstract class VirtualDeviceManagerInternal {
    public abstract boolean isAppRunningOnAnyVirtualDevice(int uid);

    /**
     * Returns true if the {@code displayId} is owned by any virtual device
     * @return whether the input device with the given id was created by a virtual device.
     */
    public abstract boolean isDisplayOwnedByAnyVirtualDevice(int displayId);
    public abstract boolean isInputDeviceOwnedByVirtualDevice(int inputDeviceId);

    /**
     * Gets the ids of VirtualDisplays owned by a VirtualDevice.
+14 −0
Original line number Diff line number Diff line
@@ -607,6 +607,20 @@ public class VirtualDeviceManagerServiceTest {
        assertThat(sensor.getType()).isEqualTo(Sensor.TYPE_ACCELEROMETER);
    }

    @Test
    public void testIsInputDeviceOwnedByVirtualDevice() {
        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isFalse();

        final int fd = 1;
        mInputController.addDeviceForTesting(BINDER, fd,
                InputController.InputDeviceDescriptor.TYPE_KEYBOARD, DISPLAY_ID_1, PHYS,
                DEVICE_NAME_1, INPUT_DEVICE_ID);
        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isTrue();

        mInputController.unregisterInputDevice(BINDER);
        assertThat(mLocalService.isInputDeviceOwnedByVirtualDevice(INPUT_DEVICE_ID)).isFalse();
    }

    @Test
    public void getDeviceIdsForUid_noRunningApps_returnsNull() {
        assertThat(mLocalService.getDeviceIdsForUid(UID_1)).isEmpty();