Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d987430 authored by Pengquan Meng's avatar Pengquan Meng Committed by Gerrit Code Review
Browse files

Merge "[framework] Fixed signal strength issue"

parents 992f9e7e 7082ef03
Loading
Loading
Loading
Loading
+40 −25
Original line number Diff line number Diff line
@@ -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
     *