blob: c286c6217450dd1aeb1de84c2a11779137f5860a [file] [log] [blame]
/**
* 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.CallSuper;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
/**
* Class that stores information specific to QOS.
*
* @hide
*/
public abstract class Qos {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = "QOS_TYPE_",
value = {QOS_TYPE_EPS, QOS_TYPE_NR})
public @interface QosType {}
@QosType
final int type;
static final int QOS_TYPE_EPS = 1;
static final int QOS_TYPE_NR = 2;
final QosBandwidth downlink;
final QosBandwidth uplink;
Qos(int type,
@NonNull android.hardware.radio.V1_6.QosBandwidth downlink,
@NonNull android.hardware.radio.V1_6.QosBandwidth uplink) {
this.type = type;
this.downlink = new QosBandwidth(downlink.maxBitrateKbps, downlink.guaranteedBitrateKbps);
this.uplink = new QosBandwidth(uplink.maxBitrateKbps, uplink.guaranteedBitrateKbps);
}
public QosBandwidth getDownlinkBandwidth() {
return downlink;
}
public QosBandwidth getUplinkBandwidth() {
return uplink;
}
public static class QosBandwidth implements Parcelable {
int maxBitrateKbps;
int guaranteedBitrateKbps;
QosBandwidth() {
}
QosBandwidth(int maxBitrateKbps, int guaranteedBitrateKbps) {
this.maxBitrateKbps = maxBitrateKbps;
this.guaranteedBitrateKbps = guaranteedBitrateKbps;
}
private QosBandwidth(Parcel source) {
maxBitrateKbps = source.readInt();
guaranteedBitrateKbps = source.readInt();
}
public int getMaxBitrateKbps() {
return maxBitrateKbps;
}
public int getGuaranteedBitrateKbps() {
return guaranteedBitrateKbps;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(maxBitrateKbps);
dest.writeInt(guaranteedBitrateKbps);
}
@Override
public int describeContents() {
return 0;
}
@Override
public int hashCode() {
return Objects.hash(maxBitrateKbps, guaranteedBitrateKbps);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof QosBandwidth)) {
return false;
}
QosBandwidth other = (QosBandwidth) o;
return maxBitrateKbps == other.maxBitrateKbps
&& guaranteedBitrateKbps == other.guaranteedBitrateKbps;
}
@Override
public String toString() {
return "Bandwidth {"
+ " maxBitrateKbps=" + maxBitrateKbps
+ " guaranteedBitrateKbps=" + guaranteedBitrateKbps + "}";
}
public static final @NonNull Parcelable.Creator<QosBandwidth> CREATOR =
new Parcelable.Creator<QosBandwidth>() {
@Override
public QosBandwidth createFromParcel(Parcel source) {
return new QosBandwidth(source);
}
@Override
public QosBandwidth[] newArray(int size) {
return new QosBandwidth[size];
}
};
};
protected Qos(@NonNull Parcel source) {
type = source.readInt();
downlink = source.readParcelable(QosBandwidth.class.getClassLoader());
uplink = source.readParcelable(QosBandwidth.class.getClassLoader());
}
/**
* Used by child classes for parceling.
*
* @hide
*/
@CallSuper
public void writeToParcel(@QosType int type, Parcel dest, int flags) {
dest.writeInt(type);
dest.writeParcelable(downlink, flags);
dest.writeParcelable(uplink, flags);
}
/** @hide */
public static @NonNull Qos create(@NonNull android.hardware.radio.V1_6.Qos qos) {
switch (qos.getDiscriminator()) {
case android.hardware.radio.V1_6.Qos.hidl_discriminator.eps:
return new EpsQos(qos.eps());
case android.hardware.radio.V1_6.Qos.hidl_discriminator.nr:
return new NrQos(qos.nr());
default:
return null;
}
}
/** @hide */
public @QosType int getType() {
return type;
}
@Override
public int hashCode() {
return Objects.hash(downlink, uplink);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
Qos other = (Qos) o;
return type == other.type
&& downlink.equals(other.downlink)
&& uplink.equals(other.uplink);
}
}