[framework] Fixed signal strength issue

The flag GSM of signal strength maybe unknown under OOS, but the signal
strength changed has been notified. In this case, set the flag GSM based
on the signal strength data.

Test: manual
Bug: 62431424

Change-Id: I9e63c45ea8b7c6c37e6ecd2478808c310c3d69ae
This commit is contained in:
Pengquan Meng
2017-10-18 18:07:58 -07:00
parent 5f123e6ad6
commit 7082ef0360

View File

@@ -19,7 +19,6 @@ package android.telephony;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Rlog;
import android.util.Log;
import android.content.res.Resources;
@@ -428,6 +427,15 @@ public class SignalStrength implements Parcelable {
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
* false - Cdma phones
@@ -541,30 +549,7 @@ public class SignalStrength implements Parcelable {
* while 4 represents a very strong signal strength.
*/
public int getLevel() {
int level = 0;
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;
}
}
int level = isGsm ? getGsmRelatedSignalStrength() : getCdmaRelatedSignalStrength();
if (DBG) log("getLevel=" + level);
return level;
}
@@ -1049,6 +1034,36 @@ public class SignalStrength implements Parcelable {
+ " " + (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
*