From 96f2747dd6fabd998619524bcff4a44502a64bbd Mon Sep 17 00:00:00 2001 From: Yong Zhang Date: Wed, 22 Jul 2009 17:25:30 -0500 Subject: [PATCH] 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. --- .../android/server/status/StatusBarPolicy.java | 17 ++++++++--------- .../telephony/cdma/CdmaServiceStateTracker.java | 8 ++++---- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java index 33e793b1c746d..5aed39690c30c 100644 --- a/services/java/com/android/server/status/StatusBarPolicy.java +++ b/services/java/com/android/server/status/StatusBarPolicy.java @@ -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); diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java index b22c80a811aee..6356473ea9f72 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -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; }