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:
yuanjiahsu
2022-09-14 17:52:33 +08:00
parent 79324138a6
commit a8b3b3d4de
2 changed files with 21 additions and 3 deletions

View File

@@ -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;
}

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();
}
}
}
}