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

Commit 7082ef03 authored by Pengquan Meng's avatar Pengquan Meng
Browse files

[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
parent 5f123e6a
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
     *