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

Commit 57a20119 authored by Sam Dubey's avatar Sam Dubey Committed by Android (Google) Code Review
Browse files

Revert "Bypass audio focus handling for VDM"

This reverts commit 84e9721f.

Reason for revert: Droidmonitor triggered revert for b/267470284

Change-Id: If7dc577a73b26d7d782ec7227c85adabcf593e55
parent 84e9721f
Loading
Loading
Loading
Loading
+11 −32
Original line number Diff line number Diff line
@@ -105,7 +105,6 @@ public class AudioManager {

    private Context mOriginalContext;
    private Context mApplicationContext;
    private int mOriginalContextDeviceId = DEVICE_ID_DEFAULT;
    private @Nullable VirtualDeviceManager mVirtualDeviceManager; // Lazy initialized.
    private long mVolumeKeyUpTime;
    private static final String TAG = "AudioManager";
@@ -845,7 +844,6 @@ public class AudioManager {
    }

    private void setContext(Context context) {
        mOriginalContextDeviceId = context.getDeviceId();
        mApplicationContext = context.getApplicationContext();
        if (mApplicationContext != null) {
            mOriginalContext = null;
@@ -3796,7 +3794,7 @@ public class AudioManager {
    }

    /**
     * Checks whether this {@link AudioManager} instance is associated with {@link VirtualDevice}
     * Checks whether this {@link AudioManager} instance is asociated with {@link VirtualDevice}
     * configured with custom device policy for audio. If there is such device, request to play
     * sound effect is forwarded to {@link VirtualDeviceManager}.
     *
@@ -3805,24 +3803,18 @@ public class AudioManager {
     * false otherwise.
     */
    private boolean delegateSoundEffectToVdm(@SystemSoundEffect int effectType) {
        if (hasCustomPolicyVirtualDeviceContext()) {
        int deviceId = getContext().getDeviceId();
        if (deviceId != DEVICE_ID_DEFAULT) {
            VirtualDeviceManager vdm = getVirtualDeviceManager();
            vdm.playSoundEffect(mOriginalContextDeviceId, effectType);
            if (vdm != null && vdm.getDevicePolicy(deviceId, POLICY_TYPE_AUDIO)
                    != DEVICE_POLICY_DEFAULT) {
                vdm.playSoundEffect(deviceId, effectType);
                return true;
            }
        return false;
        }

    private boolean hasCustomPolicyVirtualDeviceContext() {
        if (mOriginalContextDeviceId == DEVICE_ID_DEFAULT) {
        return false;
    }

        VirtualDeviceManager vdm = getVirtualDeviceManager();
        return vdm != null && vdm.getDevicePolicy(mOriginalContextDeviceId, POLICY_TYPE_AUDIO)
                != DEVICE_POLICY_DEFAULT;
    }

    /**
     *  Load Sound effects.
     *  This method must be called when sound effects are enabled.
@@ -4521,16 +4513,6 @@ public class AudioManager {
            throw new IllegalArgumentException(
                    "Illegal null audio policy when locking audio focus");
        }

        if (hasCustomPolicyVirtualDeviceContext()) {
            // If the focus request was made within context associated with VirtualDevice
            // configured with custom device policy for audio, bypass audio service focus handling.
            // The custom device policy for audio means that audio associated with this device
            // is likely rerouted to VirtualAudioDevice and playback on the VirtualAudioDevice
            // shouldn't affect non-virtual audio tracks (and vice versa).
            return AUDIOFOCUS_REQUEST_GRANTED;
        }

        registerAudioFocusRequest(afr);
        final IAudioService service = getService();
        final int status;
@@ -4803,19 +4785,16 @@ public class AudioManager {
    @SuppressLint("RequiresPermission") // no permission enforcement, but only "undoes" what would
    // have been done by a matching requestAudioFocus
    public int abandonAudioFocus(OnAudioFocusChangeListener l, AudioAttributes aa) {
        if (hasCustomPolicyVirtualDeviceContext()) {
            // If this AudioManager instance is running within VirtualDevice context configured
            // with custom device policy for audio, the audio focus handling is bypassed.
            return AUDIOFOCUS_REQUEST_GRANTED;
        }
        int status = AUDIOFOCUS_REQUEST_FAILED;
        unregisterAudioFocusRequest(l);
        final IAudioService service = getService();
        try {
            return service.abandonAudioFocus(mAudioFocusDispatcher,
            status = service.abandonAudioFocus(mAudioFocusDispatcher,
                    getIdForAudioFocusListener(l), aa, getContext().getOpPackageName());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
        return status;
    }

    //====================================================================