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

Commit bd72db6f authored by Matthew Sedam's avatar Matthew Sedam
Browse files

Cleanup handleClientMessageCallback

Bug: 331795143
Change-Id: Icb6b151a91317e354093ca0b232d5d898bff7429
Flag: EXEMPT refactor
Test: Presubmits
parent 3d88dde8
Loading
Loading
Loading
Loading
+61 −39
Original line number Diff line number Diff line
@@ -317,9 +317,6 @@ public class ContextHubService extends IContextHubService.Stub {
         */
        private static final int MAX_PROBABILITY_PERCENT = 100;

        /**
         * Random number generator.
         */
        private Random mRandom = new Random();

        /**
@@ -994,17 +991,19 @@ public class ContextHubService extends IContextHubService.Stub {
            return;
        }

        if (message.isReliable()) {
        if (!message.isReliable()) {
            mClientManager.onMessageFromNanoApp(
                    contextHubId, hostEndpointId, message,
                    nanoappPermissions, messagePermissions);
            cleanupReliableMessageRecordQueue();
            return;
        }

        byte errorCode = ErrorCode.OK;
        synchronized (mReliableMessageRecordQueue) {
                Optional<ReliableMessageRecord> record = Optional.empty();
                for (ReliableMessageRecord r: mReliableMessageRecordQueue) {
                    if (r.getContextHubId() == contextHubId
                            && r.getMessageSequenceNumber() == message.getMessageSequenceNumber()) {
                        record = Optional.of(r);
                        break;
                    }
                }
            Optional<ReliableMessageRecord> record =
                    findReliableMessageRecord(contextHubId,
                            message.getMessageSequenceNumber());

            if (record.isPresent()) {
                errorCode = record.get().getErrorCode();
@@ -1030,14 +1029,37 @@ public class ContextHubService extends IContextHubService.Stub {
                                errorCode));
            }
        }

        sendMessageDeliveryStatusToContextHub(contextHubId,
                message.getMessageSequenceNumber(), errorCode);
        } else {
            mClientManager.onMessageFromNanoApp(
                    contextHubId, hostEndpointId, message,
                    nanoappPermissions, messagePermissions);
        cleanupReliableMessageRecordQueue();
    }

    /**
     * Finds a reliable message record in the queue that matches the given
     * context hub ID and message sequence number. This function assumes
     * the caller is synchronized on mReliableMessageRecordQueue.
     *
     * @param contextHubId the ID of the hub
     * @param messageSequenceNumber the message sequence number
     *
     * @return the record if found, or empty if not found
     */
    private Optional<ReliableMessageRecord> findReliableMessageRecord(
            int contextHubId, int messageSequenceNumber) {
        for (ReliableMessageRecord record: mReliableMessageRecordQueue) {
            if (record.getContextHubId() == contextHubId
                && record.getMessageSequenceNumber() == messageSequenceNumber) {
                return Optional.of(record);
            }
        }
        return Optional.empty();
    }

    /**
     * Removes old entries from the reliable message record queue.
     */
    private void cleanupReliableMessageRecordQueue() {
        synchronized (mReliableMessageRecordQueue) {
            while (mReliableMessageRecordQueue.peek() != null
                   && mReliableMessageRecordQueue.peek().isExpired()) {