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

Commit 95d8a087 authored by Raphael Kim's avatar Raphael Kim Committed by Android (Google) Code Review
Browse files

Merge "[V][CDM] Replace transport listener and message listener with...

Merge "[V][CDM] Replace transport listener and message listener with functional interfaces" into main
parents 8848f964 290eb22a
Loading
Loading
Loading
Loading
+21 −44
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
@@ -908,35 +909,21 @@ public final class CompanionDeviceManager {
        }
    }

    /**
     * Listener for any changes to the list of attached transports.
     *
     * @see com.android.server.companion.transport.Transport
     *
     * @hide
     */
    public interface OnTransportsChangedListener {
        /**
         * Invoked when a transport is attached or detached.
         *
         * @param associations all the associations which have connected transports.
         */
        void onTransportsChanged(@NonNull List<AssociationInfo> associations);
    }

    /**
     * Adds a listener for any changes to the list of attached transports.
     * {@link OnTransportsChangedListener#onTransportsChanged(List)} will be triggered with a list
     * of existing transports when a transport is detached or a new transport is attached.
     * Registered listener will be triggered with a list of existing transports when a transport
     * is detached or a new transport is attached.
     *
     * @param executor The executor which will be used to invoke the listener.
     * @param listener Called when a transport is attached or detached. Contains the updated list of
     *                 associations which have connected transports.
     * @see com.android.server.companion.transport.Transport
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
    public void addOnTransportsChangedListener(
            @NonNull @CallbackExecutor Executor executor,
            @NonNull OnTransportsChangedListener listener) {
            @NonNull Consumer<List<AssociationInfo>> listener) {
        final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy(
                executor, listener);
        try {
@@ -955,7 +942,7 @@ public final class CompanionDeviceManager {
     */
    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
    public void removeOnTransportsChangedListener(
            @NonNull OnTransportsChangedListener listener) {
            @NonNull Consumer<List<AssociationInfo>> listener) {
        final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy(
                null, listener);
        try {
@@ -983,28 +970,18 @@ public final class CompanionDeviceManager {
    }

    /**
     * Listener that triggers a callback when a message is received through a connected transport.
     *
     * @see #addOnMessageReceivedListener(Executor, int, OnMessageReceivedListener)
     *
     * @hide
     */
    public interface OnMessageReceivedListener {
        /**
         * Called when a message is received.
         */
        void onMessageReceived(int associationId, @NonNull byte[] data);
    }

    /**
     * Adds a listener to trigger callbacks when messages of given type are received.
     * Adds a listener that triggers when messages of given type are received.
     *
     * @param executor The executor which will be used to invoke the listener.
     * @param messageType Message type to be subscribed to.
     * @param listener Called when a message is received. Contains the association ID of the message
     *                 sender and the message payload as a byte array.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
    public void addOnMessageReceivedListener(
            @NonNull @CallbackExecutor Executor executor, int messageType,
            @NonNull OnMessageReceivedListener listener) {
            @NonNull BiConsumer<Integer, byte[]> listener) {
        final OnMessageReceivedListenerProxy proxy = new OnMessageReceivedListenerProxy(
                executor, listener);
        try {
@@ -1021,7 +998,7 @@ public final class CompanionDeviceManager {
     */
    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
    public void removeOnMessageReceivedListener(int messageType,
            @NonNull OnMessageReceivedListener listener) {
            @NonNull BiConsumer<Integer, byte[]> listener) {
        final OnMessageReceivedListenerProxy proxy = new OnMessageReceivedListenerProxy(
                null, listener);
        try {
@@ -1596,34 +1573,34 @@ public final class CompanionDeviceManager {
    private static class OnTransportsChangedListenerProxy
            extends IOnTransportsChangedListener.Stub {
        private final Executor mExecutor;
        private final OnTransportsChangedListener mListener;
        private final Consumer<List<AssociationInfo>> mListener;

        private OnTransportsChangedListenerProxy(Executor executor,
                OnTransportsChangedListener listener) {
                Consumer<List<AssociationInfo>> listener) {
            mExecutor = executor;
            mListener = listener;
        }

        @Override
        public void onTransportsChanged(@NonNull List<AssociationInfo> associations) {
            mExecutor.execute(() -> mListener.onTransportsChanged(associations));
            mExecutor.execute(() -> mListener.accept(associations));
        }
    }

    private static class OnMessageReceivedListenerProxy
            extends IOnMessageReceivedListener.Stub {
        private final Executor mExecutor;
        private final OnMessageReceivedListener mListener;
        private final BiConsumer<Integer, byte[]> mListener;

        private OnMessageReceivedListenerProxy(Executor executor,
                OnMessageReceivedListener listener) {
                BiConsumer<Integer, byte[]> listener) {
            mExecutor = executor;
            mListener = listener;
        }

        @Override
        public void onMessageReceived(int associationId, byte[] data) {
            mExecutor.execute(() -> mListener.onMessageReceived(associationId, data));
            mExecutor.execute(() -> mListener.accept(associationId, data));
        }
    }