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

Commit 427cacab authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[CDM Transport] Update synchronization logic" into udc-dev

parents 1ec3d827 018bf8c7
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -604,25 +604,21 @@ public class CompanionDeviceManagerService extends SystemService {
        }

        @Override
        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
        public void addOnTransportsChangedListener(IOnTransportsChangedListener listener) {
            mTransportManager.addListener(listener);
        }

        @Override
        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
        public void removeOnTransportsChangedListener(IOnTransportsChangedListener listener) {
            mTransportManager.removeListener(listener);
        }

        @Override
        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
        public void sendMessage(int messageType, byte[] data, int[] associationIds) {
            mTransportManager.sendMessage(messageType, data, associationIds);
        }

        @Override
        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
        public void addOnMessageReceivedListener(int messageType,
                IOnMessageReceivedListener listener) {
            mTransportManager.addListener(messageType, listener);
+34 −28
Original line number Diff line number Diff line
@@ -96,22 +96,23 @@ public class CompanionTransportManager {
    /**
     * Add a listener to receive callbacks when a message is received for the message type
     */
    @GuardedBy("mTransports")
    public void addListener(int message, @NonNull IOnMessageReceivedListener listener) {
        mMessageListeners.put(message, listener);
        synchronized (mTransports) {
            for (int i = 0; i < mTransports.size(); i++) {
                mTransports.valueAt(i).addListener(message, listener);
            }
        }
    }

    /**
     * Add a listener to receive callbacks when any of the transports is changed
     */
    @GuardedBy("mTransports")
    public void addListener(IOnTransportsChangedListener listener) {
        Slog.i(TAG, "Registering OnTransportsChangedListener");
        mTransportsListeners.register(listener);
        List<AssociationInfo> associations = new ArrayList<>();
        synchronized (mTransports) {
            for (int i = 0; i < mTransports.size(); i++) {
                AssociationInfo association = mAssociationStore.getAssociationById(
                        mTransports.keyAt(i));
@@ -119,6 +120,7 @@ public class CompanionTransportManager {
                    associations.add(association);
                }
            }
        }
        mTransportsListeners.broadcast(listener1 -> {
            // callback to the current listener with all the associations of the transports
            // immediately
@@ -148,10 +150,10 @@ public class CompanionTransportManager {
    /**
     * Send a message to remote devices through the transports
     */
    @GuardedBy("mTransports")
    public void sendMessage(int message, byte[] data, int[] associationIds) {
        Slog.i(TAG, "Sending message 0x" + Integer.toHexString(message)
                + " data length " + data.length);
        synchronized (mTransports) {
            for (int i = 0; i < associationIds.length; i++) {
                if (mTransports.contains(associationIds[i])) {
                    try {
@@ -164,6 +166,7 @@ public class CompanionTransportManager {
                }
            }
        }
    }

    /**
     * For the moment, we only offer transporting of system data to built-in
@@ -215,9 +218,9 @@ public class CompanionTransportManager {
        }
    }

    @GuardedBy("mTransports")
    private void notifyOnTransportsChanged() {
        List<AssociationInfo> associations = new ArrayList<>();
        synchronized (mTransports) {
            for (int i = 0; i < mTransports.size(); i++) {
                AssociationInfo association = mAssociationStore.getAssociationById(
                        mTransports.keyAt(i));
@@ -225,6 +228,7 @@ public class CompanionTransportManager {
                    associations.add(association);
                }
            }
        }
        mTransportsListeners.broadcast(listener -> {
            try {
                listener.onTransportsChanged(associations);
@@ -233,14 +237,15 @@ public class CompanionTransportManager {
        });
    }

    @GuardedBy("mTransports")
    private void initializeTransport(int associationId, ParcelFileDescriptor fd) {
        Slog.i(TAG, "Initializing transport");
        if (!isSecureTransportEnabled()) {
            Transport transport = new RawTransport(associationId, fd, mContext);
            addMessageListenersToTransport(transport);
            transport.start();
            synchronized (mTransports) {
                mTransports.put(associationId, transport);
            }
            Slog.i(TAG, "RawTransport is created");
            return;
        }
@@ -283,7 +288,6 @@ public class CompanionTransportManager {
    /**
     * Depending on the remote platform info to decide which transport should be created
     */
    @GuardedBy("CompanionTransportManager.this.mTransports")
    private void onPlatformInfoReceived(int associationId, byte[] data) {
        if (mTempTransport.getAssociationId() != associationId) {
            return;
@@ -330,7 +334,9 @@ public class CompanionTransportManager {
        }
        addMessageListenersToTransport(transport);
        transport.start();
        synchronized (mTransports) {
            mTransports.put(transport.getAssociationId(), transport);
        }
        // Doesn't need to notifyTransportsChanged here, it'll be done in attachSystemDataTransport
    }