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

Commit 4848b856 authored by Biswarup Pal's avatar Biswarup Pal Committed by Android (Google) Code Review
Browse files

Merge "Improve virtual camera VDM implementation" into main

parents e0bf258d 5a230697
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -246,4 +246,10 @@ interface IVirtualDevice {
     */
    @EnforcePermission("CREATE_VIRTUAL_DEVICE")
    void unregisterVirtualCamera(in VirtualCameraConfig camera);

    /**
     * Returns the id of the virtual camera with given config.
     */
    @EnforcePermission("CREATE_VIRTUAL_DEVICE")
    int getVirtualCameraId(in VirtualCameraConfig camera);
}
+8 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.companion.virtual;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.UserIdInt;
import android.app.PendingIntent;
import android.companion.virtual.audio.VirtualAudioDevice;
@@ -340,12 +341,17 @@ public class VirtualDeviceInternal {
        return mVirtualAudioDevice;
    }

    @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
    @NonNull
    VirtualCamera createVirtualCamera(@NonNull VirtualCameraConfig config) {
        try {
            mVirtualDevice.registerVirtualCamera(config);
            return new VirtualCamera(mVirtualDevice, config);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @NonNull
    void setShowPointerIcon(boolean showPointerIcon) {
        try {
            mVirtualDevice.setShowPointerIcon(showPointerIcon);
+15 −8
Original line number Diff line number Diff line
@@ -66,15 +66,8 @@ public final class VirtualCamera implements Closeable {
    @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
    public VirtualCamera(
            @NonNull IVirtualDevice virtualDevice, @NonNull VirtualCameraConfig config) {
        mVirtualDevice = virtualDevice;
        mVirtualDevice = Objects.requireNonNull(virtualDevice);
        mConfig = Objects.requireNonNull(config);
        Objects.requireNonNull(virtualDevice);
        // TODO(b/310857519): Avoid registration inside constructor.
        try {
            mVirtualDevice.registerVirtualCamera(config);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    /** Returns the configuration of this virtual camera instance. */
@@ -83,6 +76,20 @@ public final class VirtualCamera implements Closeable {
        return mConfig;
    }

    /**
     * Returns the id of this virtual camera instance.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
    @NonNull
    public String getId() {
        try {
            return Integer.toString(mVirtualDevice.getVirtualCameraId(mConfig));
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @Override
    @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
    public void close() {
+10 −0
Original line number Diff line number Diff line
@@ -55,5 +55,15 @@
        }
      ]
    }
  ],
  "postsubmit": [
    {
      "name": "CtsVirtualDevicesCameraTestCases",
      "options": [
        {
          "exclude-annotation": "androidx.test.filters.FlakyTest"
        }
      ]
    }
  ]
}
+14 −2
Original line number Diff line number Diff line
@@ -939,7 +939,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
        if (mVirtualCameraController == null) {
            throw new UnsupportedOperationException("Virtual camera controller is not available");
        }
        mVirtualCameraController.registerCamera(Objects.requireNonNull(cameraConfig));
        mVirtualCameraController.registerCamera(cameraConfig);
    }

    @Override // Binder call
@@ -951,7 +951,19 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
        if (mVirtualCameraController == null) {
            throw new UnsupportedOperationException("Virtual camera controller is not available");
        }
        mVirtualCameraController.unregisterCamera(Objects.requireNonNull(cameraConfig));
        mVirtualCameraController.unregisterCamera(cameraConfig);
    }

    @Override // Binder call
    @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
    public int getVirtualCameraId(@NonNull VirtualCameraConfig cameraConfig)
            throws RemoteException {
        super.getVirtualCameraId_enforcePermission();
        Objects.requireNonNull(cameraConfig);
        if (mVirtualCameraController == null) {
            throw new UnsupportedOperationException("Virtual camera controller is not available");
        }
        return mVirtualCameraController.getCameraId(cameraConfig);
    }

    @Override
Loading