Loading services/companion/java/com/android/server/companion/virtual/InputController.java +3 −2 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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; Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +5 −0 Original line number Diff line number Diff line Loading @@ -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. Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; } } Loading services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java +2 −2 Original line number Diff line number Diff line Loading @@ -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. Loading services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
services/companion/java/com/android/server/companion/virtual/InputController.java +3 −2 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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; Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java +5 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; } } Loading
services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java +2 −2 Original line number Diff line number Diff line Loading @@ -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. Loading
services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading