Merge "Remove reference when VirtualAudioDevice is closed"

This commit is contained in:
Yuanjia Hsu
2022-09-28 01:57:25 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 3 deletions

View File

@@ -445,8 +445,8 @@ public final class VirtualDeviceManager {
@Nullable Executor executor,
@Nullable AudioConfigurationChangeCallback callback) {
if (mVirtualAudioDevice == null) {
mVirtualAudioDevice = new VirtualAudioDevice(
mContext, mVirtualDevice, display, executor, callback);
mVirtualAudioDevice = new VirtualAudioDevice(mContext, mVirtualDevice, display,
executor, callback, () -> mVirtualAudioDevice = null);
}
return mVirtualAudioDevice;
}

View File

@@ -64,11 +64,24 @@ public final class VirtualAudioDevice implements Closeable {
void onRecordingConfigChanged(@NonNull List<AudioRecordingConfiguration> configs);
}
/**
* Interface to be notified when {@link #close()} is called.
*
* @hide
*/
public interface CloseListener {
/**
* Notifies when {@link #close()} is called.
*/
void onClosed();
}
private final Context mContext;
private final IVirtualDevice mVirtualDevice;
private final VirtualDisplay mVirtualDisplay;
private final AudioConfigurationChangeCallback mCallback;
private final Executor mExecutor;
private final CloseListener mListener;
@Nullable
private VirtualAudioSession mOngoingSession;
@@ -77,12 +90,13 @@ public final class VirtualAudioDevice implements Closeable {
*/
public VirtualAudioDevice(Context context, IVirtualDevice virtualDevice,
@NonNull VirtualDisplay virtualDisplay, @Nullable Executor executor,
@Nullable AudioConfigurationChangeCallback callback) {
@Nullable AudioConfigurationChangeCallback callback, @Nullable CloseListener listener) {
mContext = context;
mVirtualDevice = virtualDevice;
mVirtualDisplay = virtualDisplay;
mExecutor = executor;
mCallback = callback;
mListener = listener;
}
/**
@@ -169,6 +183,10 @@ public final class VirtualAudioDevice implements Closeable {
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
if (mListener != null) {
mListener.onClosed();
}
}
}
}