Merge "Add QoS filter matching and unit tests" am: 1e8b0527b5

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1610961

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Icb205b790346fdd2706f1ee7427c4b4e76321552
This commit is contained in:
Treehugger Robot
2021-03-02 23:19:34 +00:00
committed by Automerger Merge Worker
6 changed files with 225 additions and 164 deletions

View File

@@ -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());
} }
@@ -393,8 +393,8 @@ public final class DataCallResponse implements Parcelable {
* @hide * @hide
*/ */
@NonNull @NonNull
public List<QosSession> getQosSessions() { public List<QosBearerSession> getQosBearerSessions() {
return mQosSessions; return mQosBearerSessions;
} }
/** /**
@@ -426,7 +426,7 @@ public final class DataCallResponse implements Parcelable {
.append(" handoverFailureMode=").append(getHandoverFailureMode()) .append(" handoverFailureMode=").append(getHandoverFailureMode())
.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();
@@ -446,10 +446,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
@@ -471,7 +471,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);
} }
@@ -480,7 +480,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
@@ -510,7 +510,7 @@ public final class DataCallResponse implements Parcelable {
} else { } else {
dest.writeParcelable((NrQos)mDefaultQos, flags); dest.writeParcelable((NrQos)mDefaultQos, flags);
} }
dest.writeList(mQosSessions); dest.writeList(mQosBearerSessions);
dest.writeParcelable(mSliceInfo, flags); dest.writeParcelable(mSliceInfo, flags);
} }
@@ -593,7 +593,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;
@@ -807,15 +807,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;
} }
@@ -843,7 +844,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);
} }
} }
} }

View File

@@ -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);
} }

View File

@@ -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);

View File

@@ -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];
} }
}; };
} }

View File

@@ -0,0 +1,137 @@
/**
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.telephony.data;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Class that stores information specific to QOS session.
*
* @hide
*/
public final class QosBearerSession implements Parcelable{
final int qosBearerSessionId;
final Qos qos;
final List<QosBearerFilter> qosBearerFilterList;
public QosBearerSession(int qosBearerSessionId, @NonNull Qos qos, @NonNull List<QosBearerFilter> qosBearerFilterList) {
this.qosBearerSessionId = qosBearerSessionId;
this.qos = qos;
this.qosBearerFilterList = qosBearerFilterList;
}
private QosBearerSession(Parcel source) {
qosBearerSessionId = source.readInt();
qos = source.readParcelable(Qos.class.getClassLoader());
qosBearerFilterList = new ArrayList<>();
source.readList(qosBearerFilterList, QosBearerFilter.class.getClassLoader());
}
public int getQosBearerSessionId() {
return qosBearerSessionId;
}
public Qos getQos() {
return qos;
}
public List<QosBearerFilter> getQosBearerFilterList() {
return qosBearerFilterList;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(qosBearerSessionId);
if (qos.getType() == Qos.QOS_TYPE_EPS) {
dest.writeParcelable((EpsQos)qos, flags);
} else {
dest.writeParcelable((NrQos)qos, flags);
}
dest.writeList(qosBearerFilterList);
}
public static @NonNull QosBearerSession create(
@NonNull android.hardware.radio.V1_6.QosSession qosSession) {
List<QosBearerFilter> qosBearerFilters = new ArrayList<>();
if (qosSession.qosFilters != null) {
for (android.hardware.radio.V1_6.QosFilter filter : qosSession.qosFilters) {
qosBearerFilters.add(QosBearerFilter.create(filter));
}
}
return new QosBearerSession(
qosSession.qosSessionId,
Qos.create(qosSession.qos),
qosBearerFilters);
}
@Override
public int describeContents() {
return 0;
}
@Override
public String toString() {
return "QosBearerSession {"
+ " qosBearerSessionId=" + qosBearerSessionId
+ " qos=" + qos
+ " qosBearerFilterList=" + qosBearerFilterList + "}";
}
@Override
public int hashCode() {
return Objects.hash(qosBearerSessionId, qos, qosBearerFilterList);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof QosBearerSession)) {
return false;
}
QosBearerSession other = (QosBearerSession) o;
return this.qosBearerSessionId == other.qosBearerSessionId
&& this.qos.equals(other.qos)
&& this.qosBearerFilterList.size() == other.qosBearerFilterList.size()
&& this.qosBearerFilterList.containsAll(other.qosBearerFilterList);
}
public static final @NonNull Parcelable.Creator<QosBearerSession> CREATOR =
new Parcelable.Creator<QosBearerSession>() {
@Override
public QosBearerSession createFromParcel(Parcel source) {
return new QosBearerSession(source);
}
@Override
public QosBearerSession[] newArray(int size) {
return new QosBearerSession[size];
}
};
}

View File

@@ -1,125 +0,0 @@
/**
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.telephony.data;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Class that stores information specific to QOS session.
*
* @hide
*/
public final class QosSession implements Parcelable{
final int qosSessionId;
final Qos qos;
final List<QosFilter> qosFilterList;
public QosSession(int qosSessionId, @NonNull Qos qos, @NonNull List<QosFilter> qosFilterList) {
this.qosSessionId = qosSessionId;
this.qos = qos;
this.qosFilterList = qosFilterList;
}
private QosSession(Parcel source) {
qosSessionId = source.readInt();
qos = source.readParcelable(Qos.class.getClassLoader());
qosFilterList = new ArrayList<>();
source.readList(qosFilterList, QosFilter.class.getClassLoader());
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(qosSessionId);
if (qos.getType() == Qos.QOS_TYPE_EPS) {
dest.writeParcelable((EpsQos)qos, flags);
} else {
dest.writeParcelable((NrQos)qos, flags);
}
dest.writeList(qosFilterList);
}
public static @NonNull QosSession create(
@NonNull android.hardware.radio.V1_6.QosSession qosSession) {
List<QosFilter> qosFilters = new ArrayList<>();
if (qosSession.qosFilters != null) {
for (android.hardware.radio.V1_6.QosFilter filter : qosSession.qosFilters) {
qosFilters.add(QosFilter.create(filter));
}
}
return new QosSession(
qosSession.qosSessionId,
Qos.create(qosSession.qos),
qosFilters);
}
@Override
public int describeContents() {
return 0;
}
@Override
public String toString() {
return "QosSession {"
+ " qosSessionId=" + qosSessionId
+ " qos=" + qos
+ " qosFilterList=" + qosFilterList + "}";
}
@Override
public int hashCode() {
return Objects.hash(qosSessionId, qos, qosFilterList);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof QosSession)) {
return false;
}
QosSession other = (QosSession) o;
return this.qosSessionId == other.qosSessionId
&& this.qos.equals(other.qos)
&& this.qosFilterList.size() == other.qosFilterList.size()
&& this.qosFilterList.containsAll(other.qosFilterList);
}
public static final @NonNull Parcelable.Creator<QosSession> CREATOR =
new Parcelable.Creator<QosSession>() {
@Override
public QosSession createFromParcel(Parcel source) {
return new QosSession(source);
}
@Override
public QosSession[] newArray(int size) {
return new QosSession[size];
}
};
}