Merge "Revert "Bypass audio focus handling for VDM""

This commit is contained in:
Sam Dubey
2023-02-01 16:34:10 +00:00
committed by Android (Google) Code Review

View File

@@ -106,7 +106,6 @@ public class AudioManager {
private Context mOriginalContext;
private Context mApplicationContext;
private int mOriginalContextDeviceId = DEVICE_ID_DEFAULT;
private @Nullable VirtualDeviceManager mVirtualDeviceManager; // Lazy initialized.
private static final String TAG = "AudioManager";
private static final boolean DEBUG = false;
@@ -845,7 +844,6 @@ public class AudioManager {
}
private void setContext(Context context) {
mOriginalContextDeviceId = context.getDeviceId();
mApplicationContext = context.getApplicationContext();
if (mApplicationContext != null) {
mOriginalContext = null;
@@ -3960,7 +3958,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}.
*
@@ -3969,24 +3967,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);
return true;
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.
@@ -4685,16 +4677,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;
@@ -4967,19 +4949,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;
}
//====================================================================