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

Commit 018bf8c7 authored by Guojing Yuan's avatar Guojing Yuan
Browse files

[CDM Transport] Update synchronization logic

Bug: 253307662

Test: m build
Change-Id: I1e1332f3e8043afab7f7d98fe251caf8687528dd
parent 3273d2f9
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
@@ -95,22 +95,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));
@@ -118,6 +119,7 @@ public class CompanionTransportManager {
                    associations.add(association);
                }
            }
        }
        mTransportsListeners.broadcast(listener1 -> {
            // callback to the current listener with all the associations of the transports
            // immediately
@@ -147,10 +149,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 {
@@ -163,6 +165,7 @@ public class CompanionTransportManager {
                }
            }
        }
    }

    /**
     * For the moment, we only offer transporting of system data to built-in
@@ -214,9 +217,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));
@@ -224,6 +227,7 @@ public class CompanionTransportManager {
                    associations.add(association);
                }
            }
        }
        mTransportsListeners.broadcast(listener -> {
            try {
                listener.onTransportsChanged(associations);
@@ -232,14 +236,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;
        }
@@ -282,7 +287,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;
@@ -329,7 +333,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
    }