[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:
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user