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 Original line Diff line number Diff line
@@ -50,6 +50,12 @@ interface IVirtualDeviceManager {
            in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener,
            in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener,
            in IVirtualDeviceSoundEffectListener soundEffectListener);
            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.
     * Returns the details of all available virtual devices.
     */
     */
+17 −0
Original line number Original line 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_CLIPBOARD;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;


import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.UserIdInt;
import android.annotation.UserIdInt;
import android.app.PendingIntent;
import android.app.PendingIntent;
import android.companion.virtual.audio.VirtualAudioDevice;
import android.companion.virtual.audio.VirtualAudioDevice;
@@ -199,6 +201,7 @@ public class VirtualDeviceInternal {
    @Nullable
    @Nullable
    private VirtualAudioDevice mVirtualAudioDevice;
    private VirtualAudioDevice mVirtualAudioDevice;


    @RequiresPermission(Manifest.permission.CREATE_VIRTUAL_DEVICE)
    VirtualDeviceInternal(
    VirtualDeviceInternal(
            IVirtualDeviceManager service,
            IVirtualDeviceManager service,
            Context context,
            Context context,
@@ -214,6 +217,20 @@ public class VirtualDeviceInternal {
                mSoundEffectListener);
                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) {
    VirtualDeviceInternal(Context context, IVirtualDevice virtualDevice) {
        mContext = context.getApplicationContext();
        mContext = context.getApplicationContext();
        mVirtualDevice = virtualDevice;
        mVirtualDevice = virtualDevice;
+23 −0
Original line number Original line 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.
     * Returns the details of all available virtual devices.
     *
     *
@@ -573,6 +587,15 @@ public final class VirtualDeviceManager {
                    new VirtualDeviceInternal(service, context, associationId, params);
                    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 */
        /** @hide */
        public VirtualDevice(Context context, IVirtualDevice virtualDevice) {
        public VirtualDevice(Context context, IVirtualDevice virtualDevice) {
            mVirtualDeviceInternal = new VirtualDeviceInternal(context, virtualDevice);
            mVirtualDeviceInternal = new VirtualDeviceInternal(context, virtualDevice);
+7 −0
Original line number Original line 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"
    description: "Do not duplicate frames if no input is received and the capture request is not PREVIEW"
    bug: "383779587"
    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 Original line Diff line number Diff line
@@ -8538,6 +8538,13 @@
    <permission android:name="android.permission.CREATE_VIRTUAL_DEVICE"
    <permission android:name="android.permission.CREATE_VIRTUAL_DEVICE"
                android:protectionLevel="internal|role" />
                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
    <!-- @SystemApi Must be required by a safety source to send an update using the
             {@link android.safetycenter.SafetyCenterManager}.
             {@link android.safetycenter.SafetyCenterManager}.
             <p>Protection level: internal|privileged
             <p>Protection level: internal|privileged
Loading