Loading core/java/android/companion/virtual/IVirtualDeviceManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,11 @@ interface IVirtualDeviceManager { */ List<VirtualDevice> getVirtualDevices(); /** * Returns the ID of the device which owns the display with the given ID. */ int getDeviceIdForDisplayId(int displayId); /** * Returns the device policy for the given virtual device and policy type. */ Loading core/java/android/companion/virtual/VirtualDeviceManager.java +17 −0 Original line number Diff line number Diff line Loading @@ -230,6 +230,23 @@ public final class VirtualDeviceManager { } } /** * Returns the ID of the device which owns the display with the given ID. * * @hide */ public int getDeviceIdForDisplayId(int displayId) { if (mService == null) { Log.w(TAG, "Failed to retrieve virtual devices; no virtual device manager service."); return DEFAULT_DEVICE_ID; } try { return mService.getDeviceIdForDisplayId(displayId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * A virtual device has its own virtual display, audio output, microphone, and camera etc. The * creator of a virtual device can take the output from the virtual display and stream it over Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +18 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import android.util.ArraySet; import android.util.ExceptionUtils; import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.widget.Toast; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -388,6 +389,23 @@ public class VirtualDeviceManagerService extends SystemService { return mLocalService.getDevicePolicy(deviceId, policyType); } @Override // Binder call public int getDeviceIdForDisplayId(int displayId) { if (displayId == Display.INVALID_DISPLAY || displayId == Display.DEFAULT_DISPLAY) { return VirtualDeviceManager.DEFAULT_DEVICE_ID; } synchronized (mVirtualDeviceManagerLock) { for (int i = 0; i < mVirtualDevices.size(); i++) { VirtualDeviceImpl virtualDevice = mVirtualDevices.valueAt(i); if (virtualDevice.isDisplayOwnedByVirtualDevice(displayId)) { return virtualDevice.getDeviceId(); } } } return VirtualDeviceManager.DEFAULT_DEVICE_ID; } @Nullable private AssociationInfo getAssociationInfo(String packageName, int associationId) { final int callingUserId = getCallingUserHandle().getIdentifier(); Loading services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +58 −9 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ import android.platform.test.annotations.Presubmit; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.ArraySet; import android.view.Display; import android.view.DisplayInfo; import android.view.KeyEvent; import android.view.WindowManager; Loading Loading @@ -304,15 +305,50 @@ public class VirtualDeviceManagerServiceTest { mVdms = new VirtualDeviceManagerService(mContext); mLocalService = mVdms.getLocalServiceInstance(); VirtualDeviceParams params = new VirtualDeviceParams .Builder() .setBlockedActivities(getBlockedActivities()) .build(); mDeviceImpl = new VirtualDeviceImpl(mContext, mAssociationInfo, new Binder(), /* ownerUid */ 0, VIRTUAL_DEVICE_ID, mInputController, mSensorController, (int associationId) -> {}, mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback, params); mVdms.addVirtualDevice(mDeviceImpl); mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_invalidDisplayId_returnsDefault() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); assertThat( vdm.getDeviceIdForDisplayId(Display.INVALID_DISPLAY)) .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_defaultDisplayId_returnsDefault() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); assertThat( vdm.getDeviceIdForDisplayId(Display.DEFAULT_DISPLAY)) .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_nonExistentDisplayId_returnsDefault() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); int nonExistentDisplayId = 999; assertThat( vdm.getDeviceIdForDisplayId(nonExistentDisplayId)) .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_withValidVirtualDisplayId_returnsDeviceId() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); VirtualDeviceImpl virtualDevice = createVirtualDevice(/* virtualDeviceId */ 1000); virtualDevice.mVirtualDisplayIds.add(DISPLAY_ID); assertThat( vdm.getDeviceIdForDisplayId(DISPLAY_ID)) .isEqualTo(1000); } @Test Loading Loading @@ -1161,4 +1197,17 @@ public class VirtualDeviceManagerServiceTest { intent.filterEquals(blockedAppIntent)), any(), any()); } private VirtualDeviceImpl createVirtualDevice(int virtualDeviceId) { VirtualDeviceParams params = new VirtualDeviceParams .Builder() .setBlockedActivities(getBlockedActivities()) .build(); VirtualDeviceImpl virtualDeviceImpl = new VirtualDeviceImpl(mContext, mAssociationInfo, new Binder(), /* ownerUid */ 0, virtualDeviceId, mInputController, mSensorController, (int associationId) -> {}, mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback, params); mVdms.addVirtualDevice(virtualDeviceImpl); return virtualDeviceImpl; } } Loading
core/java/android/companion/virtual/IVirtualDeviceManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,11 @@ interface IVirtualDeviceManager { */ List<VirtualDevice> getVirtualDevices(); /** * Returns the ID of the device which owns the display with the given ID. */ int getDeviceIdForDisplayId(int displayId); /** * Returns the device policy for the given virtual device and policy type. */ Loading
core/java/android/companion/virtual/VirtualDeviceManager.java +17 −0 Original line number Diff line number Diff line Loading @@ -230,6 +230,23 @@ public final class VirtualDeviceManager { } } /** * Returns the ID of the device which owns the display with the given ID. * * @hide */ public int getDeviceIdForDisplayId(int displayId) { if (mService == null) { Log.w(TAG, "Failed to retrieve virtual devices; no virtual device manager service."); return DEFAULT_DEVICE_ID; } try { return mService.getDeviceIdForDisplayId(displayId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * A virtual device has its own virtual display, audio output, microphone, and camera etc. The * creator of a virtual device can take the output from the virtual display and stream it over Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +18 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import android.util.ArraySet; import android.util.ExceptionUtils; import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.widget.Toast; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -388,6 +389,23 @@ public class VirtualDeviceManagerService extends SystemService { return mLocalService.getDevicePolicy(deviceId, policyType); } @Override // Binder call public int getDeviceIdForDisplayId(int displayId) { if (displayId == Display.INVALID_DISPLAY || displayId == Display.DEFAULT_DISPLAY) { return VirtualDeviceManager.DEFAULT_DEVICE_ID; } synchronized (mVirtualDeviceManagerLock) { for (int i = 0; i < mVirtualDevices.size(); i++) { VirtualDeviceImpl virtualDevice = mVirtualDevices.valueAt(i); if (virtualDevice.isDisplayOwnedByVirtualDevice(displayId)) { return virtualDevice.getDeviceId(); } } } return VirtualDeviceManager.DEFAULT_DEVICE_ID; } @Nullable private AssociationInfo getAssociationInfo(String packageName, int associationId) { final int callingUserId = getCallingUserHandle().getIdentifier(); Loading
services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +58 −9 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ import android.platform.test.annotations.Presubmit; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.ArraySet; import android.view.Display; import android.view.DisplayInfo; import android.view.KeyEvent; import android.view.WindowManager; Loading Loading @@ -304,15 +305,50 @@ public class VirtualDeviceManagerServiceTest { mVdms = new VirtualDeviceManagerService(mContext); mLocalService = mVdms.getLocalServiceInstance(); VirtualDeviceParams params = new VirtualDeviceParams .Builder() .setBlockedActivities(getBlockedActivities()) .build(); mDeviceImpl = new VirtualDeviceImpl(mContext, mAssociationInfo, new Binder(), /* ownerUid */ 0, VIRTUAL_DEVICE_ID, mInputController, mSensorController, (int associationId) -> {}, mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback, params); mVdms.addVirtualDevice(mDeviceImpl); mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_invalidDisplayId_returnsDefault() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); assertThat( vdm.getDeviceIdForDisplayId(Display.INVALID_DISPLAY)) .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_defaultDisplayId_returnsDefault() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); assertThat( vdm.getDeviceIdForDisplayId(Display.DEFAULT_DISPLAY)) .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_nonExistentDisplayId_returnsDefault() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); int nonExistentDisplayId = 999; assertThat( vdm.getDeviceIdForDisplayId(nonExistentDisplayId)) .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID); } @Test public void getDeviceIdForDisplayId_withValidVirtualDisplayId_returnsDeviceId() { VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm = mVdms.new VirtualDeviceManagerImpl(); VirtualDeviceImpl virtualDevice = createVirtualDevice(/* virtualDeviceId */ 1000); virtualDevice.mVirtualDisplayIds.add(DISPLAY_ID); assertThat( vdm.getDeviceIdForDisplayId(DISPLAY_ID)) .isEqualTo(1000); } @Test Loading Loading @@ -1161,4 +1197,17 @@ public class VirtualDeviceManagerServiceTest { intent.filterEquals(blockedAppIntent)), any(), any()); } private VirtualDeviceImpl createVirtualDevice(int virtualDeviceId) { VirtualDeviceParams params = new VirtualDeviceParams .Builder() .setBlockedActivities(getBlockedActivities()) .build(); VirtualDeviceImpl virtualDeviceImpl = new VirtualDeviceImpl(mContext, mAssociationInfo, new Binder(), /* ownerUid */ 0, virtualDeviceId, mInputController, mSensorController, (int associationId) -> {}, mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback, params); mVdms.addVirtualDevice(virtualDeviceImpl); return virtualDeviceImpl; } }