diff options
5 files changed, 27 insertions, 6 deletions
diff --git a/services/companion/java/com/android/server/companion/virtual/InputController.java b/services/companion/java/com/android/server/companion/virtual/InputController.java index d1274d49a14d..980ec02e951c 100644 --- a/services/companion/java/com/android/server/companion/virtual/InputController.java +++ b/services/companion/java/com/android/server/companion/virtual/InputController.java @@ -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; diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java index 44c3a8d7537f..50eab25bdf00 100644 --- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java @@ -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. diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java index 0d5cdcbe484c..ef61498e16af 100644 --- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java @@ -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; } } diff --git a/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java b/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java index 823788f0b249..b17978370bd7 100644 --- a/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java +++ b/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java @@ -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. diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java index e1f490ae3e2f..5e7deef9f424 100644 --- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java @@ -608,6 +608,20 @@ public class VirtualDeviceManagerServiceTest { } @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(); assertThat(mVdmNative.getDeviceIdsForUid(UID_1)).isEmpty(); |