Remove reference when VirtualAudioDevice is closed
Adds close listener so that VirtualDevice can remove the cached reference when VirtualAudioDevice is closed. Bug: 224917468 Test: atest FrameworksCoreTests:android.companion.virtual Change-Id: I0fa27818568684f7bfb7edd62a6d6eebdb648f29
This commit is contained in:
@@ -418,8 +418,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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user