Fix wrong Singal Strength interpretation.
The issue this change fixes is that phone status bar shows full signal strength bar even when phone is in bad signal area. The root cause is that the signal strenth is incorrectly interpreted.
This commit is contained in:
@@ -926,17 +926,16 @@ public class StatusBarPolicy {
|
||||
// Use Evdo icon
|
||||
evdoIconList = this.sSignalImages_evdo;
|
||||
|
||||
int evdoEcio = mSignalStrength.getEvdoEcio();
|
||||
int evdoDbm = mSignalStrength.getEvdoDbm();
|
||||
int evdoSnr = mSignalStrength.getEvdoSnr();
|
||||
int levelEvdoEcio = 0;
|
||||
int levelEvdoDbm = 0;
|
||||
int levelEvdoSnr = 0;
|
||||
|
||||
// Ec/Io are in dB*10
|
||||
if (evdoEcio >= -650) levelEvdoEcio = 4;
|
||||
else if (evdoEcio >= -750) levelEvdoEcio = 3;
|
||||
else if (evdoEcio >= -900) levelEvdoEcio = 2;
|
||||
else if (evdoEcio >= -1050) levelEvdoEcio = 1;
|
||||
else levelEvdoEcio = 0;
|
||||
if (evdoDbm >= -65) levelEvdoDbm = 4;
|
||||
else if (evdoDbm >= -75) levelEvdoDbm = 3;
|
||||
else if (evdoDbm >= -90) levelEvdoDbm = 2;
|
||||
else if (evdoDbm >= -105) levelEvdoDbm = 1;
|
||||
else levelEvdoDbm = 0;
|
||||
|
||||
if (evdoSnr > 7) levelEvdoSnr = 4;
|
||||
else if (evdoSnr > 5) levelEvdoSnr = 3;
|
||||
@@ -944,7 +943,7 @@ public class StatusBarPolicy {
|
||||
else if (evdoSnr > 1) levelEvdoSnr = 1;
|
||||
else levelEvdoSnr = 0;
|
||||
|
||||
evdoIconLevel = (levelEvdoEcio < levelEvdoSnr) ? levelEvdoEcio : levelEvdoSnr;
|
||||
evdoIconLevel = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
|
||||
|
||||
mPhoneEvdoData.iconId = evdoIconList[evdoIconLevel];
|
||||
mService.updateIcon(mPhoneEvdoIcon, mPhoneEvdoData, null);
|
||||
|
||||
@@ -1074,7 +1074,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
|
||||
/**
|
||||
* send signal-strength-changed notification if changed
|
||||
* Called both for solicited and unsolicited signal stength updates
|
||||
* Called both for solicited and unsolicited signal strength updates
|
||||
*/
|
||||
private void
|
||||
onSignalStrengthResult(AsyncResult ar) {
|
||||
@@ -1087,15 +1087,15 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
int[] ints = (int[])ar.result;
|
||||
int offset = 2;
|
||||
|
||||
int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -1;
|
||||
int cdmaEcio = (ints[offset+1] > 0) ? -ints[offset+1] : -1;
|
||||
int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -120;
|
||||
int cdmaEcio = (ints[offset+1] > 0) ? -ints[offset+1] : -160;
|
||||
|
||||
int evdoRssi = -1;
|
||||
int evdoEcio = -1;
|
||||
int evdoSnr = -1;
|
||||
if ((networkType == ServiceState.RADIO_TECHNOLOGY_EVDO_0)
|
||||
|| (networkType == ServiceState.RADIO_TECHNOLOGY_EVDO_A)) {
|
||||
evdoRssi = (ints[offset+2] > 0) ? -ints[offset+2] : -1;
|
||||
evdoRssi = (ints[offset+2] > 0) ? -ints[offset+2] : -120;
|
||||
evdoEcio = (ints[offset+3] > 0) ? -ints[offset+3] : -1;
|
||||
evdoSnr = ((ints[offset+4] > 0) && (ints[offset+4] <= 8)) ? ints[offset+4] : -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user