Merge "[framework] Fixed signal strength issue"

This commit is contained in:
Pengquan Meng
2017-10-20 05:44:42 +00:00
committed by Gerrit Code Review

View File

@@ -19,7 +19,6 @@ package android.telephony;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.telephony.Rlog;
import android.util.Log; import android.util.Log;
import android.content.res.Resources; import android.content.res.Resources;
@@ -428,6 +427,15 @@ public class SignalStrength implements Parcelable {
if (DBG) log("Signal after validate=" + this); if (DBG) log("Signal after validate=" + this);
} }
/**
* Fix {@link #isGsm} based on the signal strength data.
*
* @hide
*/
public void fixType() {
isGsm = getCdmaRelatedSignalStrength() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
}
/** /**
* @param true - Gsm, Lte phones * @param true - Gsm, Lte phones
* false - Cdma phones * false - Cdma phones
@@ -541,30 +549,7 @@ public class SignalStrength implements Parcelable {
* while 4 represents a very strong signal strength. * while 4 represents a very strong signal strength.
*/ */
public int getLevel() { public int getLevel() {
int level = 0; int level = isGsm ? getGsmRelatedSignalStrength() : getCdmaRelatedSignalStrength();
if (isGsm) {
level = getLteLevel();
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
level = getTdScdmaLevel();
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
level = getGsmLevel();
}
}
} else {
int cdmaLevel = getCdmaLevel();
int evdoLevel = getEvdoLevel();
if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
/* We don't know evdo, use cdma */
level = cdmaLevel;
} else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
/* We don't know cdma, use evdo */
level = evdoLevel;
} else {
/* We know both, use the lowest level */
level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;
}
}
if (DBG) log("getLevel=" + level); if (DBG) log("getLevel=" + level);
return level; return level;
} }
@@ -1049,6 +1034,36 @@ public class SignalStrength implements Parcelable {
+ " " + (isGsm ? "gsm|lte" : "cdma")); + " " + (isGsm ? "gsm|lte" : "cdma"));
} }
/** Returns the signal strength related to GSM. */
private int getGsmRelatedSignalStrength() {
int level = getLteLevel();
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
level = getTdScdmaLevel();
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
level = getGsmLevel();
}
}
return level;
}
/** Returns the signal strength related to CDMA. */
private int getCdmaRelatedSignalStrength() {
int level;
int cdmaLevel = getCdmaLevel();
int evdoLevel = getEvdoLevel();
if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
/* We don't know evdo, use cdma */
level = cdmaLevel;
} else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
/* We don't know cdma, use evdo */
level = evdoLevel;
} else {
/* We know both, use the lowest level */
level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;
}
return level;
}
/** /**
* Set SignalStrength based on intent notifier map * Set SignalStrength based on intent notifier map
* *