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

Commit 9fef2219 authored by Jayachandran C's avatar Jayachandran C
Browse files

Add QoS filter matching and unit tests

Bug: 158315614
Test: atest com.android.internal.telephony.dataconnection.QosCallbackTrackerTest

Change-Id: I7d6d66eba5612182703826b60b4d735230572eea
parent a06b20b4
Loading
Loading
Loading
Loading
+22 −21
Original line number Original line Diff line number Diff line
@@ -136,7 +136,7 @@ public final class DataCallResponse implements Parcelable {
    private final @HandoverFailureMode int mHandoverFailureMode;
    private final @HandoverFailureMode int mHandoverFailureMode;
    private final int mPduSessionId;
    private final int mPduSessionId;
    private final Qos mDefaultQos;
    private final Qos mDefaultQos;
    private final List<QosSession> mQosSessions;
    private final List<QosBearerSession> mQosBearerSessions;
    private final SliceInfo mSliceInfo;
    private final SliceInfo mSliceInfo;


    /**
    /**
@@ -187,7 +187,7 @@ public final class DataCallResponse implements Parcelable {
        mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
        mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
        mPduSessionId = PDU_SESSION_ID_NOT_SET;
        mPduSessionId = PDU_SESSION_ID_NOT_SET;
        mDefaultQos = null;
        mDefaultQos = null;
        mQosSessions = new ArrayList<>();
        mQosBearerSessions = new ArrayList<>();
        mSliceInfo = null;
        mSliceInfo = null;
    }
    }


@@ -197,7 +197,7 @@ public final class DataCallResponse implements Parcelable {
            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
            @Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
            @Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
            @HandoverFailureMode int handoverFailureMode, int pduSessionId,
            @HandoverFailureMode int handoverFailureMode, int pduSessionId,
            @Nullable Qos defaultQos, @Nullable List<QosSession> qosSessions,
            @Nullable Qos defaultQos, @Nullable List<QosBearerSession> qosBearerSessions,
            @Nullable SliceInfo sliceInfo) {
            @Nullable SliceInfo sliceInfo) {
        mCause = cause;
        mCause = cause;
        mSuggestedRetryTime = suggestedRetryTime;
        mSuggestedRetryTime = suggestedRetryTime;
@@ -219,7 +219,7 @@ public final class DataCallResponse implements Parcelable {
        mHandoverFailureMode = handoverFailureMode;
        mHandoverFailureMode = handoverFailureMode;
        mPduSessionId = pduSessionId;
        mPduSessionId = pduSessionId;
        mDefaultQos = defaultQos;
        mDefaultQos = defaultQos;
        mQosSessions = qosSessions;
        mQosBearerSessions = qosBearerSessions;
        mSliceInfo = sliceInfo;
        mSliceInfo = sliceInfo;
    }
    }


@@ -246,8 +246,8 @@ public final class DataCallResponse implements Parcelable {
        mHandoverFailureMode = source.readInt();
        mHandoverFailureMode = source.readInt();
        mPduSessionId = source.readInt();
        mPduSessionId = source.readInt();
        mDefaultQos = source.readParcelable(Qos.class.getClassLoader());
        mDefaultQos = source.readParcelable(Qos.class.getClassLoader());
        mQosSessions = new ArrayList<>();
        mQosBearerSessions = new ArrayList<>();
        source.readList(mQosSessions, QosSession.class.getClassLoader());
        source.readList(mQosBearerSessions, QosBearerSession.class.getClassLoader());
        mSliceInfo = source.readParcelable(SliceInfo.class.getClassLoader());
        mSliceInfo = source.readParcelable(SliceInfo.class.getClassLoader());
    }
    }


@@ -394,8 +394,8 @@ public final class DataCallResponse implements Parcelable {
     * @hide
     * @hide
     */
     */
    @NonNull
    @NonNull
    public List<QosSession> getQosSessions() {
    public List<QosBearerSession> getQosBearerSessions() {
        return mQosSessions;
        return mQosBearerSessions;
    }
    }


    /**
    /**
@@ -427,7 +427,7 @@ public final class DataCallResponse implements Parcelable {
           .append(" handoverFailureMode=").append(failureModeToString(mHandoverFailureMode))
           .append(" handoverFailureMode=").append(failureModeToString(mHandoverFailureMode))
           .append(" pduSessionId=").append(getPduSessionId())
           .append(" pduSessionId=").append(getPduSessionId())
           .append(" defaultQos=").append(mDefaultQos)
           .append(" defaultQos=").append(mDefaultQos)
           .append(" qosSessions=").append(mQosSessions)
           .append(" qosBearerSessions=").append(mQosBearerSessions)
           .append(" sliceInfo=").append(mSliceInfo)
           .append(" sliceInfo=").append(mSliceInfo)
           .append("}");
           .append("}");
        return sb.toString();
        return sb.toString();
@@ -447,10 +447,10 @@ public final class DataCallResponse implements Parcelable {
                mDefaultQos == other.mDefaultQos :
                mDefaultQos == other.mDefaultQos :
                mDefaultQos.equals(other.mDefaultQos);
                mDefaultQos.equals(other.mDefaultQos);


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


        return mCause == other.mCause
        return mCause == other.mCause
                && mSuggestedRetryTime == other.mSuggestedRetryTime
                && mSuggestedRetryTime == other.mSuggestedRetryTime
@@ -472,7 +472,7 @@ public final class DataCallResponse implements Parcelable {
                && mHandoverFailureMode == other.mHandoverFailureMode
                && mHandoverFailureMode == other.mHandoverFailureMode
                && mPduSessionId == other.mPduSessionId
                && mPduSessionId == other.mPduSessionId
                && isQosSame
                && isQosSame
                && isQosSessionsSame
                && isQosBearerSessionsSame
                && Objects.equals(mSliceInfo, other.mSliceInfo);
                && Objects.equals(mSliceInfo, other.mSliceInfo);
    }
    }


@@ -481,7 +481,7 @@ public final class DataCallResponse implements Parcelable {
        return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
        return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
                mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
                mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
                mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId, mDefaultQos,
                mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId, mDefaultQos,
                mQosSessions, mSliceInfo);
                mQosBearerSessions, mSliceInfo);
    }
    }


    @Override
    @Override
@@ -515,7 +515,7 @@ public final class DataCallResponse implements Parcelable {
        } else {
        } else {
            dest.writeParcelable(null, flags);
            dest.writeParcelable(null, flags);
        }
        }
        dest.writeList(mQosSessions);
        dest.writeList(mQosBearerSessions);
        dest.writeParcelable(mSliceInfo, flags);
        dest.writeParcelable(mSliceInfo, flags);
    }
    }


@@ -598,7 +598,7 @@ public final class DataCallResponse implements Parcelable {


        private Qos mDefaultQos;
        private Qos mDefaultQos;


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


        private SliceInfo mSliceInfo;
        private SliceInfo mSliceInfo;


@@ -812,15 +812,16 @@ public final class DataCallResponse implements Parcelable {
        /**
        /**
         * Set the dedicated bearer QOS sessions for this data connection.
         * Set the dedicated bearer QOS sessions for this data connection.
         *
         *
         * @param qosSessions Dedicated bearer QOS (Quality Of Service) sessions received
         * @param qosBearerSessions Dedicated bearer QOS (Quality Of Service) sessions received
         * from network.
         * from network.
         *
         *
         * @return The same instance of the builder.
         * @return The same instance of the builder.
         *
         *
         * @hide
         * @hide
         */
         */
        public @NonNull Builder setQosSessions(@NonNull List<QosSession> qosSessions) {
        public @NonNull Builder setQosBearerSessions(
            mQosSessions = qosSessions;
                @NonNull List<QosBearerSession> qosBearerSessions) {
            mQosBearerSessions = qosBearerSessions;
            return this;
            return this;
        }
        }


@@ -848,7 +849,7 @@ public final class DataCallResponse implements Parcelable {
            return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
            return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
                    mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
                    mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
                    mPcscfAddresses, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId,
                    mPcscfAddresses, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId,
                    mDefaultQos, mQosSessions, mSliceInfo);
                    mDefaultQos, mQosBearerSessions, mSliceInfo);
        }
        }
    }
    }
}
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,10 @@ public final class EpsQos extends Qos implements Parcelable {
        qosClassId = source.readInt();
        qosClassId = source.readInt();
    }
    }


    public int getQci() {
        return qosClassId;
    }

    public static @NonNull EpsQos createFromParcelBody(@NonNull Parcel in) {
    public static @NonNull EpsQos createFromParcelBody(@NonNull Parcel in) {
        return new EpsQos(in);
        return new EpsQos(in);
    }
    }
