Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8b3b3d4 authored by yuanjiahsu's avatar yuanjiahsu
Browse files

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
parent 79324138
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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;
        }
+19 −1
Original line number Diff line number Diff line
@@ -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();
            }
        }
    }
}