From dad385ae29e13a04500fd698e585f933cd352e53 Mon Sep 17 00:00:00 2001 From: Kitta Koutarou Date: Fri, 1 Dec 2017 19:19:49 +0900 Subject: [PATCH] Make LTE signal bar thresholds customizable with carrier configuration Move config_lteDbmThresholds to KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY to control the LTE signal bar thresholds by carrier configuration. Test: manual - Checked that the LTE signal bar thresholds can be controlled by carrier config. Test: auto - Confirmed that run ServiceStateTrackerTest#testSignalStrength and it has no problem. Bug: 70698348 Change-Id: Ia613663956ff00fbf299dcf69113733eae5a3458 Merged-In: Ia613663956ff00fbf299dcf69113733eae5a3458 --- core/res/res/values-mcc204-mnc04/config.xml | 10 -- core/res/res/values-mcc311-mnc480/config.xml | 10 -- core/res/res/values-mcc505-mnc01/config.xml | 10 -- core/res/res/values-mcc505-mnc11/config.xml | 32 ------- core/res/res/values-mcc505-mnc71/config.xml | 32 ------- core/res/res/values-mcc505-mnc72/config.xml | 32 ------- core/res/res/values/config.xml | 11 +-- core/res/res/values/symbols.xml | 3 - .../telephony/CarrierConfigManager.java | 16 ++++ .../android/telephony/SignalStrength.java | 94 ++++++++++++++----- 10 files changed, 89 insertions(+), 161 deletions(-) delete mode 100644 core/res/res/values-mcc505-mnc11/config.xml delete mode 100644 core/res/res/values-mcc505-mnc71/config.xml delete mode 100644 core/res/res/values-mcc505-mnc72/config.xml diff --git a/core/res/res/values-mcc204-mnc04/config.xml b/core/res/res/values-mcc204-mnc04/config.xml index c66ed121f9efb..4a3bf22d61db5 100755 --- a/core/res/res/values-mcc204-mnc04/config.xml +++ b/core/res/res/values-mcc204-mnc04/config.xml @@ -25,15 +25,5 @@ --> 1358 - - - -140 - -115 - -105 - -95 - -85 - -44 - - true;BAE0000000000000 diff --git a/core/res/res/values-mcc311-mnc480/config.xml b/core/res/res/values-mcc311-mnc480/config.xml index 04f182e1a92c6..cc7daa8efec62 100755 --- a/core/res/res/values-mcc311-mnc480/config.xml +++ b/core/res/res/values-mcc311-mnc480/config.xml @@ -51,16 +51,6 @@ false - - - -140 - -115 - -105 - -95 - -85 - -44 - - true true diff --git a/core/res/res/values-mcc505-mnc01/config.xml b/core/res/res/values-mcc505-mnc01/config.xml index 5a5b8f78478e4..bc088d1df6401 100644 --- a/core/res/res/values-mcc505-mnc01/config.xml +++ b/core/res/res/values-mcc505-mnc01/config.xml @@ -31,16 +31,6 @@ 9 - - - -140 - -120 - -115 - -100 - -90 - -44 - - 1400 diff --git a/core/res/res/values-mcc505-mnc11/config.xml b/core/res/res/values-mcc505-mnc11/config.xml deleted file mode 100644 index 6d085c1e68b56..0000000000000 --- a/core/res/res/values-mcc505-mnc11/config.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - -140 - -120 - -115 - -100 - -90 - -44 - - diff --git a/core/res/res/values-mcc505-mnc71/config.xml b/core/res/res/values-mcc505-mnc71/config.xml deleted file mode 100644 index 6d085c1e68b56..0000000000000 --- a/core/res/res/values-mcc505-mnc71/config.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - -140 - -120 - -115 - -100 - -90 - -44 - - diff --git a/core/res/res/values-mcc505-mnc72/config.xml b/core/res/res/values-mcc505-mnc72/config.xml deleted file mode 100644 index 6d085c1e68b56..0000000000000 --- a/core/res/res/values-mcc505-mnc72/config.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - -140 - -120 - -115 - -100 - -90 - -44 - - diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 0c2824b7305b2..5cc727d28cd20 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2557,6 +2557,7 @@ false + 1 - - - -140 - -128 - -118 - -108 - -98 - -44 - - countdown diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index ac93361ad9d21..fb755a136033b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2384,9 +2384,6 @@ - - - diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 0c05a025dd456..f59871b00c2aa 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -1738,6 +1738,13 @@ public class CarrierConfigManager { */ public static final String KEY_CARRIER_CONFIG_APPLIED_BOOL = "carrier_config_applied_bool"; + /** + * List of thresholds of RSRP for determining the display level of LTE signal bar. + * @hide + */ + public static final String KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY = + "lte_rsrp_thresholds_int_array"; + /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -2024,6 +2031,15 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_SPN_DISPLAY_RULE_USE_ROAMING_FROM_SERVICE_STATE_BOOL, false); sDefaults.putBoolean(KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL, false); sDefaults.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false); + sDefaults.putIntArray(KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY, + new int[] { + -140, /* SIGNAL_STRENGTH_NONE_OR_UNKNOWN */ + -128, /* SIGNAL_STRENGTH_POOR */ + -118, /* SIGNAL_STRENGTH_MODERATE */ + -108, /* SIGNAL_STRENGTH_GOOD */ + -98, /* SIGNAL_STRENGTH_GREAT */ + -44 + }); } /** diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index de02de7ba17d9..d2134f9c22b51 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -19,9 +19,13 @@ package android.telephony; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; +import android.telephony.CarrierConfigManager; import android.util.Log; import android.content.res.Resources; +import java.util.ArrayList; +import java.util.Arrays; + /** * Contains phone signal strength related information. */ @@ -51,6 +55,8 @@ public class SignalStrength implements Parcelable { //Use int max, as -1 is a valid value in signal strength public static final int INVALID = 0x7FFFFFFF; + private static final int LTE_RSRP_THRESHOLDS_NUM = 6; + private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5 private int mGsmBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5 private int mCdmaDbm; // This value is the RSSI value @@ -70,6 +76,9 @@ public class SignalStrength implements Parcelable { private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult private boolean mUseOnlyRsrpForLteLevel; // Use only RSRP for the number of LTE signal bar. + // The threshold of LTE RSRP for determining the display level of LTE signal bar. + private int mLteRsrpThresholds[] = new int[LTE_RSRP_THRESHOLDS_NUM]; + /** * Create a new SignalStrength from a intent notifier Bundle * @@ -110,6 +119,7 @@ public class SignalStrength implements Parcelable { mTdScdmaRscp = INVALID; isGsm = true; mUseOnlyRsrpForLteLevel = false; + setLteRsrpThresholds(getDefaultLteRsrpThresholds()); } /** @@ -137,6 +147,7 @@ public class SignalStrength implements Parcelable { mTdScdmaRscp = INVALID; isGsm = gsmFlag; mUseOnlyRsrpForLteLevel = false; + setLteRsrpThresholds(getDefaultLteRsrpThresholds()); } /** @@ -276,6 +287,8 @@ public class SignalStrength implements Parcelable { mTdScdmaRscp = INVALID; isGsm = gsm; mUseOnlyRsrpForLteLevel = useOnlyRsrpForLteLevel; + + setLteRsrpThresholds(getDefaultLteRsrpThresholds()); if (DBG) log("initialize: " + toString()); } @@ -299,6 +312,7 @@ public class SignalStrength implements Parcelable { mTdScdmaRscp = s.mTdScdmaRscp; isGsm = s.isGsm; mUseOnlyRsrpForLteLevel = s.mUseOnlyRsrpForLteLevel; + setLteRsrpThresholds(s.mLteRsrpThresholds); } /** @@ -325,6 +339,9 @@ public class SignalStrength implements Parcelable { mTdScdmaRscp = in.readInt(); isGsm = (in.readInt() != 0); mUseOnlyRsrpForLteLevel = (in.readInt() != 0); + for (int i = 0; i < LTE_RSRP_THRESHOLDS_NUM; i++) { + mLteRsrpThresholds[i] = in.readInt(); + } } /** @@ -374,6 +391,9 @@ public class SignalStrength implements Parcelable { out.writeInt(mTdScdmaRscp); out.writeInt(isGsm ? 1 : 0); out.writeInt(mUseOnlyRsrpForLteLevel ? 1 : 0); + for (int i = 0; i < LTE_RSRP_THRESHOLDS_NUM; i++) { + out.writeInt(mLteRsrpThresholds[i]); + } } /** @@ -479,6 +499,22 @@ public class SignalStrength implements Parcelable { mLteRsrpBoost = lteRsrpBoost; } + /** + * Sets the threshold array for determining the display level of LTE signal bar. + * + * @param lteRsrpThresholds int array for determining the display level. + * + * @hide + */ + public void setLteRsrpThresholds(int[] lteRsrpThresholds) { + if ((lteRsrpThresholds == null) + || (lteRsrpThresholds.length != LTE_RSRP_THRESHOLDS_NUM)) { + Log.wtf(LOG_TAG, "setLteRsrpThresholds - lteRsrpThresholds is invalid."); + return; + } + System.arraycopy(lteRsrpThresholds, 0, mLteRsrpThresholds, 0, LTE_RSRP_THRESHOLDS_NUM); + } + /** * Get the GSM Signal Strength, valid values are (0-31, 99) as defined in TS * 27.007 8.5 @@ -833,25 +869,18 @@ public class SignalStrength implements Parcelable { */ int rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN, rsrpIconLevel = -1, snrIconLevel = -1; - int[] threshRsrp = Resources.getSystem().getIntArray( - com.android.internal.R.array.config_lteDbmThresholds); - if (threshRsrp.length != 6) { - Log.wtf(LOG_TAG, "getLteLevel - config_lteDbmThresholds has invalid num of elements." - + " Cannot evaluate RSRP signal."); - } else { - if (mLteRsrp > threshRsrp[5]) { - rsrpIconLevel = -1; - } else if (mLteRsrp >= (threshRsrp[4] - mLteRsrpBoost)) { - rsrpIconLevel = SIGNAL_STRENGTH_GREAT; - } else if (mLteRsrp >= (threshRsrp[3] - mLteRsrpBoost)) { - rsrpIconLevel = SIGNAL_STRENGTH_GOOD; - } else if (mLteRsrp >= (threshRsrp[2] - mLteRsrpBoost)) { - rsrpIconLevel = SIGNAL_STRENGTH_MODERATE; - } else if (mLteRsrp >= (threshRsrp[1] - mLteRsrpBoost)) { - rsrpIconLevel = SIGNAL_STRENGTH_POOR; - } else if (mLteRsrp >= threshRsrp[0]) { - rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; - } + if (mLteRsrp > mLteRsrpThresholds[5]) { + rsrpIconLevel = -1; + } else if (mLteRsrp >= (mLteRsrpThresholds[4] - mLteRsrpBoost)) { + rsrpIconLevel = SIGNAL_STRENGTH_GREAT; + } else if (mLteRsrp >= (mLteRsrpThresholds[3] - mLteRsrpBoost)) { + rsrpIconLevel = SIGNAL_STRENGTH_GOOD; + } else if (mLteRsrp >= (mLteRsrpThresholds[2] - mLteRsrpBoost)) { + rsrpIconLevel = SIGNAL_STRENGTH_MODERATE; + } else if (mLteRsrp >= (mLteRsrpThresholds[1] - mLteRsrpBoost)) { + rsrpIconLevel = SIGNAL_STRENGTH_POOR; + } else if (mLteRsrp >= mLteRsrpThresholds[0]) { + rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; } if (useOnlyRsrpForLteLevel()) { @@ -1010,7 +1039,7 @@ public class SignalStrength implements Parcelable { + (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum) + (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum) + (mLteRsrpBoost * primeNum) + (mTdScdmaRscp * primeNum) + (isGsm ? 1 : 0) - + (mUseOnlyRsrpForLteLevel ? 1 : 0)); + + (mUseOnlyRsrpForLteLevel ? 1 : 0) + (Arrays.hashCode(mLteRsrpThresholds))); } /** @@ -1045,7 +1074,8 @@ public class SignalStrength implements Parcelable { && mLteRsrpBoost == s.mLteRsrpBoost && mTdScdmaRscp == s.mTdScdmaRscp && isGsm == s.isGsm - && mUseOnlyRsrpForLteLevel == s.mUseOnlyRsrpForLteLevel); + && mUseOnlyRsrpForLteLevel == s.mUseOnlyRsrpForLteLevel + && Arrays.equals(mLteRsrpThresholds, s.mLteRsrpThresholds)); } /** @@ -1070,7 +1100,8 @@ public class SignalStrength implements Parcelable { + " " + mTdScdmaRscp + " " + (isGsm ? "gsm|lte" : "cdma") + " " + (mUseOnlyRsrpForLteLevel ? "use_only_rsrp_for_lte_level" : - "use_rsrp_and_rssnr_for_lte_level")); + "use_rsrp_and_rssnr_for_lte_level") + + " " + (Arrays.toString(mLteRsrpThresholds))); } /** Returns the signal strength related to GSM. */ @@ -1126,6 +1157,10 @@ public class SignalStrength implements Parcelable { mTdScdmaRscp = m.getInt("TdScdma"); isGsm = m.getBoolean("isGsm"); mUseOnlyRsrpForLteLevel = m.getBoolean("useOnlyRsrpForLteLevel"); + ArrayList lteRsrpThresholds = m.getIntegerArrayList("lteRsrpThresholds"); + for (int i = 0; i < lteRsrpThresholds.size(); i++) { + mLteRsrpThresholds[i] = lteRsrpThresholds.get(i); + } } /** @@ -1151,6 +1186,21 @@ public class SignalStrength implements Parcelable { m.putInt("TdScdma", mTdScdmaRscp); m.putBoolean("isGsm", isGsm); m.putBoolean("useOnlyRsrpForLteLevel", mUseOnlyRsrpForLteLevel); + ArrayList lteRsrpThresholds = new ArrayList(); + for (int value : mLteRsrpThresholds) { + lteRsrpThresholds.add(value); + } + m.putIntegerArrayList("lteRsrpThresholds", lteRsrpThresholds); + } + + /** + * Gets the default threshold array for determining the display level of LTE signal bar. + * + * @return int array for determining the display level. + */ + private int[] getDefaultLteRsrpThresholds() { + return CarrierConfigManager.getDefaultConfig().getIntArray( + CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY); } /**