+17 −1
Original line number Original line Diff line number Diff line
@@ -56,7 +56,15 @@ public abstract class Qos {
        this.uplink = new QosBandwidth(uplink.maxBitrateKbps, uplink.guaranteedBitrateKbps);
        this.uplink = new QosBandwidth(uplink.maxBitrateKbps, uplink.guaranteedBitrateKbps);
    }
    }


    static class QosBandwidth implements Parcelable {
    public QosBandwidth getDownlinkBandwidth() {
        return downlink;
    }

    public QosBandwidth getUplinkBandwidth() {
        return uplink;
    }

    public static class QosBandwidth implements Parcelable {
        int maxBitrateKbps;
        int maxBitrateKbps;
        int guaranteedBitrateKbps;
        int guaranteedBitrateKbps;


@@ -73,6 +81,14 @@ public abstract class Qos {
            guaranteedBitrateKbps = source.readInt();
            guaranteedBitrateKbps = source.readInt();
        }
        }


        public int getMaxBitrateKbps() {
            return maxBitrateKbps;
        }

        public int getGuaranteedBitrateKbps() {
            return guaranteedBitrateKbps;
        }

        @Override
        @Override
        public void writeToParcel(Parcel dest, int flags) {
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(maxBitrateKbps);
            dest.writeInt(maxBitrateKbps);
+45 −17
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ import java.util.Objects;
 *
 *
 * @hide
 * @hide
 */
 */
public final class QosFilter implements Parcelable {
public final class QosBearerFilter implements Parcelable {


    private List<LinkAddress> localAddresses;
    private List<LinkAddress> localAddresses;
    private List<LinkAddress> remoteAddresses;
    private List<LinkAddress> remoteAddresses;
@@ -74,7 +74,7 @@ public final class QosFilter implements Parcelable {
    @IntDef(prefix = "QOS_FILTER_DIRECTION_",
    @IntDef(prefix = "QOS_FILTER_DIRECTION_",
            value = {QOS_FILTER_DIRECTION_DOWNLINK, QOS_FILTER_DIRECTION_UPLINK,
            value = {QOS_FILTER_DIRECTION_DOWNLINK, QOS_FILTER_DIRECTION_UPLINK,
                    QOS_FILTER_DIRECTION_BIDIRECTIONAL})
                    QOS_FILTER_DIRECTION_BIDIRECTIONAL})
    public @interface QosFilterDirection {}
    public @interface QosBearerFilterDirection {}


    public static final int QOS_FILTER_DIRECTION_DOWNLINK =
    public static final int QOS_FILTER_DIRECTION_DOWNLINK =
            android.hardware.radio.V1_6.QosFilterDirection.DOWNLINK;
            android.hardware.radio.V1_6.QosFilterDirection.DOWNLINK;
@@ -83,7 +83,7 @@ public final class QosFilter implements Parcelable {
    public static final int QOS_FILTER_DIRECTION_BIDIRECTIONAL =
    public static final int QOS_FILTER_DIRECTION_BIDIRECTIONAL =
            android.hardware.radio.V1_6.QosFilterDirection.BIDIRECTIONAL;
            android.hardware.radio.V1_6.QosFilterDirection.BIDIRECTIONAL;


    @QosFilterDirection
    @QosBearerFilterDirection
    private int filterDirection;
    private int filterDirection;


    /**
    /**
@@ -92,7 +92,7 @@ public final class QosFilter implements Parcelable {
     */
     */
    private int precedence;
    private int precedence;


    QosFilter() {
    QosBearerFilter() {
        localAddresses = new ArrayList<>();
        localAddresses = new ArrayList<>();
        remoteAddresses = new ArrayList<>();
        remoteAddresses = new ArrayList<>();
        localPort = new PortRange();
        localPort = new PortRange();
@@ -101,7 +101,7 @@ public final class QosFilter implements Parcelable {
        filterDirection = QOS_FILTER_DIRECTION_BIDIRECTIONAL;
        filterDirection = QOS_FILTER_DIRECTION_BIDIRECTIONAL;
    }
    }


    public QosFilter(List<LinkAddress> localAddresses, List<LinkAddress> remoteAddresses,
    public QosBearerFilter(List<LinkAddress> localAddresses, List<LinkAddress> remoteAddresses,
            PortRange localPort, PortRange remotePort, int protocol, int tos,
            PortRange localPort, PortRange remotePort, int protocol, int tos,
            long flowLabel, long spi, int direction, int precedence) {
            long flowLabel, long spi, int direction, int precedence) {
        this.localAddresses = localAddresses;
        this.localAddresses = localAddresses;
@@ -116,10 +116,30 @@ public final class QosFilter implements Parcelable {
        this.precedence = precedence;
        this.precedence = precedence;
    }
    }


    public List<LinkAddress> getLocalAddresses() {
        return localAddresses;
    }

    public List<LinkAddress> getRemoteAddresses() {
        return remoteAddresses;
    }

    public PortRange getLocalPortRange() {
        return localPort;
    }

    public PortRange getRemotePortRange() {
        return remotePort;
    }

    public int getPrecedence() {
        return precedence;
    }

    /** @hide */
    /** @hide */
    public static @NonNull QosFilter create(
    public static @NonNull QosBearerFilter create(
            @NonNull android.hardware.radio.V1_6.QosFilter qosFilter) {
            @NonNull android.hardware.radio.V1_6.QosFilter qosFilter) {
        QosFilter ret = new QosFilter();
        QosBearerFilter ret = new QosBearerFilter();


        String[] localAddresses = qosFilter.localAddresses.stream().toArray(String[]::new);
        String[] localAddresses = qosFilter.localAddresses.stream().toArray(String[]::new);
        if (localAddresses != null) {
        if (localAddresses != null) {
@@ -202,6 +222,14 @@ public final class QosFilter implements Parcelable {
            this.end = end;
            this.end = end;
        }
        }


        public int getStart() {
            return start;
        }

        public int getEnd() {
            return end;
        }

        @Override
        @Override
        public void writeToParcel(@NonNull Parcel dest, int flags) {
        public void writeToParcel(@NonNull Parcel dest, int flags) {
            dest.writeInt(start);
            dest.writeInt(start);
@@ -254,7 +282,7 @@ public final class QosFilter implements Parcelable {


    @Override
    @Override
    public String toString() {
    public String toString() {
        return "QosFilter {"
        return "QosBearerFilter {"
                + " localAddresses=" + localAddresses
                + " localAddresses=" + localAddresses
                + " remoteAddresses=" + remoteAddresses
                + " remoteAddresses=" + remoteAddresses
                + " localPort=" + localPort
                + " localPort=" + localPort
@@ -278,11 +306,11 @@ public final class QosFilter implements Parcelable {
    public boolean equals(Object o) {
    public boolean equals(Object o) {
        if (this == o) return true;
        if (this == o) return true;


        if (o == null || !(o instanceof QosFilter)) {
        if (o == null || !(o instanceof QosBearerFilter)) {
            return false;
            return false;
        }
        }


        QosFilter other = (QosFilter) o;
        QosBearerFilter other = (QosBearerFilter) o;


        return localAddresses.size() == other.localAddresses.size()
        return localAddresses.size() == other.localAddresses.size()
                && localAddresses.containsAll(other.localAddresses)
                && localAddresses.containsAll(other.localAddresses)
@@ -324,7 +352,7 @@ public final class QosFilter implements Parcelable {
                LinkAddress.LIFETIME_UNKNOWN, LinkAddress.LIFETIME_UNKNOWN);
                LinkAddress.LIFETIME_UNKNOWN, LinkAddress.LIFETIME_UNKNOWN);
    }
    }


    private QosFilter(Parcel source) {
    private QosBearerFilter(Parcel source) {
        localAddresses = new ArrayList<>();
        localAddresses = new ArrayList<>();
        source.readList(localAddresses, LinkAddress.class.getClassLoader());
        source.readList(localAddresses, LinkAddress.class.getClassLoader());
        remoteAddresses = new ArrayList<>();
        remoteAddresses = new ArrayList<>();
@@ -358,16 +386,16 @@ public final class QosFilter implements Parcelable {
        return 0;
        return 0;
    }
    }


    public static final @NonNull Parcelable.Creator<QosFilter> CREATOR =
    public static final @NonNull Parcelable.Creator<QosBearerFilter> CREATOR =
            new Parcelable.Creator<QosFilter>() {
            new Parcelable.Creator<QosBearerFilter>() {
                @Override
                @Override
                public QosFilter createFromParcel(Parcel source) {
                public QosBearerFilter createFromParcel(Parcel source) {
                    return new QosFilter(source);
                    return new QosBearerFilter(source);
                }
                }


                @Override
                @Override
                public QosFilter[] newArray(int size) {
                public QosBearerFilter[] newArray(int size) {
                    return new QosFilter[size];
                    return new QosBearerFilter[size];
                }
                }
            };
            };
}
}
+137 −0
Original line number Original line Diff line number Diff line
@@ -30,50 +30,62 @@ import java.util.Objects;
 *
 *
 * @hide
 * @hide
 */
 */
public final class QosSession implements Parcelable{
public final class QosBearerSession implements Parcelable{


    final int qosSessionId;
    final int qosBearerSessionId;
    final Qos qos;
    final Qos qos;
    final List<QosFilter> qosFilterList;
    final List<QosBearerFilter> qosBearerFilterList;


    public QosSession(int qosSessionId, @NonNull Qos qos, @NonNull List<QosFilter> qosFilterList) {
    public QosBearerSession(int qosBearerSessionId, @NonNull Qos qos, @NonNull List<QosBearerFilter> qosBearerFilterList) {
        this.qosSessionId = qosSessionId;
        this.qosBearerSessionId = qosBearerSessionId;
        this.qos = qos;
        this.qos = qos;
        this.qosFilterList = qosFilterList;
        this.qosBearerFilterList = qosBearerFilterList;
    }
    }


    private QosSession(Parcel source) {
    private QosBearerSession(Parcel source) {
        qosSessionId = source.readInt();
        qosBearerSessionId = source.readInt();
        qos = source.readParcelable(Qos.class.getClassLoader());
        qos = source.readParcelable(Qos.class.getClassLoader());
        qosFilterList = new ArrayList<>();
        qosBearerFilterList = new ArrayList<>();
        source.readList(qosFilterList, QosFilter.class.getClassLoader());
        source.readList(qosBearerFilterList, QosBearerFilter.class.getClassLoader());
    }

    public int getQosBearerSessionId() {
        return qosBearerSessionId;
    }

    public Qos getQos() {
        return qos;
    }

    public List<QosBearerFilter> getQosBearerFilterList() {
        return qosBearerFilterList;
    }
    }


    @Override
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(qosSessionId);
        dest.writeInt(qosBearerSessionId);
        if (qos.getType() == Qos.QOS_TYPE_EPS) {
        if (qos.getType() == Qos.QOS_TYPE_EPS) {
            dest.writeParcelable((EpsQos)qos, flags);
            dest.writeParcelable((EpsQos)qos, flags);
        } else {
        } else {
            dest.writeParcelable((NrQos)qos, flags);
            dest.writeParcelable((NrQos)qos, flags);
        }
        }
        dest.writeList(qosFilterList);
        dest.writeList(qosBearerFilterList);
    }
    }


    public static @NonNull QosSession create(
    public static @NonNull QosBearerSession create(
            @NonNull android.hardware.radio.V1_6.QosSession qosSession) {
            @NonNull android.hardware.radio.V1_6.QosSession qosSession) {
        List<QosFilter> qosFilters = new ArrayList<>();
        List<QosBearerFilter> qosBearerFilters = new ArrayList<>();


        if (qosSession.qosFilters != null) {
        if (qosSession.qosFilters != null) {
            for (android.hardware.radio.V1_6.QosFilter filter : qosSession.qosFilters) {
            for (android.hardware.radio.V1_6.QosFilter filter : qosSession.qosFilters) {
                qosFilters.add(QosFilter.create(filter));
                qosBearerFilters.add(QosBearerFilter.create(filter));
            }
            }
        }
        }


        return new QosSession(
        return new QosBearerSession(
                        qosSession.qosSessionId,
                        qosSession.qosSessionId,
                        Qos.create(qosSession.qos),
                        Qos.create(qosSession.qos),
                        qosFilters);
                        qosBearerFilters);
    }
    }


    @Override
    @Override
@@ -83,43 +95,43 @@ public final class QosSession implements Parcelable{


    @Override
    @Override
    public String toString() {
    public String toString() {
        return "QosSession {"
        return "QosBearerSession {"
                + " qosSessionId=" + qosSessionId
                + " qosBearerSessionId=" + qosBearerSessionId
                + " qos=" + qos
                + " qos=" + qos
                + " qosFilterList=" + qosFilterList + "}";
                + " qosBearerFilterList=" + qosBearerFilterList + "}";
    }
    }


    @Override
    @Override
    public int hashCode() {
    public int hashCode() {
        return Objects.hash(qosSessionId, qos, qosFilterList);
        return Objects.hash(qosBearerSessionId, qos, qosBearerFilterList);
    }
    }


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


        if (o == null || !(o instanceof QosSession)) {
        if (o == null || !(o instanceof QosBearerSession)) {
            return false;
            return false;
        }
        }


        QosSession other = (QosSession) o;
        QosBearerSession other = (QosBearerSession) o;
        return this.qosSessionId == other.qosSessionId
        return this.qosBearerSessionId == other.qosBearerSessionId
                && this.qos.equals(other.qos)
                && this.qos.equals(other.qos)
                && this.qosFilterList.size() == other.qosFilterList.size()
                && this.qosBearerFilterList.size() == other.qosBearerFilterList.size()
                && this.qosFilterList.containsAll(other.qosFilterList);
                && this.qosBearerFilterList.containsAll(other.qosBearerFilterList);
    }
    }




    public static final @NonNull Parcelable.Creator<QosSession> CREATOR =
    public static final @NonNull Parcelable.Creator<QosBearerSession> CREATOR =
            new Parcelable.Creator<QosSession>() {
            new Parcelable.Creator<QosBearerSession>() {
                @Override
                @Override
                public QosSession createFromParcel(Parcel source) {
                public QosBearerSession createFromParcel(Parcel source) {
                    return new QosSession(source);
                    return new QosBearerSession(source);
                }
                }


                @Override
                @Override
                public QosSession[] newArray(int size) {
                public QosBearerSession[] newArray(int size) {
                    return new QosSession[size];
                    return new QosBearerSession[size];
                }
                }
            };
            };
}
}
Loading