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

Commit 7cc40702 authored by Marco Loaiza's avatar Marco Loaiza Committed by Android (Google) Code Review
Browse files

Merge "Add isValidVirtualDeviceId api to VDM"

parents 00c3793f 7de58979
Loading
Loading
Loading
Loading
+13 −34
Original line number Diff line number Diff line
@@ -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;
@@ -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(),
@@ -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,
@@ -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()");
+8 −0
Original line number Diff line number Diff line
@@ -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.
     */
+20 −0
Original line number Diff line number Diff line
@@ -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.
     *
+8 −16
Original line number Diff line number Diff line
@@ -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++) {
@@ -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) {
@@ -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) {
+0 −5
Original line number Diff line number Diff line
@@ -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