All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.android.telephony.data.Qos Maven / Gradle / Ivy

/**
 * 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 CREATOR =
                new Parcelable.Creator() {
                    @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);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy