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