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

Commit 156763aa authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

Add an API to get the details of all virtual devices.

Expose minimal information about a virtual device in `VirtualDevice` and allow clients to access it via VDM.

Bug: 239152561
Test: atest VirtualDeviceTest, CTS sent separately
Change-Id: I7e21009444205925707821692888dad50b58316f
parent fa42e5b6
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -9069,6 +9069,18 @@ package android.companion {
}
package android.companion.virtual {
  public final class VirtualDevice implements android.os.Parcelable {
    method public int describeContents();
    method public int getDeviceId();
    method @Nullable public String getName();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.VirtualDevice> CREATOR;
  }
}
package android.content {
  public abstract class AbstractThreadedSyncAdapter {
+3 −0
Original line number Diff line number Diff line
@@ -2789,6 +2789,7 @@ package android.companion.virtual {
  public final class VirtualDeviceManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.companion.virtual.VirtualDeviceManager.VirtualDevice createVirtualDevice(int, @NonNull android.companion.virtual.VirtualDeviceParams);
    method @NonNull public java.util.List<android.companion.virtual.VirtualDevice> getVirtualDevices();
    field public static final int DEFAULT_DEVICE_ID = 0; // 0x0
    field public static final int INVALID_DEVICE_ID = -1; // 0xffffffff
    field public static final int LAUNCH_FAILURE_NO_ACTIVITY = 2; // 0x2
@@ -2825,6 +2826,7 @@ package android.companion.virtual {
    method public int getDefaultActivityPolicy();
    method public int getDefaultNavigationPolicy();
    method public int getLockState();
    method @Nullable public String getName();
    method @NonNull public java.util.Set<android.os.UserHandle> getUsersWithMatchingAccounts();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int ACTIVITY_POLICY_DEFAULT_ALLOWED = 0; // 0x0
@@ -2844,6 +2846,7 @@ package android.companion.virtual {
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedActivities(@NonNull java.util.Set<android.content.ComponentName>);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedCrossTaskNavigations(@NonNull java.util.Set<android.content.ComponentName>);
    method @NonNull @RequiresPermission(value=android.Manifest.permission.ADD_ALWAYS_UNLOCKED_DISPLAY, conditional=true) public android.companion.virtual.VirtualDeviceParams.Builder setLockState(int);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setName(@NonNull String);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setUsersWithMatchingAccounts(@NonNull java.util.Set<android.os.UserHandle>);
  }
+6 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.companion.virtual;

import android.companion.virtual.IVirtualDevice;
import android.companion.virtual.IVirtualDeviceActivityListener;
import android.companion.virtual.VirtualDevice;
import android.companion.virtual.VirtualDeviceParams;
import android.hardware.display.IVirtualDisplayCallback;
import android.hardware.display.VirtualDisplayConfig;
@@ -45,6 +46,11 @@ interface IVirtualDeviceManager {
            in IBinder token, String packageName, int associationId,
            in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener);

    /**
     * Returns the details of all available virtual devices.
     */
    List<VirtualDevice> getVirtualDevices();

    /**
     * Creates a virtual display owned by a particular virtual device.
     *
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.companion.virtual;

parcelable VirtualDevice;
+119 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.companion.virtual;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;

import java.util.Objects;

/**
 * Details of a particular virtual device.
 */
public final class VirtualDevice implements Parcelable {

    private final int mId;
    private final @Nullable String mName;

    /**
     * Creates a new instance of {@link VirtualDevice}.
     * Only to be used by the VirtualDeviceManagerService.
     *
     * @hide
     */
    public VirtualDevice(int id, @Nullable String name) {
        if (id <= VirtualDeviceManager.DEFAULT_DEVICE_ID) {
            throw new IllegalArgumentException("VirtualDevice ID mist be greater than "
                    + VirtualDeviceManager.DEFAULT_DEVICE_ID);
        }
        mId = id;
        mName = name;
    }

    private VirtualDevice(@NonNull Parcel parcel) {
        mId = parcel.readInt();
        mName = parcel.readString8();
    }

    /**
     * Returns the unique ID of the virtual device.
     */
    public int getDeviceId() {
        return mId;
    }

    /**
     * Returns the name of the virtual device (optionally) provided during its creation.
     *
     * @see VirtualDeviceParams.Builder#setName(String)
     */
    public @Nullable String getName() {
        return mName;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(mId);
        dest.writeString8(mName);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof VirtualDevice)) {
            return false;
        }
        VirtualDevice that = (VirtualDevice) o;
        return mId == that.mId
                && Objects.equals(mName, that.mName);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mId, mName);
    }

    @Override
    @NonNull
    public String toString() {
        return "VirtualDevice("
                + " mId=" + mId
                + " mName=" + mName
                + ")";
    }

    @NonNull
    public static final Parcelable.Creator<VirtualDevice> CREATOR =
            new Parcelable.Creator<VirtualDevice>() {
                public VirtualDevice createFromParcel(Parcel in) {
                    return new VirtualDevice(in);
                }

                public VirtualDevice[] newArray(int size) {
                    return new VirtualDevice[size];
                }
            };
}
Loading