From a8b3b3d4deb5c74ec3ceaf2ef8c2d530f2c8c9c8 Mon Sep 17 00:00:00 2001 From: yuanjiahsu Date: Wed, 14 Sep 2022 17:52:33 +0800 Subject: [PATCH] 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 --- .../virtual/VirtualDeviceManager.java | 4 ++-- .../virtual/audio/VirtualAudioDevice.java | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/java/android/companion/virtual/VirtualDeviceManager.java b/core/java/android/companion/virtual/VirtualDeviceManager.java index 1b93bb851567e..78d4083859b94 100644 --- a/core/java/android/companion/virtual/VirtualDeviceManager.java +++ b/core/java/android/companion/virtual/VirtualDeviceManager.java @@ -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; } diff --git a/core/java/android/companion/virtual/audio/VirtualAudioDevice.java b/core/java/android/companion/virtual/audio/VirtualAudioDevice.java index 0db7b5fe82898..e200a117e475e 100644 --- a/core/java/android/companion/virtual/audio/VirtualAudioDevice.java +++ b/core/java/android/companion/virtual/audio/VirtualAudioDevice.java @@ -64,11 +64,24 @@ public final class VirtualAudioDevice implements Closeable { void onRecordingConfigChanged(@NonNull List 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(); + } } } }