Loading core/java/android/app/ContextImpl.java +13 −34 Original line number Diff line number Diff line Loading @@ -26,9 +26,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UiContext; import android.companion.virtual.VirtualDevice; import android.companion.virtual.VirtualDeviceManager; import android.companion.virtual.VirtualDeviceParams; import android.compat.annotation.UnsupportedAppUsage; import android.content.AttributionSource; import android.content.AutofillOptions; Loading Loading @@ -2742,10 +2740,13 @@ class ContextImpl extends Context { @Override public @NonNull Context createDeviceContext(int deviceId) { if (!isValidDeviceId(deviceId)) { if (deviceId != VirtualDeviceManager.DEVICE_ID_DEFAULT) { VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class); if (!vdm.isValidVirtualDeviceId(deviceId)) { throw new IllegalArgumentException( "Not a valid ID of the default device or any virtual device: " + deviceId); } } ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mParams, mAttributionSource.getAttributionTag(), Loading @@ -2757,31 +2758,6 @@ class ContextImpl extends Context { return context; } /** * Checks whether the passed {@code deviceId} is valid or not. * {@link VirtualDeviceManager#DEVICE_ID_DEFAULT} is valid as it is the ID of the default * device when no additional virtual devices exist. If {@code deviceId} is the id of * a virtual device, it should correspond to a virtual device created by * {@link VirtualDeviceManager#createVirtualDevice(int, VirtualDeviceParams)}. */ private boolean isValidDeviceId(int deviceId) { if (deviceId == VirtualDeviceManager.DEVICE_ID_DEFAULT) { return true; } if (deviceId > VirtualDeviceManager.DEVICE_ID_DEFAULT) { VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class); if (vdm != null) { List<VirtualDevice> virtualDevices = vdm.getVirtualDevices(); for (int i = 0; i < virtualDevices.size(); i++) { if (virtualDevices.get(i).getDeviceId() == deviceId) { return true; } } } } return false; } @NonNull @Override public WindowContext createWindowContext(@WindowType int type, Loading Loading @@ -3044,11 +3020,14 @@ class ContextImpl extends Context { @Override public void updateDeviceId(int updatedDeviceId) { if (!isValidDeviceId(updatedDeviceId)) { if (updatedDeviceId != VirtualDeviceManager.DEVICE_ID_DEFAULT) { VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class); if (!vdm.isValidVirtualDeviceId(updatedDeviceId)) { throw new IllegalArgumentException( "Not a valid ID of the default device or any virtual device: " + updatedDeviceId); } } if (mIsExplicitDeviceId) { throw new UnsupportedOperationException( "Cannot update device ID on a Context created with createDeviceContext()"); Loading core/java/android/companion/virtual/IVirtualDeviceManager.aidl +8 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,14 @@ interface IVirtualDeviceManager { */ int getDeviceIdForDisplayId(int displayId); /** * Checks whether the passed {@code deviceId} is a valid virtual device ID or not. * {@link VirtualDeviceManager#DEVICE_ID_DEFAULT} is not valid as it is the ID of the default * device which is not a virtual device. {@code deviceId} must correspond to a virtual device * created by {@link VirtualDeviceManager#createVirtualDevice(int, VirtualDeviceParams)}. */ boolean isValidVirtualDeviceId(int deviceId); /** * Returns the device policy for the given virtual device and policy type. */ Loading core/java/android/companion/virtual/VirtualDeviceManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -257,6 +257,26 @@ public final class VirtualDeviceManager { } } /** * Checks whether the passed {@code deviceId} is a valid virtual device ID or not. * {@link VirtualDeviceManager#DEVICE_ID_DEFAULT} is not valid as it is the ID of the default * device which is not a virtual device. {@code deviceId} must correspond to a virtual device * created by {@link VirtualDeviceManager#createVirtualDevice(int, VirtualDeviceParams)}. * * @hide */ public boolean isValidVirtualDeviceId(int deviceId) { if (mService == null) { Log.w(TAG, "Failed to retrieve virtual devices; no virtual device manager service."); return false; } try { return mService.isValidVirtualDeviceId(deviceId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Returns device-specific audio session id for audio playback. * Loading services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +8 −16 Original line number Diff line number Diff line Loading @@ -139,15 +139,6 @@ public class VirtualDeviceManagerService extends SystemService { mActivityInterceptorCallback); } @GuardedBy("mVirtualDeviceManagerLock") private boolean isValidVirtualDeviceLocked(IVirtualDevice virtualDevice) { try { return mVirtualDevices.contains(virtualDevice.getDeviceId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } void onCameraAccessBlocked(int appUid) { synchronized (mVirtualDeviceManagerLock) { for (int i = 0; i < mVirtualDevices.size(); i++) { Loading Loading @@ -347,6 +338,14 @@ public class VirtualDeviceManagerService extends SystemService { return VirtualDeviceManager.DEVICE_ID_DEFAULT; } // Binder call @Override public boolean isValidVirtualDeviceId(int deviceId) { synchronized (mVirtualDeviceManagerLock) { return mVirtualDevices.contains(deviceId); } } @Override // Binder call public int getAudioPlaybackSessionId(int deviceId) { synchronized (mVirtualDeviceManagerLock) { Loading Loading @@ -444,13 +443,6 @@ public class VirtualDeviceManagerService extends SystemService { @GuardedBy("mVirtualDeviceManagerLock") private final ArraySet<Integer> mAllUidsOnVirtualDevice = new ArraySet<>(); @Override public boolean isValidVirtualDevice(IVirtualDevice virtualDevice) { synchronized (mVirtualDeviceManagerLock) { return isValidVirtualDeviceLocked(virtualDevice); } } @Override public int getDeviceOwnerUid(int deviceId) { synchronized (mVirtualDeviceManagerLock) { Loading services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java +0 −5 Original line number Diff line number Diff line Loading @@ -67,11 +67,6 @@ public abstract class VirtualDeviceManagerInternal { */ public abstract void onAppsOnVirtualDeviceChanged(); /** * Validate the virtual device. */ public abstract boolean isValidVirtualDevice(IVirtualDevice virtualDevice); /** * Gets the owner uid for a deviceId. * Loading Loading
core/java/android/app/ContextImpl.java +13 −34 Original line number Diff line number Diff line Loading @@ -26,9 +26,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UiContext; import android.companion.virtual.VirtualDevice; import android.companion.virtual.VirtualDeviceManager; import android.companion.virtual.VirtualDeviceParams; import android.compat.annotation.UnsupportedAppUsage; import android.content.AttributionSource; import android.content.AutofillOptions; Loading Loading @@ -2742,10 +2740,13 @@ class ContextImpl extends Context { @Override public @NonNull Context createDeviceContext(int deviceId) { if (!isValidDeviceId(deviceId)) { if (deviceId != VirtualDeviceManager.DEVICE_ID_DEFAULT) { VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class); if (!vdm.isValidVirtualDeviceId(deviceId)) { throw new IllegalArgumentException( "Not a valid ID of the default device or any virtual device: " + deviceId); } } ContextImpl context = new ContextImpl(this, mMainThread, mPackageInfo, mParams, mAttributionSource.getAttributionTag(), Loading @@ -2757,31 +2758,6 @@ class ContextImpl extends Context { return context; } /** * Checks whether the passed {@code deviceId} is valid or not. * {@link VirtualDeviceManager#DEVICE_ID_DEFAULT} is valid as it is the ID of the default * device when no additional virtual devices exist. If {@code deviceId} is the id of * a virtual device, it should correspond to a virtual device created by * {@link VirtualDeviceManager#createVirtualDevice(int, VirtualDeviceParams)}. */ private boolean isValidDeviceId(int deviceId) { if (deviceId == VirtualDeviceManager.DEVICE_ID_DEFAULT) { return true; } if (deviceId > VirtualDeviceManager.DEVICE_ID_DEFAULT) { VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class); if (vdm != null) { List<VirtualDevice> virtualDevices = vdm.getVirtualDevices(); for (int i = 0; i < virtualDevices.size(); i++) { if (virtualDevices.get(i).getDeviceId() == deviceId) { return true; } } } } return false; } @NonNull @Override public WindowContext createWindowContext(@WindowType int type, Loading Loading @@ -3044,11 +3020,14 @@ class ContextImpl extends Context { @Override public void updateDeviceId(int updatedDeviceId) { if (!isValidDeviceId(updatedDeviceId)) { if (updatedDeviceId != VirtualDeviceManager.DEVICE_ID_DEFAULT) { VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class); if (!vdm.isValidVirtualDeviceId(updatedDeviceId)) { throw new IllegalArgumentException( "Not a valid ID of the default device or any virtual device: " + updatedDeviceId); } } if (mIsExplicitDeviceId) { throw new UnsupportedOperationException( "Cannot update device ID on a Context created with createDeviceContext()"); Loading
core/java/android/companion/virtual/IVirtualDeviceManager.aidl +8 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,14 @@ interface IVirtualDeviceManager { */ int getDeviceIdForDisplayId(int displayId); /** * Checks whether the passed {@code deviceId} is a valid virtual device ID or not. * {@link VirtualDeviceManager#DEVICE_ID_DEFAULT} is not valid as it is the ID of the default * device which is not a virtual device. {@code deviceId} must correspond to a virtual device * created by {@link VirtualDeviceManager#createVirtualDevice(int, VirtualDeviceParams)}. */ boolean isValidVirtualDeviceId(int deviceId); /** * Returns the device policy for the given virtual device and policy type. */ Loading
core/java/android/companion/virtual/VirtualDeviceManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -257,6 +257,26 @@ public final class VirtualDeviceManager { } } /** * Checks whether the passed {@code deviceId} is a valid virtual device ID or not. * {@link VirtualDeviceManager#DEVICE_ID_DEFAULT} is not valid as it is the ID of the default * device which is not a virtual device. {@code deviceId} must correspond to a virtual device * created by {@link VirtualDeviceManager#createVirtualDevice(int, VirtualDeviceParams)}. * * @hide */ public boolean isValidVirtualDeviceId(int deviceId) { if (mService == null) { Log.w(TAG, "Failed to retrieve virtual devices; no virtual device manager service."); return false; } try { return mService.isValidVirtualDeviceId(deviceId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Returns device-specific audio session id for audio playback. * Loading
services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java +8 −16 Original line number Diff line number Diff line Loading @@ -139,15 +139,6 @@ public class VirtualDeviceManagerService extends SystemService { mActivityInterceptorCallback); } @GuardedBy("mVirtualDeviceManagerLock") private boolean isValidVirtualDeviceLocked(IVirtualDevice virtualDevice) { try { return mVirtualDevices.contains(virtualDevice.getDeviceId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } void onCameraAccessBlocked(int appUid) { synchronized (mVirtualDeviceManagerLock) { for (int i = 0; i < mVirtualDevices.size(); i++) { Loading Loading @@ -347,6 +338,14 @@ public class VirtualDeviceManagerService extends SystemService { return VirtualDeviceManager.DEVICE_ID_DEFAULT; } // Binder call @Override public boolean isValidVirtualDeviceId(int deviceId) { synchronized (mVirtualDeviceManagerLock) { return mVirtualDevices.contains(deviceId); } } @Override // Binder call public int getAudioPlaybackSessionId(int deviceId) { synchronized (mVirtualDeviceManagerLock) { Loading Loading @@ -444,13 +443,6 @@ public class VirtualDeviceManagerService extends SystemService { @GuardedBy("mVirtualDeviceManagerLock") private final ArraySet<Integer> mAllUidsOnVirtualDevice = new ArraySet<>(); @Override public boolean isValidVirtualDevice(IVirtualDevice virtualDevice) { synchronized (mVirtualDeviceManagerLock) { return isValidVirtualDeviceLocked(virtualDevice); } } @Override public int getDeviceOwnerUid(int deviceId) { synchronized (mVirtualDeviceManagerLock) { Loading
services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java +0 −5 Original line number Diff line number Diff line Loading @@ -67,11 +67,6 @@ public abstract class VirtualDeviceManagerInternal { */ public abstract void onAppsOnVirtualDeviceChanged(); /** * Validate the virtual device. */ public abstract boolean isValidVirtualDevice(IVirtualDevice virtualDevice); /** * Gets the owner uid for a deviceId. * Loading