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

Commit ddb8b7df authored by Nathan Harold's avatar Nathan Harold Committed by Android (Google) Code Review
Browse files

Merge "Cleanups for DataCallResponse"

parents 9672063e f0d92f52
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -15221,7 +15221,7 @@ package android.telephony.data {
    method @NonNull public android.telephony.data.DataCallResponse.Builder setGatewayAddresses(@NonNull java.util.List<java.net.InetAddress>);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setHandoverFailureMode(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setId(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@NonNull String);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@Nullable String);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setLinkStatus(int);
    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setMtu(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
+99 −105
Original line number Diff line number Diff line
@@ -36,8 +36,10 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;

/**
 * Description of the response of a setup data call connection request.
@@ -172,63 +174,57 @@ public final class DataCallResponse implements Parcelable {
                            @Nullable List<InetAddress> dnsAddresses,
                            @Nullable List<InetAddress> gatewayAddresses,
                            @Nullable List<InetAddress> pcscfAddresses, int mtu) {
        mCause = cause;
        mSuggestedRetryTime = suggestedRetryTime;
        mId = id;
        mLinkStatus = linkStatus;
        mProtocolType = protocolType;
        mInterfaceName = (interfaceName == null) ? "" : interfaceName;
        mAddresses = (addresses == null)
                ? new ArrayList<>() : new ArrayList<>(addresses);
        mDnsAddresses = (dnsAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(dnsAddresses);
        mGatewayAddresses = (gatewayAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(gatewayAddresses);
        mPcscfAddresses = (pcscfAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
        mMtu = mMtuV4 = mMtuV6 = mtu;
        mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
        mPduSessionId = PDU_SESSION_ID_NOT_SET;
        mDefaultQos = null;
        mQosBearerSessions = new ArrayList<>();
        mSliceInfo = null;
        mTrafficDescriptors = new ArrayList<>();
        this(cause, suggestedRetryTime, id,
                linkStatus, protocolType,
                interfaceName == null ? "" : interfaceName,
                addresses == null ? Collections.emptyList() : addresses,
                dnsAddresses == null ? Collections.emptyList() : dnsAddresses,
                gatewayAddresses == null ? Collections.emptyList() : gatewayAddresses,
                pcscfAddresses == null ? Collections.emptyList() : pcscfAddresses,
                mtu, mtu /* mtuV4 */, mtu /* mtuV6 */,
                HANDOVER_FAILURE_MODE_LEGACY, PDU_SESSION_ID_NOT_SET,
                null /* defaultQos */, Collections.emptyList() /* qosBearerSessions */,
                null /* sliceInfo */,
                Collections.emptyList() /* trafficDescriptors */);
    }

    private DataCallResponse(@DataFailureCause int cause, long suggestedRetryTime, int id,
            @LinkStatus int linkStatus, @ProtocolType int protocolType,
            @Nullable String interfaceName, @Nullable List<LinkAddress> addresses,
            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
            @Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
            @NonNull String interfaceName, @NonNull List<LinkAddress> addresses,
            @NonNull List<InetAddress> dnsAddresses, @NonNull List<InetAddress> gatewayAddresses,
            @NonNull List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
            @HandoverFailureMode int handoverFailureMode, int pduSessionId,
            @Nullable Qos defaultQos, @Nullable List<QosBearerSession> qosBearerSessions,
            @Nullable Qos defaultQos, @NonNull List<QosBearerSession> qosBearerSessions,
            @Nullable NetworkSliceInfo sliceInfo,
            @Nullable List<TrafficDescriptor> trafficDescriptors) {
            @NonNull List<TrafficDescriptor> trafficDescriptors) {
        mCause = cause;
        mSuggestedRetryTime = suggestedRetryTime;
        mId = id;
        mLinkStatus = linkStatus;
        mProtocolType = protocolType;
        mInterfaceName = (interfaceName == null) ? "" : interfaceName;
        mAddresses = (addresses == null)
                ? new ArrayList<>() : new ArrayList<>(addresses);
        mDnsAddresses = (dnsAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(dnsAddresses);
        mGatewayAddresses = (gatewayAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(gatewayAddresses);
        mPcscfAddresses = (pcscfAddresses == null)
                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
        mInterfaceName = interfaceName;
        mAddresses = new ArrayList<>(addresses);
        mDnsAddresses = new ArrayList<>(dnsAddresses);
        mGatewayAddresses = new ArrayList<>(gatewayAddresses);
        mPcscfAddresses = new ArrayList<>(pcscfAddresses);
        mMtu = mtu;
        mMtuV4 = mtuV4;
        mMtuV6 = mtuV6;
        mHandoverFailureMode = handoverFailureMode;
        mPduSessionId = pduSessionId;
        mDefaultQos = defaultQos;
        mQosBearerSessions = (qosBearerSessions == null)
                ? new ArrayList<>() : new ArrayList<>(qosBearerSessions);
        mQosBearerSessions = new ArrayList<>(qosBearerSessions);
        mSliceInfo = sliceInfo;
        mTrafficDescriptors = (trafficDescriptors == null)
                ? new ArrayList<>() : new ArrayList<>(trafficDescriptors);
        mTrafficDescriptors = new ArrayList<>(trafficDescriptors);

        if (mLinkStatus == LINK_STATUS_ACTIVE
                || mLinkStatus == LINK_STATUS_DORMANT) {
            Objects.requireNonNull(
                    mInterfaceName, "Active data calls must be on a valid interface!");
            if (mCause != DataFailCause.NONE) {
                throw new IllegalStateException("Active data call must not have a failure!");
            }
        }
    }

    /** @hide */
@@ -241,24 +237,39 @@ public final class DataCallResponse implements Parcelable {
        mProtocolType = source.readInt();
        mInterfaceName = source.readString();
        mAddresses = new ArrayList<>();
        source.readList(mAddresses, LinkAddress.class.getClassLoader(), android.net.LinkAddress.class);
        source.readList(mAddresses,
                LinkAddress.class.getClassLoader(),
                android.net.LinkAddress.class);
        mDnsAddresses = new ArrayList<>();
        source.readList(mDnsAddresses, InetAddress.class.getClassLoader(), java.net.InetAddress.class);
        source.readList(mDnsAddresses,
                InetAddress.class.getClassLoader(),
                java.net.InetAddress.class);
        mGatewayAddresses = new ArrayList<>();
        source.readList(mGatewayAddresses, InetAddress.class.getClassLoader(), java.net.InetAddress.class);
        source.readList(mGatewayAddresses,
                InetAddress.class.getClassLoader(),
                java.net.InetAddress.class);
        mPcscfAddresses = new ArrayList<>();
        source.readList(mPcscfAddresses, InetAddress.class.getClassLoader(), java.net.InetAddress.class);
        source.readList(mPcscfAddresses,
                InetAddress.class.getClassLoader(),
                java.net.InetAddress.class);
        mMtu = source.readInt();
        mMtuV4 = source.readInt();
        mMtuV6 = source.readInt();
        mHandoverFailureMode = source.readInt();
        mPduSessionId = source.readInt();
        mDefaultQos = source.readParcelable(Qos.class.getClassLoader(), android.telephony.data.Qos.class);
        mDefaultQos = source.readParcelable(Qos.class.getClassLoader(),
                android.telephony.data.Qos.class);
        mQosBearerSessions = new ArrayList<>();
        source.readList(mQosBearerSessions, QosBearerSession.class.getClassLoader(), android.telephony.data.QosBearerSession.class);
        mSliceInfo = source.readParcelable(NetworkSliceInfo.class.getClassLoader(), android.telephony.data.NetworkSliceInfo.class);
        source.readList(mQosBearerSessions,
                QosBearerSession.class.getClassLoader(),
                android.telephony.data.QosBearerSession.class);
        mSliceInfo = source.readParcelable(
                NetworkSliceInfo.class.getClassLoader(),
                android.telephony.data.NetworkSliceInfo.class);
        mTrafficDescriptors = new ArrayList<>();
        source.readList(mTrafficDescriptors, TrafficDescriptor.class.getClassLoader(), android.telephony.data.TrafficDescriptor.class);
        source.readList(mTrafficDescriptors,
                TrafficDescriptor.class.getClassLoader(),
                android.telephony.data.TrafficDescriptor.class);
    }

    /**
@@ -322,28 +333,36 @@ public final class DataCallResponse implements Parcelable {
     * @return A list of addresses of this data connection.
     */
    @NonNull
    public List<LinkAddress> getAddresses() { return mAddresses; }
    public List<LinkAddress> getAddresses() {
        return Collections.unmodifiableList(mAddresses);
    }

    /**
     * @return A list of DNS server addresses, e.g., "192.0.1.3" or
     * "192.0.1.11 2001:db8::1". Empty list if no dns server addresses returned.
     */
    @NonNull
    public List<InetAddress> getDnsAddresses() { return mDnsAddresses; }
    public List<InetAddress> getDnsAddresses() {
        return Collections.unmodifiableList(mDnsAddresses);
    }

    /**
     * @return A list of default gateway addresses, e.g., "192.0.1.3" or
     * "192.0.1.11 2001:db8::1". Empty list if the addresses represent point to point connections.
     */
    @NonNull
    public List<InetAddress> getGatewayAddresses() { return mGatewayAddresses; }
    public List<InetAddress> getGatewayAddresses() {
        return Collections.unmodifiableList(mGatewayAddresses);
    }

    /**
     * @return A list of Proxy Call State Control Function address via PCO (Protocol Configuration
     * Option) for IMS client.
     */
    @NonNull
    public List<InetAddress> getPcscfAddresses() { return mPcscfAddresses; }
    public List<InetAddress> getPcscfAddresses() {
        return Collections.unmodifiableList(mPcscfAddresses);
    }

    /**
     * @return MTU (maximum transmission unit) in bytes received from network. Zero or negative
@@ -404,7 +423,7 @@ public final class DataCallResponse implements Parcelable {
     */
    @NonNull
    public List<QosBearerSession> getQosBearerSessions() {
        return mQosBearerSessions;
        return Collections.unmodifiableList(mQosBearerSessions);
    }

    /**
@@ -420,7 +439,7 @@ public final class DataCallResponse implements Parcelable {
     */
    @NonNull
    public List<TrafficDescriptor> getTrafficDescriptors() {
        return mTrafficDescriptors;
        return Collections.unmodifiableList(mTrafficDescriptors);
    }

    @NonNull
@@ -461,18 +480,6 @@ public final class DataCallResponse implements Parcelable {

        DataCallResponse other = (DataCallResponse) o;

        final boolean isQosBearerSessionsSame =
                (mQosBearerSessions == null || other.mQosBearerSessions == null)
                ? mQosBearerSessions == other.mQosBearerSessions
                : (mQosBearerSessions.size() == other.mQosBearerSessions.size()
                        && mQosBearerSessions.containsAll(other.mQosBearerSessions));

        final boolean isTrafficDescriptorsSame =
                (mTrafficDescriptors == null || other.mTrafficDescriptors == null)
                ? mTrafficDescriptors == other.mTrafficDescriptors
                : (mTrafficDescriptors.size() == other.mTrafficDescriptors.size()
                        && mTrafficDescriptors.containsAll(other.mTrafficDescriptors));

        return mCause == other.mCause
                && mSuggestedRetryTime == other.mSuggestedRetryTime
                && mId == other.mId
@@ -493,42 +500,20 @@ public final class DataCallResponse implements Parcelable {
                && mHandoverFailureMode == other.mHandoverFailureMode
                && mPduSessionId == other.mPduSessionId
                && Objects.equals(mDefaultQos, other.mDefaultQos)
                && isQosBearerSessionsSame
                && mQosBearerSessions.size() == other.mQosBearerSessions.size() // non-null
                && mQosBearerSessions.containsAll(other.mQosBearerSessions) // non-null
                && Objects.equals(mSliceInfo, other.mSliceInfo)
                && isTrafficDescriptorsSame;
                && mTrafficDescriptors.size() == other.mTrafficDescriptors.size() // non-null
                && mTrafficDescriptors.containsAll(other.mTrafficDescriptors); // non-null
    }

    @Override
    public int hashCode() {
        // Generate order-independent hashes for lists
        int addressesHash = mAddresses.stream()
                .map(LinkAddress::hashCode)
                .mapToInt(Integer::intValue)
                .sum();
        int dnsAddressesHash = mDnsAddresses.stream()
                .map(InetAddress::hashCode)
                .mapToInt(Integer::intValue)
                .sum();
        int gatewayAddressesHash = mGatewayAddresses.stream()
                .map(InetAddress::hashCode)
                .mapToInt(Integer::intValue)
                .sum();
        int pcscfAddressesHash = mPcscfAddresses.stream()
                .map(InetAddress::hashCode)
                .mapToInt(Integer::intValue)
                .sum();
        int qosBearerSessionsHash = mQosBearerSessions.stream()
                .map(QosBearerSession::hashCode)
                .mapToInt(Integer::intValue)
                .sum();
        int trafficDescriptorsHash = mTrafficDescriptors.stream()
                .map(TrafficDescriptor::hashCode)
                .mapToInt(Integer::intValue)
                .sum();
        return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
                mInterfaceName, addressesHash, dnsAddressesHash, gatewayAddressesHash,
                pcscfAddressesHash, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId,
                mDefaultQos, qosBearerSessionsHash, mSliceInfo, trafficDescriptorsHash);
                mInterfaceName, Set.copyOf(mAddresses), Set.copyOf(mDnsAddresses),
                Set.copyOf(mGatewayAddresses), Set.copyOf(mPcscfAddresses), mMtu, mMtuV4, mMtuV6,
                mHandoverFailureMode, mPduSessionId, mDefaultQos, Set.copyOf(mQosBearerSessions),
                mSliceInfo, Set.copyOf(mTrafficDescriptors));
    }

    @Override
@@ -616,15 +601,15 @@ public final class DataCallResponse implements Parcelable {

        private @ProtocolType int mProtocolType;

        private String mInterfaceName;
        private String mInterfaceName = "";

        private List<LinkAddress> mAddresses;
        private List<LinkAddress> mAddresses = Collections.emptyList();

        private List<InetAddress> mDnsAddresses;
        private List<InetAddress> mDnsAddresses = Collections.emptyList();

        private List<InetAddress> mGatewayAddresses;
        private List<InetAddress> mGatewayAddresses = Collections.emptyList();

        private List<InetAddress> mPcscfAddresses;
        private List<InetAddress> mPcscfAddresses = Collections.emptyList();

        private int mMtu;

@@ -636,11 +621,11 @@ public final class DataCallResponse implements Parcelable {

        private int mPduSessionId = PDU_SESSION_ID_NOT_SET;

        private Qos mDefaultQos;
        private @Nullable Qos mDefaultQos;

        private List<QosBearerSession> mQosBearerSessions = new ArrayList<>();

        private NetworkSliceInfo mSliceInfo;
        private @Nullable NetworkSliceInfo mSliceInfo;

        private List<TrafficDescriptor> mTrafficDescriptors = new ArrayList<>();

@@ -653,7 +638,9 @@ public final class DataCallResponse implements Parcelable {
        /**
         * Set data call fail cause.
         *
         * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
         * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error, which
         * is the only valid value for data calls that are {@link LINK_STATUS_ACTIVE} or
         * {@link LINK_STATUS_DORMANT}.
         * @return The same instance of the builder.
         */
        public @NonNull Builder setCause(@DataFailureCause int cause) {
@@ -722,10 +709,13 @@ public final class DataCallResponse implements Parcelable {
        /**
         * Set the network interface name.
         *
         * @param interfaceName The network interface name (e.g. "rmnet_data1").
         * @param interfaceName The network interface name (e.g. "rmnet_data1"). This value may not
         * be null for valid data calls (those that are {@link LINK_STATUS_ACTIVE} or
         * {@link LINK_STATUS_DORMANT}).
         * @return The same instance of the builder.
         */
        public @NonNull Builder setInterfaceName(@NonNull String interfaceName) {
        public @NonNull Builder setInterfaceName(@Nullable String interfaceName) {
            if (interfaceName == null) interfaceName = "";
            mInterfaceName = interfaceName;
            return this;
        }
@@ -737,6 +727,7 @@ public final class DataCallResponse implements Parcelable {
         * @return The same instance of the builder.
         */
        public @NonNull Builder setAddresses(@NonNull List<LinkAddress> addresses) {
            Objects.requireNonNull(addresses);
            mAddresses = addresses;
            return this;
        }
@@ -748,6 +739,7 @@ public final class DataCallResponse implements Parcelable {
         * @return The same instance of the builder.
         */
        public @NonNull Builder setDnsAddresses(@NonNull List<InetAddress> dnsAddresses) {
            Objects.requireNonNull(dnsAddresses);
            mDnsAddresses = dnsAddresses;
            return this;
        }
@@ -759,6 +751,7 @@ public final class DataCallResponse implements Parcelable {
         * @return The same instance of the builder.
         */
        public @NonNull Builder setGatewayAddresses(@NonNull List<InetAddress> gatewayAddresses) {
            Objects.requireNonNull(gatewayAddresses);
            mGatewayAddresses = gatewayAddresses;
            return this;
        }
@@ -771,6 +764,7 @@ public final class DataCallResponse implements Parcelable {
         * @return The same instance of the builder.
         */
        public @NonNull Builder setPcscfAddresses(@NonNull List<InetAddress> pcscfAddresses) {
            Objects.requireNonNull(pcscfAddresses);
            mPcscfAddresses = pcscfAddresses;
            return this;
        }