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

Commit 506f96b9 authored by Arthur Ishiguro's avatar Arthur Ishiguro
Browse files

Create builder classes for HubMessage

Bug: 383758665
API-Coverage-Bug: 377554469
Flag: android.chre.flags.offload_api
Test: Compile
Change-Id: I19366658f33408eba0aa2f1d7c1526c1157dfdbf
parent f0a18eed
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();
    }

    /**