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

Commit 2379ed99 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add ComputerControl access to VirtualDeviceManager" into main

parents 35fed29d cab0e63d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -50,6 +50,12 @@ interface IVirtualDeviceManager {
            in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener,
            in IVirtualDeviceSoundEffectListener soundEffectListener);

    @EnforcePermission("COMPUTER_CONTROL_ACCESS")
    IVirtualDevice createLocalVirtualDevice(
            in IBinder token, in AttributionSource attributionSource,
            in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener,
            in IVirtualDeviceSoundEffectListener soundEffectListener);

    /**
     * Returns the details of all available virtual devices.
     */
+17 −0
Original line number Diff line number Diff line
@@ -23,9 +23,11 @@ import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_BLOCKED_
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CLIPBOARD;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;

import android.Manifest;
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;
@@ -199,6 +201,7 @@ public class VirtualDeviceInternal {
    @Nullable
    private VirtualAudioDevice mVirtualAudioDevice;

    @RequiresPermission(Manifest.permission.CREATE_VIRTUAL_DEVICE)
    VirtualDeviceInternal(
            IVirtualDeviceManager service,
            Context context,
@@ -214,6 +217,20 @@ public class VirtualDeviceInternal {
                mSoundEffectListener);
    }

    @RequiresPermission(Manifest.permission.COMPUTER_CONTROL_ACCESS)
    VirtualDeviceInternal(
            IVirtualDeviceManager service,
            Context context,
            VirtualDeviceParams params) throws RemoteException {
        mContext = context.getApplicationContext();
        mVirtualDevice = service.createLocalVirtualDevice(
                new Binder(),
                mContext.getAttributionSource(),
                params,
                mActivityListenerBinder,
                mSoundEffectListener);
    }

    VirtualDeviceInternal(Context context, IVirtualDevice virtualDevice) {
        mContext = context.getApplicationContext();
        mVirtualDevice = virtualDevice;
+23 −0
Original line number Diff line number Diff line
@@ -220,6 +220,20 @@ public final class VirtualDeviceManager {
        }
    }

    /**
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.COMPUTER_CONTROL_ACCESS)
    @NonNull
    public VirtualDevice createVirtualDevice(@NonNull VirtualDeviceParams params) {
        Objects.requireNonNull(params, "params must not be null");
        try {
            return new VirtualDevice(mService, mContext, params);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Returns the details of all available virtual devices.
     *
@@ -573,6 +587,15 @@ public final class VirtualDeviceManager {
                    new VirtualDeviceInternal(service, context, associationId, params);
        }

        @RequiresPermission(Manifest.permission.COMPUTER_CONTROL_ACCESS)
        private VirtualDevice(
                IVirtualDeviceManager service,
                Context context,
                VirtualDeviceParams params) throws RemoteException {
            mVirtualDeviceInternal =
                    new VirtualDeviceInternal(service, context, params);
        }

        /** @hide */
        public VirtualDevice(Context context, IVirtualDevice virtualDevice) {
            mVirtualDeviceInternal = new VirtualDeviceInternal(context, virtualDevice);
+7 −0
Original line number Diff line number Diff line
@@ -180,3 +180,10 @@ flag {
    description: "Do not duplicate frames if no input is received and the capture request is not PREVIEW"
    bug: "383779587"
}

flag {
    name: "computer_control_access"
    namespace: "virtual_devices"
    description: "Enable VDM access for computer control"
    bug: "410570802"
}
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
@@ -8538,6 +8538,13 @@
    <permission android:name="android.permission.CREATE_VIRTUAL_DEVICE"
                android:protectionLevel="internal|role" />

    <!-- Allows an application access to computer control features.
     @hide -->
    <permission android:name="android.permission.COMPUTER_CONTROL_ACCESS"
        android:protectionLevel="internal|knownSigner"
        android:knownCerts="@array/config_computerControlAccessKnownSigners"
        android:featureFlag="android.companion.virtualdevice.flags.computer_control_access"/>

    <!-- @SystemApi Must be required by a safety source to send an update using the
             {@link android.safetycenter.SafetyCenterManager}.
             <p>Protection level: internal|privileged
Loading