From 7082ef036032778c4d1e307c184c019cc4d640be Mon Sep 17 00:00:00 2001 From: Pengquan Meng Date: Wed, 18 Oct 2017 18:07:58 -0700 Subject: [PATCH] [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 --- .../android/telephony/SignalStrength.java | 65 ++++++++++++------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index 9e02399338fcc..c8b4776522c6d 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -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 *