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

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

Merge "Fully implement VirtualDevice#hasCustomAudioInputSupport" into main

parents f1481a36 cf4dd9ae
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -78,6 +78,11 @@ interface IVirtualDevice {
     */
    int getDevicePolicy(int policyType);

    /**
    * Returns whether the device has a valid microphone.
    */
    boolean hasCustomAudioInputSupport();

    /**
     * Closes the virtual device and frees all associated resources.
     */
+1 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package android.companion.virtual;

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

@@ -176,8 +175,7 @@ public final class VirtualDevice implements Parcelable {
    @FlaggedApi(Flags.FLAG_VDM_PUBLIC_APIS)
    public boolean hasCustomAudioInputSupport() {
        try {
            return mVirtualDevice.getDevicePolicy(POLICY_TYPE_AUDIO) == DEVICE_POLICY_CUSTOM;
            // TODO(b/291735254): also check for a custom audio injection mix for this device id.
            return mVirtualDevice.hasCustomAudioInputSupport();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+34 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.companion.virtual.VirtualDeviceParams.ACTIVITY_POLICY_DEFA
import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
import static android.companion.virtual.VirtualDeviceParams.NAVIGATION_POLICY_DEFAULT_ALLOWED;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_ACTIVITY;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CAMERA;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CLIPBOARD;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;
@@ -82,6 +83,8 @@ import android.hardware.input.VirtualStylusConfig;
import android.hardware.input.VirtualStylusMotionEvent;
import android.hardware.input.VirtualTouchEvent;
import android.hardware.input.VirtualTouchscreenConfig;
import android.media.AudioManager;
import android.media.audiopolicy.AudioMix;
import android.os.Binder;
import android.os.IBinder;
import android.os.LocaleList;
@@ -1062,6 +1065,37 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
        return mVirtualCameraController.getCameraId(cameraConfig);
    }

    @Override
    public boolean hasCustomAudioInputSupport() throws RemoteException {
        if (!Flags.vdmPublicApis()) {
            return false;
        }

        if (!android.media.audiopolicy.Flags.audioMixTestApi()) {
            return false;
        }
        if (!android.media.audiopolicy.Flags.recordAudioDeviceAwarePermission()) {
            return false;
        }

        if (getDevicePolicy(POLICY_TYPE_AUDIO) == VirtualDeviceParams.DEVICE_POLICY_DEFAULT) {
            return false;
        }
        final long token = Binder.clearCallingIdentity();
        try {
            AudioManager audioManager = mContext.getSystemService(AudioManager.class);
            for (AudioMix mix : audioManager.getRegisteredPolicyMixes()) {
                if (mix.matchesVirtualDeviceId(getDeviceId())
                        && mix.getMixType() == AudioMix.MIX_TYPE_RECORDERS) {
                    return true;
                }
            }
        } finally {
            Binder.restoreCallingIdentity(token);
        }
        return false;
    }

    @Override
    protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
        String indent = "    ";
+5 −0
Original line number Diff line number Diff line
@@ -141,6 +141,7 @@ public class VirtualDeviceTest {
    @Test
    public void virtualDevice_hasCustomAudioInputSupport() throws Exception {
        mSetFlagsRule.enableFlags(Flags.FLAG_VDM_PUBLIC_APIS);
        mSetFlagsRule.enableFlags(android.media.audiopolicy.Flags.FLAG_AUDIO_MIX_TEST_API);

        VirtualDevice virtualDevice =
                new VirtualDevice(
@@ -150,6 +151,10 @@ public class VirtualDeviceTest {
        assertThat(virtualDevice.hasCustomAudioInputSupport()).isFalse();

        when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_AUDIO)).thenReturn(DEVICE_POLICY_CUSTOM);
        when(mVirtualDevice.hasCustomAudioInputSupport()).thenReturn(false);
        assertThat(virtualDevice.hasCustomAudioInputSupport()).isFalse();

        when(mVirtualDevice.hasCustomAudioInputSupport()).thenReturn(true);
        assertThat(virtualDevice.hasCustomAudioInputSupport()).isTrue();
    }