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

Commit 723670b1 authored by Jan Sebechlebsky's avatar Jan Sebechlebsky
Browse files

Use String for display name in VirtualCameraConfig

... instead of resource id.

It's trivial to get fetch the string for the resource id
for the client, but not possible to do the opposite.

This is also consistent will all other Virtual*Config which
use Strings for display names.

Bug: 310857519
Test: atest CtsVirtualDevicesCameraTestCases
Change-Id: I98080fd3a4142c910ebb5daf102e7eee2181f51e
parent 37727f65
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3357,7 +3357,7 @@ package android.companion.virtual.camera {
  @FlaggedApi("android.companion.virtual.flags.virtual_camera") public final class VirtualCameraConfig implements android.os.Parcelable {
    method public int describeContents();
    method @StringRes public int getDisplayNameStringRes();
    method @NonNull public String getName();
    method @NonNull public java.util.Set<android.companion.virtual.camera.VirtualCameraStreamConfig> getStreamConfigs();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.camera.VirtualCameraConfig> CREATOR;
@@ -3367,7 +3367,7 @@ package android.companion.virtual.camera {
    ctor public VirtualCameraConfig.Builder();
    method @NonNull public android.companion.virtual.camera.VirtualCameraConfig.Builder addStreamConfig(int, int, int);
    method @NonNull public android.companion.virtual.camera.VirtualCameraConfig build();
    method @NonNull public android.companion.virtual.camera.VirtualCameraConfig.Builder setDisplayNameStringRes(@StringRes int);
    method @NonNull public android.companion.virtual.camera.VirtualCameraConfig.Builder setName(@NonNull String);
    method @NonNull public android.companion.virtual.camera.VirtualCameraConfig.Builder setVirtualCameraCallback(@NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.camera.VirtualCameraCallback);
  }
+15 −25
Original line number Diff line number Diff line
@@ -20,11 +20,9 @@ import static java.util.Objects.requireNonNull;

import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.StringRes;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.companion.virtual.flags.Flags;
import android.content.res.Resources;
import android.graphics.ImageFormat;
import android.os.Parcel;
import android.os.Parcelable;
@@ -45,16 +43,16 @@ import java.util.concurrent.Executor;
@FlaggedApi(Flags.FLAG_VIRTUAL_CAMERA)
public final class VirtualCameraConfig implements Parcelable {

    private final @StringRes int mNameStringRes;
    private final String mName;
    private final Set<VirtualCameraStreamConfig> mStreamConfigurations;
    private final IVirtualCameraCallback mCallback;

    private VirtualCameraConfig(
            int displayNameStringRes,
            @NonNull String name,
            @NonNull Set<VirtualCameraStreamConfig> streamConfigurations,
            @NonNull Executor executor,
            @NonNull VirtualCameraCallback callback) {
        mNameStringRes = displayNameStringRes;
        mName = requireNonNull(name, "Missing name");
        mStreamConfigurations =
                Set.copyOf(requireNonNull(streamConfigurations, "Missing stream configurations"));
        if (mStreamConfigurations.isEmpty()) {
@@ -68,7 +66,7 @@ public final class VirtualCameraConfig implements Parcelable {
    }

    private VirtualCameraConfig(@NonNull Parcel in) {
        mNameStringRes = in.readInt();
        mName = in.readString8();
        mCallback = IVirtualCameraCallback.Stub.asInterface(in.readStrongBinder());
        mStreamConfigurations =
                Set.of(
@@ -84,18 +82,18 @@ public final class VirtualCameraConfig implements Parcelable {

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(mNameStringRes);
        dest.writeString8(mName);
        dest.writeStrongInterface(mCallback);
        dest.writeParcelableArray(
                mStreamConfigurations.toArray(new VirtualCameraStreamConfig[0]), flags);
    }

    /**
     * @return The display name of this VirtualCamera
     * @return The name of this VirtualCamera
     */
    @StringRes
    public int getDisplayNameStringRes() {
        return mNameStringRes;
    @NonNull
    public String getName() {
        return mName;
    }

    /**
@@ -126,30 +124,22 @@ public final class VirtualCameraConfig implements Parcelable {
     * <li>At least one stream must be added with {@link #addStreamConfig(int, int, int)}.
     * <li>A callback must be set with {@link #setVirtualCameraCallback(Executor,
     *     VirtualCameraCallback)}
     * <li>A user readable name can be set with {@link #setDisplayNameStringRes(int)}
     * <li>A camera name must be set with {@link #setName(String)}
     */
    @FlaggedApi(Flags.FLAG_VIRTUAL_CAMERA)
    public static final class Builder {

        private @StringRes int mDisplayNameStringRes = Resources.ID_NULL;
        private String mName;
        private final ArraySet<VirtualCameraStreamConfig> mStreamConfigurations = new ArraySet<>();
        private Executor mCallbackExecutor;
        private VirtualCameraCallback mCallback;

        /**
         * Set the visible name of this camera for the user.
         *
         * <p>Sets the resource to a string representing a user readable name for this virtual
         * camera.
         *
         * @throws IllegalArgumentException if an invalid resource id is passed.
         * Set the name of the virtual camera instance.
         */
        @NonNull
        public Builder setDisplayNameStringRes(@StringRes int displayNameStringRes) {
            if (displayNameStringRes <= 0) {
                throw new IllegalArgumentException("Invalid resource passed for display name");
            }
            mDisplayNameStringRes = displayNameStringRes;
        public Builder setName(@NonNull String name) {
            mName = requireNonNull(name, "Display name cannot be null");
            return this;
        }

@@ -203,7 +193,7 @@ public final class VirtualCameraConfig implements Parcelable {
        @NonNull
        public VirtualCameraConfig build() {
            return new VirtualCameraConfig(
                    mDisplayNameStringRes, mStreamConfigurations, mCallbackExecutor, mCallback);
                    mName, mStreamConfigurations, mCallbackExecutor, mCallback);
        }
    }

+8 −8
Original line number Diff line number Diff line
@@ -53,11 +53,11 @@ import java.util.List;
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public class VirtualCameraControllerTest {

    private static final int CAMERA_DISPLAY_NAME_RES_ID_1 = 10;
    private static final String CAMERA_NAME_1 = "Virtual camera 1";
    private static final int CAMERA_WIDTH_1 = 100;
    private static final int CAMERA_HEIGHT_1 = 200;

    private static final int CAMERA_DISPLAY_NAME_RES_ID_2 = 11;
    private static final String CAMERA_NAME_2 = "Virtual camera 2";
    private static final int CAMERA_WIDTH_2 = 400;
    private static final int CAMERA_HEIGHT_2 = 600;
    private static final int CAMERA_FORMAT = ImageFormat.YUV_420_888;
@@ -84,7 +84,7 @@ public class VirtualCameraControllerTest {
    @Test
    public void registerCamera_registersCamera() throws Exception {
        mVirtualCameraController.registerCamera(createVirtualCameraConfig(
                CAMERA_WIDTH_1, CAMERA_HEIGHT_1, CAMERA_FORMAT, CAMERA_DISPLAY_NAME_RES_ID_1));
                CAMERA_WIDTH_1, CAMERA_HEIGHT_1, CAMERA_FORMAT, CAMERA_NAME_1));

        ArgumentCaptor<VirtualCameraConfiguration> configurationCaptor =
                ArgumentCaptor.forClass(VirtualCameraConfiguration.class);
@@ -98,7 +98,7 @@ public class VirtualCameraControllerTest {
    @Test
    public void unregisterCamera_unregistersCamera() throws Exception {
        VirtualCameraConfig config = createVirtualCameraConfig(
                CAMERA_WIDTH_1, CAMERA_HEIGHT_1, CAMERA_FORMAT, CAMERA_DISPLAY_NAME_RES_ID_1);
                CAMERA_WIDTH_1, CAMERA_HEIGHT_1, CAMERA_FORMAT, CAMERA_NAME_1);
        mVirtualCameraController.registerCamera(config);

        mVirtualCameraController.unregisterCamera(config);
@@ -109,9 +109,9 @@ public class VirtualCameraControllerTest {
    @Test
    public void close_unregistersAllCameras() throws Exception {
        mVirtualCameraController.registerCamera(createVirtualCameraConfig(
                CAMERA_WIDTH_1, CAMERA_HEIGHT_1, CAMERA_FORMAT, CAMERA_DISPLAY_NAME_RES_ID_1));
                CAMERA_WIDTH_1, CAMERA_HEIGHT_1, CAMERA_FORMAT, CAMERA_NAME_1));
        mVirtualCameraController.registerCamera(createVirtualCameraConfig(
                CAMERA_WIDTH_2, CAMERA_HEIGHT_2, CAMERA_FORMAT, CAMERA_DISPLAY_NAME_RES_ID_2));
                CAMERA_WIDTH_2, CAMERA_HEIGHT_2, CAMERA_FORMAT, CAMERA_NAME_2));

        mVirtualCameraController.close();

@@ -129,10 +129,10 @@ public class VirtualCameraControllerTest {
    }

    private VirtualCameraConfig createVirtualCameraConfig(
            int width, int height, int format, int displayNameResId) {
            int width, int height, int format, String displayName) {
        return new VirtualCameraConfig.Builder()
                .addStreamConfig(width, height, format)
                .setDisplayNameStringRes(displayNameResId)
                .setName(displayName)
                .setVirtualCameraCallback(mCallbackHandler, createNoOpCallback())
                .build();
    }