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

Commit b3fe58a8 authored by Marvin Ramin's avatar Marvin Ramin
Browse files

Update deviceID for VirtualAudioDevice based on policy

If the VD AUDIO policy is DEFAULT: Device-aware permissions should not
take effect, thus use the default context to register the audio policies
in VirtualAudioDevice.

If the VD AUDIO policy is CUSTOM: Device-aware permissions should be
enabled and we use the device-context for the current VirtualDevice to
register the audio policies in VirtualAudioDevice.

Bug: 291737188
Test: atest VirtualAudioPermissionTest
Change-Id: I8b9d6b62543f18b4af1adb5f45ec5d49703e5c80
parent c534686c
Loading
Loading
Loading
Loading
+16 −5
Original line number Original line Diff line number Diff line
@@ -16,6 +16,9 @@


package android.companion.virtual;
package android.companion.virtual;


import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO;

import android.annotation.CallbackExecutor;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
@@ -352,12 +355,20 @@ public class VirtualDeviceInternal {
            @Nullable Executor executor,
            @Nullable Executor executor,
            @Nullable VirtualAudioDevice.AudioConfigurationChangeCallback callback) {
            @Nullable VirtualAudioDevice.AudioConfigurationChangeCallback callback) {
        if (mVirtualAudioDevice == null) {
        if (mVirtualAudioDevice == null) {
            try {
                Context context = mContext;
                Context context = mContext;
                if (Flags.deviceAwareRecordAudioPermission()) {
                if (Flags.deviceAwareRecordAudioPermission()) {
                    // When using a default policy for audio device-aware RECORD_AUDIO permission
                    // should not take effect, thus register policies with the default context.
                    if (mVirtualDevice.getDevicePolicy(POLICY_TYPE_AUDIO) == DEVICE_POLICY_CUSTOM) {
                        context = mContext.createDeviceContext(getDeviceId());
                        context = mContext.createDeviceContext(getDeviceId());
                    }
                    }
                }
                mVirtualAudioDevice = new VirtualAudioDevice(context, mVirtualDevice, display,
                mVirtualAudioDevice = new VirtualAudioDevice(context, mVirtualDevice, display,
                        executor, callback, () -> mVirtualAudioDevice = null);
                        executor, callback, () -> mVirtualAudioDevice = null);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }
        }
        return mVirtualAudioDevice;
        return mVirtualAudioDevice;
    }
    }