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

Commit 7c10fc06 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Create builder classes for HubMessage" into main

parents 82e4c14d 506f96b9
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -5157,18 +5157,18 @@ package android.hardware.contexthub {
  }
  @FlaggedApi("android.chre.flags.offload_api") public final class HubMessage implements android.os.Parcelable {
    ctor public HubMessage(int, @NonNull byte[]);
    ctor public HubMessage(int, @NonNull byte[], @NonNull android.hardware.contexthub.HubMessage.DeliveryParams);
    method public int describeContents();
    method @NonNull public byte[] getMessageBody();
    method public int getMessageType();
    method public boolean isResponseRequired();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.contexthub.HubMessage> CREATOR;
  }
  public static class HubMessage.DeliveryParams {
    ctor public HubMessage.DeliveryParams(boolean);
    method public boolean isResponseRequired();
  public static final class HubMessage.Builder {
    ctor public HubMessage.Builder(int, @NonNull byte[]);
    method @NonNull public android.hardware.contexthub.HubMessage build();
    method @NonNull public android.hardware.contexthub.HubMessage.Builder setResponseRequired(boolean);
  }
  @FlaggedApi("android.chre.flags.offload_api") public final class HubServiceInfo implements android.os.Parcelable {
+2 −2
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ public class HubEndpoint {
                    }

                    if (activeSession == null || mMessageCallback == null) {
                        if (message.getDeliveryParams().isResponseRequired()) {
                        if (message.isResponseRequired()) {
                            try {
                                mServiceToken.sendMessageDeliveryStatus(
                                        sessionId,
@@ -313,7 +313,7 @@ public class HubEndpoint {
                    mMessageCallbackExecutor.execute(
                            () -> {
                                mMessageCallback.onMessageReceived(activeSession, message);
                                if (message.getDeliveryParams().isResponseRequired()) {
                                if (message.isResponseRequired()) {
                                    try {
                                        mServiceToken.sendMessageDeliveryStatus(
                                                sessionId,
+1 −1
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ public class HubEndpointSession implements AutoCloseable {
            throw new IllegalStateException("Session is already closed.");
        }

        boolean isResponseRequired = message.getDeliveryParams().isResponseRequired();
        boolean isResponseRequired = message.isResponseRequired();
        ContextHubTransaction<Void> ret =
                new ContextHubTransaction<>(
                        isResponseRequired
+47 −84
Original line number Diff line number Diff line
@@ -29,7 +29,8 @@ import java.util.Arrays;
import java.util.Objects;

/**
 * A class describing general messages send through the Context Hub Service.
 * A class describing general messages send through the Context Hub Service through {@link
 * HubEndpointSession#sendMessage}.
 *
 * @hide
 */
@@ -41,84 +42,14 @@ public final class HubMessage implements Parcelable {
    private final int mMessageType;
    private final byte[] mMessageBody;

    private final DeliveryParams mDeliveryParams;
    private int mMessageSequenceNumber;

    /**
     * Configurable options for message delivery. This option can be passed into {@link
     * HubEndpointSession#sendMessage} to specify the behavior of message delivery.
     */
    public static class DeliveryParams {
    private final boolean mResponseRequired;
    private int mMessageSequenceNumber;

        /**
         * @param responseRequired If true, message sent with this option will have a {@link
         *     android.hardware.location.ContextHubTransaction.Response} when the peer received the
         *     message.
         */
        public DeliveryParams(boolean responseRequired) {
            mResponseRequired = responseRequired;
        }

        /** Get the acknowledgement requirement. */
        public boolean isResponseRequired() {
            return mResponseRequired;
        }

        @Override
        public String toString() {
            StringBuilder out = new StringBuilder();
            out.append("DeliveryParams[");
            out.append("responseRequired = ").append(mResponseRequired);
            out.append("]");
            return out.toString();
        }

        @Override
        public int hashCode() {
            return Objects.hash(mResponseRequired);
        }

        @Override
        public boolean equals(Object obj) {
            if (obj == this) {
                return true;
            }

            if (obj instanceof DeliveryParams other) {
                return other.mResponseRequired == mResponseRequired;
            }

            return false;
        }
    }

    /**
     * Default constructor for HubMessage with no response required.
     *
     * @param messageType the endpoint & service dependent message type
     * @param messageBody the byte array message contents
     */
    public HubMessage(int messageType, @NonNull byte[] messageBody) {
        Objects.requireNonNull(messageBody, "messageBody cannot be null");
        mMessageType = messageType;
        mMessageBody = messageBody;
        mDeliveryParams = new DeliveryParams(/* responseRequired= */ false);
    }

    /**
     * @param messageType the endpoint & service dependent message type
     * @param messageBody the byte array message contents
     * @param deliveryParams The message delivery parameters. See {@link HubMessage.DeliveryParams}
     *     for more details.
     */
    public HubMessage(
            int messageType, @NonNull byte[] messageBody, @NonNull DeliveryParams deliveryParams) {
    private HubMessage(int messageType, @NonNull byte[] messageBody, boolean responseRequired) {
        Objects.requireNonNull(messageBody, "messageBody cannot be null");
        Objects.requireNonNull(deliveryParams, "deliveryParams cannot be null");
        mMessageType = messageType;
        mMessageBody = messageBody;
        mDeliveryParams = deliveryParams;
        mResponseRequired = responseRequired;
    }

    /**
@@ -141,12 +72,10 @@ public final class HubMessage implements Parcelable {
    }

    /**
     * Retrieve the {@link DeliveryParams} object specifying the behavior of message delivery.
     *
     * @hide
     * @return true if a response is required when the peer endpoint receives the message.
     */
    public DeliveryParams getDeliveryParams() {
        return mDeliveryParams;
    public boolean isResponseRequired() {
        return mResponseRequired;
    }

    /**
@@ -175,7 +104,7 @@ public final class HubMessage implements Parcelable {
        mMessageBody = new byte[msgSize];
        in.readByteArray(mMessageBody);

        mDeliveryParams = new DeliveryParams(in.readInt() == 1);
        mResponseRequired = (in.readInt() == 1);
        mMessageSequenceNumber = in.readInt();
    }

@@ -191,7 +120,7 @@ public final class HubMessage implements Parcelable {
        out.writeInt(mMessageBody.length);
        out.writeByteArray(mMessageBody);

        out.writeInt(mDeliveryParams.isResponseRequired() ? 1 : 0);
        out.writeInt(mResponseRequired ? 1 : 0);
        out.writeInt(mMessageSequenceNumber);
    }

@@ -217,7 +146,7 @@ public final class HubMessage implements Parcelable {
        out.append("HubMessage[type = ").append(mMessageType);
        out.append(", length = ").append(mMessageBody.length);
        out.append(", messageSequenceNumber = ").append(mMessageSequenceNumber);
        out.append(", deliveryParams = ").append(mDeliveryParams);
        out.append(", responseRequired = ").append(mResponseRequired);
        out.append("](");

        if (length > 0) {
@@ -249,7 +178,7 @@ public final class HubMessage implements Parcelable {
            isEqual =
                    (other.getMessageType() == mMessageType)
                            && Arrays.equals(other.getMessageBody(), mMessageBody)
                            && (other.getDeliveryParams().equals(mDeliveryParams))
                            && (other.isResponseRequired() == mResponseRequired)
                            && (other.getMessageSequenceNumber() == mMessageSequenceNumber);
        }

@@ -265,7 +194,41 @@ public final class HubMessage implements Parcelable {
        return Objects.hash(
                mMessageType,
                Arrays.hashCode(mMessageBody),
                mDeliveryParams,
                mResponseRequired,
                mMessageSequenceNumber);
    }

    public static final class Builder {
        private int mMessageType;
        private byte[] mMessageBody;
        private boolean mResponseRequired = false;

        /**
         * Create a builder for {@link HubMessage} with a default delivery parameters.
         *
         * @param messageType the endpoint & service dependent message type
         * @param messageBody the byte array message contents
         */
        public Builder(int messageType, @NonNull byte[] messageBody) {
            mMessageType = messageType;
            mMessageBody = messageBody;
        }

        /**
         * @param responseRequired If true, message sent with this option will have a {@link
         *     android.hardware.location.ContextHubTransaction.Response} when the peer received the
         *     message. Default is false.
         */
        @NonNull
        public Builder setResponseRequired(boolean responseRequired) {
            mResponseRequired = responseRequired;
            return this;
        }

        /** Build the {@link HubMessage} object. */
        @NonNull
        public HubMessage build() {
            return new HubMessage(mMessageType, mMessageBody, mResponseRequired);
        }
    }
}
+4 −6
Original line number Diff line number Diff line
@@ -482,10 +482,7 @@ import java.util.List;
    /* package */
    static Message createHalMessage(HubMessage message) {
        Message outMessage = new Message();
        outMessage.flags =
                message.getDeliveryParams().isResponseRequired()
                        ? Message.FLAG_REQUIRES_DELIVERY_STATUS
                        : 0;
        outMessage.flags = message.isResponseRequired() ? Message.FLAG_REQUIRES_DELIVERY_STATUS : 0;
        outMessage.permissions = new String[0];
        outMessage.sequenceNumber = message.getMessageSequenceNumber();
        outMessage.type = message.getMessageType();
@@ -502,8 +499,9 @@ import java.util.List;
    /* package */
    static HubMessage createHubMessage(Message message) {
        boolean isReliable = (message.flags & Message.FLAG_REQUIRES_DELIVERY_STATUS) != 0;
        return new HubMessage(
                message.type, message.content, new HubMessage.DeliveryParams(isReliable));
        return new HubMessage.Builder(message.type, message.content)
                .setResponseRequired(isReliable)
                .build();
    }

    /**