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

Commit 8f62aa3c authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju
Browse files

Support Hysteresis Db settings

- Expose setHysteresisDb api as System Api to support Hysteresis Db
  value setting from client
- Introduce hysteresis db values for each of the AccessNetwork
  measurement type

Bug: 248861663
Bug: 260534777
Bug: 240215633
CTS-Coverage-Bug: 260534777
Test: manual & atest FrameworksTelephonyTests
Change-Id: I491fea99569ef3eb610f19ae71342a5ff838d8f0
parent 3e42e784
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -43675,6 +43675,7 @@ package android.telephony {
  public final class SignalThresholdInfo implements android.os.Parcelable {
    method public int describeContents();
    method public int getHysteresisDb();
    method public static int getMaximumNumberOfThresholdsAllowed();
    method public static int getMinimumNumberOfThresholdsAllowed();
    method public int getRadioAccessNetworkType();
@@ -43697,6 +43698,7 @@ package android.telephony {
  public static final class SignalThresholdInfo.Builder {
    ctor public SignalThresholdInfo.Builder();
    method @NonNull public android.telephony.SignalThresholdInfo build();
    method @NonNull public android.telephony.SignalThresholdInfo.Builder setHysteresisDb(@IntRange(from=0) int);
    method @NonNull public android.telephony.SignalThresholdInfo.Builder setRadioAccessNetworkType(int);
    method @NonNull public android.telephony.SignalThresholdInfo.Builder setSignalMeasurementType(int);
    method @NonNull public android.telephony.SignalThresholdInfo.Builder setThresholds(@NonNull int[]);
+104 −0
Original line number Diff line number Diff line
@@ -2987,6 +2987,39 @@ public class CarrierConfigManager {
    public static final String KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY =
            "5g_nr_sssinr_thresholds_int_array";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_SSRSRP} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String
            KEY_NGRAN_SSRSRP_HYSTERESIS_DB_INT = "ngran_ssrsrp_hysteresis_db_int";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_SSRSRQ} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     *@hide
     */
    public static final String
            KEY_NGRAN_SSRSRQ_HYSTERESIS_DB_INT = "ngran_ssrsrq_hysteresis_db_int";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_SSSINR} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String
            KEY_NGRAN_SSSINR_HYSTERESIS_DB_INT = "ngran_sssinr_hysteresis_db_int";

    /**
     * Bit-field integer to determine whether to use SS reference signal received power (SSRSRP),
     * SS reference signal received quality (SSRSRQ), or/and SS signal-to-noise and interference
@@ -3323,6 +3356,38 @@ public class CarrierConfigManager {
    public static final String KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY =
            "lte_rssnr_thresholds_int_array";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_RSRP} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String
            KEY_EUTRAN_RSRP_HYSTERESIS_DB_INT = "eutran_rsrp_hysteresis_db_int";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_RSRQ} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String KEY_EUTRAN_RSRQ_HYSTERESIS_DB_INT = "eutran_rsrq_hysteresis_db_int";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_RSSNR} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String
            KEY_EUTRAN_RSSNR_HYSTERESIS_DB_INT = "eutran_rssnr_hysteresis_db_int";

    /**
     * Decides when clients try to bind to iwlan network service, which package name will
     * the binding intent go to.
@@ -3399,6 +3464,26 @@ public class CarrierConfigManager {
    public static final String KEY_WCDMA_ECNO_THRESHOLDS_INT_ARRAY =
            "wcdma_ecno_thresholds_int_array";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_RSCP} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String KEY_UTRAN_RSCP_HYSTERESIS_DB_INT = "utran_rscp_hysteresis_db_int";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_ECNO} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String KEY_UTRAN_ECNO_HYSTERESIS_DB_INT = "utran_ecno_hysteresis_db_int";

    /**
     * The default measurement to use for signal strength reporting. If this is not specified, the
     * RSSI is used.
@@ -8683,6 +8768,16 @@ public class CarrierConfigManager {
    public static final String KEY_GSM_RSSI_THRESHOLDS_INT_ARRAY =
            "gsm_rssi_thresholds_int_array";

    /**
     * An interval in dB for {@link SignalThresholdInfo#SIGNAL_MEASUREMENT_TYPE_RSSI} measurement
     * type defining the required magnitude change between reports.
     *
     * <p>The default value is 2 and the minimum allowed value is 0. If no value or negative value
     * is set, the default value 2 is used.
     * @hide
     */
    public static final String KEY_GERAN_RSSI_HYSTERESIS_DB_INT = "geran_rssi_hysteresis_db_int";

    /**
     * Determines whether Wireless Priority Service call is supported over IMS.
     *
@@ -9664,6 +9759,15 @@ public class CarrierConfigManager {
                    15, /* SIGNAL_STRENGTH_GOOD */
                    30  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putInt(KEY_GERAN_RSSI_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_UTRAN_RSCP_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_EUTRAN_RSRP_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_EUTRAN_RSRQ_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_EUTRAN_RSSNR_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_NGRAN_SSRSRP_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_NGRAN_SSRSRQ_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_NGRAN_SSSINR_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_UTRAN_ECNO_HYSTERESIS_DB_INT, 2);
        sDefaults.putInt(KEY_PARAMETERS_USE_FOR_5G_NR_SIGNAL_BAR_INT,
                CellSignalStrengthNr.USE_SSRSRP);
        sDefaults.putBoolean(KEY_SIGNAL_STRENGTH_NR_NSA_USE_LTE_AS_PRIMARY_BOOL, true);
+49 −20
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.telephony;

import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
@@ -169,11 +170,18 @@ public final class SignalThresholdInfo implements Parcelable {
    public static final int HYSTERESIS_MS_DISABLED = 0;

    /**
     * Indicates the hysteresisDb is disabled.
     * Indicates the default hysteresis value in dB.
     *
     * @hide
     */
    public static final int HYSTERESIS_DB_DISABLED = 0;
    private static final int HYSTERESIS_DB_DEFAULT = 2;

    /**
     * Indicates the hysteresisDb value is not set and to be initialised to default value.
     *
     * @hide
     */
    public static final int HYSTERESIS_DB_MINIMUM = 0;

    /**
     * Minimum valid value for {@link #SIGNAL_MEASUREMENT_TYPE_RSSI}.
@@ -339,7 +347,7 @@ public final class SignalThresholdInfo implements Parcelable {
        mRan = ran;
        mSignalMeasurementType = signalMeasurementType;
        mHysteresisMs = hysteresisMs < 0 ? HYSTERESIS_MS_DISABLED : hysteresisMs;
        mHysteresisDb = hysteresisDb < 0 ? HYSTERESIS_DB_DISABLED : hysteresisDb;
        mHysteresisDb = hysteresisDb;
        mThresholds = thresholds;
        mIsEnabled = isEnabled;
    }
@@ -351,7 +359,7 @@ public final class SignalThresholdInfo implements Parcelable {
        private int mRan = AccessNetworkConstants.AccessNetworkType.UNKNOWN;
        private int mSignalMeasurementType = SIGNAL_MEASUREMENT_TYPE_UNKNOWN;
        private int mHysteresisMs = HYSTERESIS_MS_DISABLED;
        private int mHysteresisDb = HYSTERESIS_DB_DISABLED;
        private int mHysteresisDb = HYSTERESIS_DB_DEFAULT;
        private int[] mThresholds = null;
        private boolean mIsEnabled = false;

@@ -361,7 +369,8 @@ public final class SignalThresholdInfo implements Parcelable {
         * @param ran The radio access network type
         * @return the builder to facilitate the chaining
         */
        public @NonNull Builder setRadioAccessNetworkType(
        @NonNull
        public Builder setRadioAccessNetworkType(
                @AccessNetworkConstants.RadioAccessNetworkType int ran) {
            mRan = ran;
            return this;
@@ -373,7 +382,8 @@ public final class SignalThresholdInfo implements Parcelable {
         * @param signalMeasurementType The signal measurement type
         * @return the builder to facilitate the chaining
         */
        public @NonNull Builder setSignalMeasurementType(
        @NonNull
        public Builder setSignalMeasurementType(
                @SignalMeasurementType int signalMeasurementType) {
            mSignalMeasurementType = signalMeasurementType;
            return this;
@@ -387,20 +397,27 @@ public final class SignalThresholdInfo implements Parcelable {
         * @return the builder to facilitate the chaining
         * @hide
         */
        public @NonNull Builder setHysteresisMs(int hysteresisMs) {
        @NonNull
        public Builder setHysteresisMs(int hysteresisMs) {
            mHysteresisMs = hysteresisMs;
            return this;
        }

        /**
         * Set the interval in dB defining the required magnitude change between reports. A value of
         * zero disabled dB-based hysteresis restrictions.
         * Set the interval in dB defining the required minimum magnitude change to report a
         * signal strength change. A value of zero disables dB-based hysteresis restrictions.
         * Note:
         * <p>Default hysteresis db value is 2. Minimum hysteresis db value allowed to set is 0.
         * If hysteresis db value is not set, default hysteresis db value of 2 will be used.
         *
         * @param hysteresisDb the interval in dB
         * @return the builder to facilitate the chaining
         * @hide
         */
        public @NonNull Builder setHysteresisDb(int hysteresisDb) {
        @NonNull
        public Builder setHysteresisDb(@IntRange(from = 0) int hysteresisDb) {
            if (hysteresisDb < 0) {
                throw new IllegalArgumentException("hysteresis db value should not be less than 0");
            }
            mHysteresisDb = hysteresisDb;
            return this;
        }
@@ -428,7 +445,8 @@ public final class SignalThresholdInfo implements Parcelable {
         * @see #SIGNAL_MEASUREMENT_TYPE_ECNO
         * @see #getThresholds() for more details on signal strength thresholds
         */
        public @NonNull Builder setThresholds(@NonNull int[] thresholds) {
        @NonNull
        public Builder setThresholds(@NonNull int[] thresholds) {
            return setThresholds(thresholds, false /*isSystem*/);
        }

@@ -442,7 +460,8 @@ public final class SignalThresholdInfo implements Parcelable {
         *
         * @hide
         */
        public @NonNull Builder setThresholds(@NonNull int[] thresholds, boolean isSystem) {
        @NonNull
        public Builder setThresholds(@NonNull int[] thresholds, boolean isSystem) {
            Objects.requireNonNull(thresholds, "thresholds must not be null");
            if (!isSystem
                    && (thresholds.length < MINIMUM_NUMBER_OF_THRESHOLDS_ALLOWED
@@ -465,7 +484,8 @@ public final class SignalThresholdInfo implements Parcelable {
         * @return the builder to facilitate the chaining
         * @hide
         */
        public @NonNull Builder setIsEnabled(boolean isEnabled) {
        @NonNull
        public Builder setIsEnabled(boolean isEnabled) {
            mIsEnabled = isEnabled;
            return this;
        }
@@ -479,7 +499,8 @@ public final class SignalThresholdInfo implements Parcelable {
         * the thresholds is out of range, or the RAN is not allowed to set with the signal
         * measurement type
         */
        public @NonNull SignalThresholdInfo build() {
        @NonNull
        public SignalThresholdInfo build() {
            return new SignalThresholdInfo(
                    mRan,
                    mSignalMeasurementType,
@@ -495,7 +516,8 @@ public final class SignalThresholdInfo implements Parcelable {
     *
     * @return radio access network type
     */
    public @AccessNetworkConstants.RadioAccessNetworkType int getRadioAccessNetworkType() {
    @AccessNetworkConstants.RadioAccessNetworkType
    public int getRadioAccessNetworkType() {
        return mRan;
    }

@@ -504,7 +526,8 @@ public final class SignalThresholdInfo implements Parcelable {
     *
     * @return the SignalMeasurementType value
     */
    public @SignalMeasurementType int getSignalMeasurementType() {
    @SignalMeasurementType
    public int getSignalMeasurementType() {
        return mSignalMeasurementType;
    }

@@ -513,7 +536,11 @@ public final class SignalThresholdInfo implements Parcelable {
        return mHysteresisMs;
    }

    /** @hide */
    /**
     * Get measurement hysteresis db.
     *
     * @return hysteresis db value
     */
    public int getHysteresisDb() {
        return mHysteresisDb;
    }
@@ -544,7 +571,8 @@ public final class SignalThresholdInfo implements Parcelable {
     * @see #SIGNAL_MEASUREMENT_TYPE_SSSINR
     * @see #SIGNAL_MEASUREMENT_TYPE_ECNO
     */
    public @NonNull int[] getThresholds() {
    @NonNull
    public int[] getThresholds() {
        return mThresholds.clone();
    }

@@ -618,7 +646,8 @@ public final class SignalThresholdInfo implements Parcelable {
                mIsEnabled);
    }

    public static final @NonNull Parcelable.Creator<SignalThresholdInfo> CREATOR =
    @NonNull
    public static final Parcelable.Creator<SignalThresholdInfo> CREATOR =
            new Parcelable.Creator<SignalThresholdInfo>() {
                @Override
                public SignalThresholdInfo createFromParcel(Parcel in) {