Merge "Customize the WCDMA signal strength based on RSCP"
This commit is contained in:
@@ -1841,6 +1841,33 @@ public class CarrierConfigManager {
|
||||
public static final String KEY_CARRIER_NETWORK_SERVICE_WWAN_PACKAGE_OVERRIDE_STRING
|
||||
= "carrier_network_service_wwan_package_override_string";
|
||||
|
||||
/**
|
||||
* A list of 4 LTE RSCP thresholds above which a signal level is considered POOR,
|
||||
* MODERATE, GOOD, or EXCELLENT, to be used in SignalStrength reporting.
|
||||
*
|
||||
* Note that the min and max thresholds are fixed at -120 and -24, as set in 3GPP TS 27.007
|
||||
* section 8.69.
|
||||
* <p>
|
||||
* See SignalStrength#MAX_WCDMA_RSCP and SignalStrength#MIN_WDCMA_RSCP. Any signal level outside
|
||||
* these boundaries is considered invalid.
|
||||
* @hide
|
||||
*/
|
||||
public static final String KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY =
|
||||
"wcdma_rscp_thresholds_int_array";
|
||||
|
||||
/**
|
||||
* The default measurement to use for signal strength reporting. If this is not specified, the
|
||||
* RSSI is used.
|
||||
* <p>
|
||||
* e.g.) To use RSCP by default, set the value to "rscp". The signal strength level will
|
||||
* then be determined by #KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY
|
||||
* <p>
|
||||
* Currently this only supports the value "rscp"
|
||||
* @hide
|
||||
*/
|
||||
public static final String KEY_WCDMA_DEFAULT_SIGNAL_STRENGTH_MEASUREMENT_STRING =
|
||||
"wcdma_default_signal_strength_measurement_string";
|
||||
|
||||
/** The default value for every variable. */
|
||||
private final static PersistableBundle sDefaults;
|
||||
|
||||
@@ -2143,6 +2170,14 @@ public class CarrierConfigManager {
|
||||
-108, /* SIGNAL_STRENGTH_GOOD */
|
||||
-98, /* SIGNAL_STRENGTH_GREAT */
|
||||
});
|
||||
sDefaults.putIntArray(KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY,
|
||||
new int[] {
|
||||
-115, /* SIGNAL_STRENGTH_POOR */
|
||||
-105, /* SIGNAL_STRENGTH_MODERATE */
|
||||
-95, /* SIGNAL_STRENGTH_GOOD */
|
||||
-85 /* SIGNAL_STRENGTH_GREAT */
|
||||
});
|
||||
sDefaults.putString(KEY_WCDMA_DEFAULT_SIGNAL_STRENGTH_MEASUREMENT_STRING, "");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.content.res.Resources;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Contains phone signal strength related information.
|
||||
@@ -61,6 +62,13 @@ public class SignalStrength implements Parcelable {
|
||||
private static final int MAX_LTE_RSRP = -44;
|
||||
private static final int MIN_LTE_RSRP = -140;
|
||||
|
||||
private static final int WCDMA_RSCP_THRESHOLDS_NUM = 4;
|
||||
private static final int MAX_WCDMA_RSCP = -24;
|
||||
private static final int MIN_WCDMA_RSCP = -120;
|
||||
|
||||
/* The type of signal measurement */
|
||||
private static final String MEASUMENT_TYPE_RSCP = "rscp";
|
||||
|
||||
/** Parameters reported by the Radio */
|
||||
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
|
||||
@@ -75,6 +83,9 @@ public class SignalStrength implements Parcelable {
|
||||
private int mLteRssnr;
|
||||
private int mLteCqi;
|
||||
private int mTdScdmaRscp;
|
||||
private int mWcdmaSignalStrength;
|
||||
private int mWcdmaRscpAsu; // the WCDMA RSCP in ASU as reported from the HAL
|
||||
private int mWcdmaRscp; // the WCDMA RSCP in dBm
|
||||
|
||||
/** Parameters from the framework */
|
||||
private int mLteRsrpBoost; // offset to be reduced from the rsrp threshold while calculating
|
||||
@@ -87,6 +98,13 @@ public class SignalStrength implements Parcelable {
|
||||
// min and max are fixed at MIN_LTE_RSRP (-140) and MAX_LTE_RSRP (-44).
|
||||
private int mLteRsrpThresholds[] = new int[LTE_RSRP_THRESHOLDS_NUM];
|
||||
|
||||
// The type of default measurement for determining the display level of WCDMA signal bar.
|
||||
private String mWcdmaDefaultSignalMeasurement;
|
||||
|
||||
// The threshold of WCDMA RSCP for determining the display level of WCDMA signal bar. Note that
|
||||
// the min and max are fixed at MIN_WCDMA_RSCP (-120) and MAX_WCDMA_RSCP (-24).
|
||||
private int mWcdmaRscpThresholds[] = new int[WCDMA_RSCP_THRESHOLDS_NUM];
|
||||
|
||||
/**
|
||||
* Create a new SignalStrength from a intent notifier Bundle
|
||||
*
|
||||
@@ -136,10 +154,14 @@ public class SignalStrength implements Parcelable {
|
||||
mLteRssnr = INVALID;
|
||||
mLteCqi = INVALID;
|
||||
mTdScdmaRscp = INVALID;
|
||||
mWcdmaSignalStrength = 99;
|
||||
mWcdmaRscp = INVALID;
|
||||
mLteRsrpBoost = 0;
|
||||
mIsGsm = gsmFlag;
|
||||
mUseOnlyRsrpForLteLevel = false;
|
||||
mWcdmaDefaultSignalMeasurement = "";
|
||||
setLteRsrpThresholds(getDefaultLteRsrpThresholds());
|
||||
setWcdmaRscpThresholds(getDefaultWcdmaRscpThresholds());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,9 +174,10 @@ public class SignalStrength implements Parcelable {
|
||||
int cdmaDbm, int cdmaEcio,
|
||||
int evdoDbm, int evdoEcio, int evdoSnr,
|
||||
int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
|
||||
int tdScdmaRscp,
|
||||
int tdScdmaRscp, int wcdmaSignalStrength, int wcdmaRscpAsu,
|
||||
// values Added by config
|
||||
int lteRsrpBoost, boolean gsmFlag, boolean lteLevelBaseOnRsrp) {
|
||||
int lteRsrpBoost, boolean gsmFlag, boolean lteLevelBaseOnRsrp,
|
||||
String wcdmaDefaultMeasurement) {
|
||||
mGsmSignalStrength = gsmSignalStrength;
|
||||
mGsmBitErrorRate = gsmBitErrorRate;
|
||||
mCdmaDbm = cdmaDbm;
|
||||
@@ -168,15 +191,20 @@ public class SignalStrength implements Parcelable {
|
||||
mLteRssnr = lteRssnr;
|
||||
mLteCqi = lteCqi;
|
||||
mTdScdmaRscp = INVALID;
|
||||
mWcdmaSignalStrength = wcdmaSignalStrength;
|
||||
mWcdmaRscpAsu = wcdmaRscpAsu;
|
||||
mWcdmaRscp = wcdmaRscpAsu - 120;
|
||||
mLteRsrpBoost = lteRsrpBoost;
|
||||
mIsGsm = gsmFlag;
|
||||
mUseOnlyRsrpForLteLevel = lteLevelBaseOnRsrp;
|
||||
mWcdmaDefaultSignalMeasurement = wcdmaDefaultMeasurement;
|
||||
setLteRsrpThresholds(getDefaultLteRsrpThresholds());
|
||||
setWcdmaRscpThresholds(getDefaultWcdmaRscpThresholds());
|
||||
if (DBG) log("initialize: " + toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for only values provided by Radio HAL
|
||||
* Constructor for only values provided by Radio HAL V1.0
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@@ -187,7 +215,23 @@ public class SignalStrength implements Parcelable {
|
||||
int tdScdmaRscp) {
|
||||
this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
|
||||
evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
|
||||
lteRsrq, lteRssnr, lteCqi, tdScdmaRscp, 0, true, false);
|
||||
lteRsrq, lteRssnr, lteCqi, tdScdmaRscp, 99, INVALID, 0, true, false, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for only values provided by Radio HAL V1.2
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
|
||||
int cdmaDbm, int cdmaEcio,
|
||||
int evdoDbm, int evdoEcio, int evdoSnr,
|
||||
int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
|
||||
int tdScdmaRscp, int wcdmaSignalStrength, int wcdmaRscp) {
|
||||
this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
|
||||
evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
|
||||
lteRsrq, lteRssnr, lteCqi, tdScdmaRscp, wcdmaSignalStrength, wcdmaRscp, 0, true,
|
||||
false, "");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -218,10 +262,15 @@ public class SignalStrength implements Parcelable {
|
||||
mLteRssnr = s.mLteRssnr;
|
||||
mLteCqi = s.mLteCqi;
|
||||
mTdScdmaRscp = s.mTdScdmaRscp;
|
||||
mWcdmaSignalStrength = s.mWcdmaSignalStrength;
|
||||
mWcdmaRscpAsu = s.mWcdmaRscpAsu;
|
||||
mWcdmaRscp = s.mWcdmaRscp;
|
||||
mLteRsrpBoost = s.mLteRsrpBoost;
|
||||
mIsGsm = s.mIsGsm;
|
||||
mUseOnlyRsrpForLteLevel = s.mUseOnlyRsrpForLteLevel;
|
||||
mWcdmaDefaultSignalMeasurement = s.mWcdmaDefaultSignalMeasurement;
|
||||
setLteRsrpThresholds(s.mLteRsrpThresholds);
|
||||
setWcdmaRscpThresholds(s.mWcdmaRscpThresholds);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,10 +294,15 @@ public class SignalStrength implements Parcelable {
|
||||
mLteRssnr = in.readInt();
|
||||
mLteCqi = in.readInt();
|
||||
mTdScdmaRscp = in.readInt();
|
||||
mWcdmaSignalStrength = in.readInt();
|
||||
mWcdmaRscpAsu = in.readInt();
|
||||
mWcdmaRscp = in.readInt();
|
||||
mLteRsrpBoost = in.readInt();
|
||||
mIsGsm = in.readBoolean();
|
||||
mUseOnlyRsrpForLteLevel = in.readBoolean();
|
||||
mWcdmaDefaultSignalMeasurement = in.readString();
|
||||
in.readIntArray(mLteRsrpThresholds);
|
||||
in.readIntArray(mWcdmaRscpThresholds);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -268,10 +322,15 @@ public class SignalStrength implements Parcelable {
|
||||
out.writeInt(mLteRssnr);
|
||||
out.writeInt(mLteCqi);
|
||||
out.writeInt(mTdScdmaRscp);
|
||||
out.writeInt(mWcdmaSignalStrength);
|
||||
out.writeInt(mWcdmaRscpAsu);
|
||||
out.writeInt(mWcdmaRscp);
|
||||
out.writeInt(mLteRsrpBoost);
|
||||
out.writeBoolean(mIsGsm);
|
||||
out.writeBoolean(mUseOnlyRsrpForLteLevel);
|
||||
out.writeString(mWcdmaDefaultSignalMeasurement);
|
||||
out.writeIntArray(mLteRsrpThresholds);
|
||||
out.writeIntArray(mWcdmaRscpThresholds);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -311,8 +370,18 @@ public class SignalStrength implements Parcelable {
|
||||
if (DBG) log("Signal before validate=" + this);
|
||||
// TS 27.007 8.5
|
||||
mGsmSignalStrength = mGsmSignalStrength >= 0 ? mGsmSignalStrength : 99;
|
||||
mWcdmaSignalStrength = (mWcdmaSignalStrength >= 0) ? mWcdmaSignalStrength : 99;
|
||||
mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;
|
||||
// BER no change;
|
||||
|
||||
// WCDMA RSCP valid values are -120 through -24 as defined in TS 27.007 8.69
|
||||
// but are reported in ASU which is 0 through 96, so we do the conversion here
|
||||
mWcdmaRscpAsu =
|
||||
((mWcdmaRscpAsu - 120 >= MIN_WCDMA_RSCP) && (mWcdmaRscpAsu - 120 <= MAX_WCDMA_RSCP))
|
||||
? mWcdmaRscpAsu : INVALID;
|
||||
mWcdmaRscp = ((mWcdmaRscp >= MIN_WCDMA_RSCP) && (mWcdmaRscp <= MAX_WCDMA_RSCP))
|
||||
? mWcdmaRscp : INVALID;
|
||||
|
||||
mCdmaDbm = mCdmaDbm > 0 ? -mCdmaDbm : -120;
|
||||
mCdmaEcio = (mCdmaEcio >= 0) ? -mCdmaEcio : -160;
|
||||
|
||||
@@ -321,7 +390,6 @@ public class SignalStrength implements Parcelable {
|
||||
mEvdoSnr = ((mEvdoSnr >= 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
|
||||
|
||||
// TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
|
||||
mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;
|
||||
mLteRsrp = ((-mLteRsrp >= MIN_LTE_RSRP) && (-mLteRsrp <= MAX_LTE_RSRP)) ? -mLteRsrp
|
||||
: SignalStrength.INVALID;
|
||||
mLteRsrq = ((mLteRsrq >= 3) && (mLteRsrq <= 20)) ? -mLteRsrq : SignalStrength.INVALID;
|
||||
@@ -366,6 +434,16 @@ public class SignalStrength implements Parcelable {
|
||||
mUseOnlyRsrpForLteLevel = useOnlyRsrpForLteLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param defaultMeasurement sets the type of WCDMA default signal measurement
|
||||
*
|
||||
* Used by phone to determine default measurement type for calculation WCDMA signal level.
|
||||
* @hide
|
||||
*/
|
||||
public void setWcdmaDefaultSignalMeasurement(String defaultMeasurement) {
|
||||
mWcdmaDefaultSignalMeasurement = defaultMeasurement;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param lteRsrpBoost - signal strength offset
|
||||
*
|
||||
@@ -409,6 +487,23 @@ public class SignalStrength implements Parcelable {
|
||||
return this.mGsmBitErrorRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the threshold array for determining the display level of WCDMA signal bar.
|
||||
*
|
||||
* @param wcdmaRscpThresholds int array for determining the display level.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public void setWcdmaRscpThresholds(int[] wcdmaRscpThresholds) {
|
||||
if ((wcdmaRscpThresholds == null)
|
||||
|| (wcdmaRscpThresholds.length != WCDMA_RSCP_THRESHOLDS_NUM)) {
|
||||
Log.wtf(LOG_TAG, "setWcdmaRscpThresholds - wcdmaRscpThresholds is invalid.");
|
||||
return;
|
||||
}
|
||||
System.arraycopy(wcdmaRscpThresholds, 0, mWcdmaRscpThresholds, 0,
|
||||
WCDMA_RSCP_THRESHOLDS_NUM);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the CDMA RSSI value in dBm
|
||||
*/
|
||||
@@ -500,6 +595,8 @@ public class SignalStrength implements Parcelable {
|
||||
asuLevel = getLteAsuLevel();
|
||||
} else if (mTdScdmaRscp != SignalStrength.INVALID) {
|
||||
asuLevel = getTdScdmaAsuLevel();
|
||||
} else if (mWcdmaRscp != SignalStrength.INVALID) {
|
||||
asuLevel = getWcdmaAsuLevel();
|
||||
} else {
|
||||
asuLevel = getGsmAsuLevel();
|
||||
}
|
||||
@@ -533,7 +630,11 @@ public class SignalStrength implements Parcelable {
|
||||
dBm = getLteDbm();
|
||||
if (dBm == INVALID) {
|
||||
if (getTdScdmaLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||
dBm = getGsmDbm();
|
||||
if (getWcdmaDbm() == INVALID) {
|
||||
dBm = getGsmDbm();
|
||||
} else {
|
||||
dBm = getWcdmaDbm();
|
||||
}
|
||||
} else {
|
||||
dBm = getTdScdmaDbm();
|
||||
}
|
||||
@@ -805,17 +906,21 @@ public class SignalStrength implements Parcelable {
|
||||
if (rsrpIconLevel != -1) return rsrpIconLevel;
|
||||
|
||||
/* Valid values are (0-63, 99) as defined in TS 36.331 */
|
||||
// TODO the range here is probably supposed to be (0..31, 99). It's unclear if anyone relies
|
||||
// on the current incorrect range check, so this will be fixed in a future release with more
|
||||
// soak time
|
||||
if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||
else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
|
||||
else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
|
||||
else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
|
||||
else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
|
||||
|
||||
if (DBG) log("getLTELevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
|
||||
if (DBG) log("getLteLevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
|
||||
+ rssiIconLevel);
|
||||
return rssiIconLevel;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the LTE signal level as an asu value between 0..97, 99 is unknown
|
||||
* Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
|
||||
@@ -908,6 +1013,105 @@ public class SignalStrength implements Parcelable {
|
||||
return tdScdmaAsuLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets WCDMA RSCP as a dbm value between -120 and -24, as defined in TS 27.007 8.69.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getWcdmaRscp() {
|
||||
return mWcdmaRscp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the WCDMA signal level as an ASU value between 0-96, 255 is unknown
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getWcdmaAsuLevel() {
|
||||
/*
|
||||
* 3GPP 27.007 (Ver 10.3.0) Sec 8.69
|
||||
* 0 -120 dBm or less
|
||||
* 1 -119 dBm
|
||||
* 2...95 -118... -25 dBm
|
||||
* 96 -24 dBm or greater
|
||||
* 255 not known or not detectable
|
||||
*/
|
||||
final int wcdmaDbm = getWcdmaDbm();
|
||||
int wcdmaAsuLevel = 255;
|
||||
// validateInput will always give a valid range between -120 to -24 as per ril.h. so RSCP
|
||||
// outside range is already set to INVALID
|
||||
if (wcdmaDbm == SignalStrength.INVALID) wcdmaAsuLevel = 255;
|
||||
else wcdmaAsuLevel = wcdmaDbm + 120;
|
||||
if (DBG) log("Wcdma Asu level: " + wcdmaAsuLevel);
|
||||
return wcdmaAsuLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets WCDMA signal strength as a dbm value between -120 and -24, as defined in TS 27.007 8.69.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getWcdmaDbm() {
|
||||
return mWcdmaRscp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get WCDMA as level 0..4
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getWcdmaLevel() {
|
||||
int level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||
|
||||
if (mWcdmaDefaultSignalMeasurement == null) {
|
||||
Log.wtf(LOG_TAG, "getWcdmaLevel - WCDMA default signal measurement is invalid.");
|
||||
return level;
|
||||
}
|
||||
|
||||
switch (mWcdmaDefaultSignalMeasurement) {
|
||||
case MEASUMENT_TYPE_RSCP:
|
||||
// RSCP valid values are (-120 through -24) as defined in TS 27.007 8.69
|
||||
if (mWcdmaRscp < MIN_WCDMA_RSCP || mWcdmaRscp > MAX_WCDMA_RSCP) {
|
||||
if (mWcdmaRscp != INVALID) {
|
||||
Log.wtf(LOG_TAG, "getWcdmaLevel - invalid WCDMA RSCP: mWcdmaRscp="
|
||||
+ mWcdmaRscp);
|
||||
}
|
||||
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[3]) {
|
||||
level = SIGNAL_STRENGTH_GREAT;
|
||||
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[2]) {
|
||||
level = SIGNAL_STRENGTH_GOOD;
|
||||
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[1]) {
|
||||
level = SIGNAL_STRENGTH_MODERATE;
|
||||
} else if (mWcdmaRscp >= mWcdmaRscpThresholds[0]) {
|
||||
level = SIGNAL_STRENGTH_POOR;
|
||||
}
|
||||
if (DBG) log("getWcdmaLevel=" + level + " WcdmaRscp=" + mWcdmaRscp);
|
||||
break;
|
||||
|
||||
default:
|
||||
// RSSI valid values are (0..31) as defined in TS 27.007 8.5
|
||||
if (mWcdmaSignalStrength < 0 || mWcdmaSignalStrength > 31) {
|
||||
if (mWcdmaSignalStrength != 99) {
|
||||
Log.wtf(LOG_TAG, "getWcdmaLevel - invalid WCDMA RSSI: mWcdmaSignalStrength="
|
||||
+ mWcdmaSignalStrength);
|
||||
}
|
||||
} else if (mWcdmaSignalStrength >= 18) {
|
||||
level = SIGNAL_STRENGTH_GREAT;
|
||||
} else if (mWcdmaSignalStrength >= 13) {
|
||||
level = SIGNAL_STRENGTH_GOOD;
|
||||
} else if (mWcdmaSignalStrength >= 8) {
|
||||
level = SIGNAL_STRENGTH_MODERATE;
|
||||
} else if (mWcdmaSignalStrength >= 3) {
|
||||
level = SIGNAL_STRENGTH_POOR;
|
||||
}
|
||||
if (DBG) log("getWcdmaLevel=" + level + " WcdmaSignalStrength=" +
|
||||
mWcdmaSignalStrength);
|
||||
break;
|
||||
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return hash code
|
||||
*/
|
||||
@@ -920,8 +1124,11 @@ public class SignalStrength implements Parcelable {
|
||||
+ (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
|
||||
+ (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
|
||||
+ (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
|
||||
+ (mLteRsrpBoost * primeNum) + (mTdScdmaRscp * primeNum) + (mIsGsm ? 1 : 0)
|
||||
+ (mUseOnlyRsrpForLteLevel ? 1 : 0) + (Arrays.hashCode(mLteRsrpThresholds)));
|
||||
+ (mLteRsrpBoost * primeNum) + (mTdScdmaRscp * primeNum)
|
||||
+ (mWcdmaSignalStrength * primeNum) + (mWcdmaRscpAsu * primeNum)
|
||||
+ (mWcdmaRscp * primeNum) + (mIsGsm ? 1 : 0) + (mUseOnlyRsrpForLteLevel ? 1 : 0)
|
||||
+ (Objects.hashCode(mWcdmaDefaultSignalMeasurement))
|
||||
+ (Arrays.hashCode(mLteRsrpThresholds)) + (Arrays.hashCode(mWcdmaRscpThresholds)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -955,9 +1162,14 @@ public class SignalStrength implements Parcelable {
|
||||
&& mLteCqi == s.mLteCqi
|
||||
&& mLteRsrpBoost == s.mLteRsrpBoost
|
||||
&& mTdScdmaRscp == s.mTdScdmaRscp
|
||||
&& mWcdmaSignalStrength == s.mWcdmaSignalStrength
|
||||
&& mWcdmaRscpAsu == s.mWcdmaRscpAsu
|
||||
&& mWcdmaRscp == s.mWcdmaRscp
|
||||
&& mIsGsm == s.mIsGsm
|
||||
&& mUseOnlyRsrpForLteLevel == s.mUseOnlyRsrpForLteLevel
|
||||
&& Arrays.equals(mLteRsrpThresholds, s.mLteRsrpThresholds));
|
||||
&& Objects.equals(mWcdmaDefaultSignalMeasurement, s.mWcdmaDefaultSignalMeasurement)
|
||||
&& Arrays.equals(mLteRsrpThresholds, s.mLteRsrpThresholds)
|
||||
&& Arrays.equals(mWcdmaRscpThresholds, s.mWcdmaRscpThresholds));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -980,10 +1192,15 @@ public class SignalStrength implements Parcelable {
|
||||
+ " " + mLteCqi
|
||||
+ " " + mLteRsrpBoost
|
||||
+ " " + mTdScdmaRscp
|
||||
+ " " + mWcdmaSignalStrength
|
||||
+ " " + mWcdmaRscpAsu
|
||||
+ " " + mWcdmaRscp
|
||||
+ " " + (mIsGsm ? "gsm|lte" : "cdma")
|
||||
+ " " + (mUseOnlyRsrpForLteLevel ? "use_only_rsrp_for_lte_level" :
|
||||
"use_rsrp_and_rssnr_for_lte_level")
|
||||
+ " " + (Arrays.toString(mLteRsrpThresholds)));
|
||||
+ " " + mWcdmaDefaultSignalMeasurement
|
||||
+ " " + (Arrays.toString(mLteRsrpThresholds))
|
||||
+ " " + (Arrays.toString(mWcdmaRscpThresholds)));
|
||||
}
|
||||
|
||||
/** Returns the signal strength related to GSM. */
|
||||
@@ -992,7 +1209,10 @@ public class SignalStrength implements Parcelable {
|
||||
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||
level = getTdScdmaLevel();
|
||||
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||
level = getGsmLevel();
|
||||
level = getWcdmaLevel();
|
||||
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
|
||||
level = getGsmLevel();
|
||||
}
|
||||
}
|
||||
}
|
||||
return level;
|
||||
@@ -1037,12 +1257,20 @@ public class SignalStrength implements Parcelable {
|
||||
mLteCqi = m.getInt("LteCqi");
|
||||
mLteRsrpBoost = m.getInt("LteRsrpBoost");
|
||||
mTdScdmaRscp = m.getInt("TdScdma");
|
||||
mWcdmaSignalStrength = m.getInt("WcdmaSignalStrength");
|
||||
mWcdmaRscpAsu = m.getInt("WcdmaRscpAsu");
|
||||
mWcdmaRscp = m.getInt("WcdmaRscp");
|
||||
mIsGsm = m.getBoolean("IsGsm");
|
||||
mUseOnlyRsrpForLteLevel = m.getBoolean("UseOnlyRsrpForLteLevel");
|
||||
mWcdmaDefaultSignalMeasurement = m.getString("WcdmaDefaultSignalMeasurement");
|
||||
ArrayList<Integer> lteRsrpThresholds = m.getIntegerArrayList("lteRsrpThresholds");
|
||||
for (int i = 0; i < lteRsrpThresholds.size(); i++) {
|
||||
mLteRsrpThresholds[i] = lteRsrpThresholds.get(i);
|
||||
}
|
||||
ArrayList<Integer> wcdmaRscpThresholds = m.getIntegerArrayList("wcdmaRscpThresholds");
|
||||
for (int i = 0; i < wcdmaRscpThresholds.size(); i++) {
|
||||
mWcdmaRscpThresholds[i] = wcdmaRscpThresholds.get(i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1066,13 +1294,22 @@ public class SignalStrength implements Parcelable {
|
||||
m.putInt("LteCqi", mLteCqi);
|
||||
m.putInt("LteRsrpBoost", mLteRsrpBoost);
|
||||
m.putInt("TdScdma", mTdScdmaRscp);
|
||||
m.putInt("WcdmaSignalStrength", mWcdmaSignalStrength);
|
||||
m.putInt("WcdmaRscpAsu", mWcdmaRscpAsu);
|
||||
m.putInt("WcdmaRscp", mWcdmaRscp);
|
||||
m.putBoolean("IsGsm", mIsGsm);
|
||||
m.putBoolean("UseOnlyRsrpForLteLevel", mUseOnlyRsrpForLteLevel);
|
||||
m.putString("WcdmaDefaultSignalMeasurement", mWcdmaDefaultSignalMeasurement);
|
||||
ArrayList<Integer> lteRsrpThresholds = new ArrayList<Integer>();
|
||||
for (int value : mLteRsrpThresholds) {
|
||||
lteRsrpThresholds.add(value);
|
||||
}
|
||||
m.putIntegerArrayList("lteRsrpThresholds", lteRsrpThresholds);
|
||||
ArrayList<Integer> wcdmaRscpThresholds = new ArrayList<Integer>();
|
||||
for (int value : mWcdmaRscpThresholds) {
|
||||
wcdmaRscpThresholds.add(value);
|
||||
}
|
||||
m.putIntegerArrayList("wcdmaRscpThresholds", wcdmaRscpThresholds);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1085,6 +1322,16 @@ public class SignalStrength implements Parcelable {
|
||||
CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the default threshold array for determining the display level of WCDMA signal bar.
|
||||
*
|
||||
* @return int array for determining the display level.
|
||||
*/
|
||||
private int[] getDefaultWcdmaRscpThresholds() {
|
||||
return CarrierConfigManager.getDefaultConfig().getIntArray(
|
||||
CarrierConfigManager.KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY);
|
||||
}
|
||||
|
||||
/**
|
||||
* log
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user