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

Commit feb9ae1c authored by Nathan Harold's avatar Nathan Harold
Browse files

Rework SignalStrength

Bug: 25984037
Test: atest SignalStrengthTest
Change-Id: I5ee4bf87aab787e230e3d85f664fb740120ce086
parent 12fdd883
Loading
Loading
Loading
Loading
+29 −108
Original line number Diff line number Diff line
@@ -75,6 +75,10 @@ import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CellIdentityCdma;
import android.telephony.CellInfo;
import android.telephony.CellSignalStrengthCdma;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.CellSignalStrengthLte;
import android.telephony.CellSignalStrengthTdscdma;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.ClientRequestStats;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.ModemActivityInfo;
@@ -85,7 +89,6 @@ import android.telephony.RadioAccessFamily;
import android.telephony.RadioAccessSpecifier;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SmsManager;
import android.telephony.TelephonyHistogram;
import android.telephony.TelephonyManager;
@@ -136,7 +139,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
    // Have a separate wakelock instance for Ack
    static final String RILJ_ACK_WAKELOCK_NAME = "RILJ_ACK_WL";
    static final boolean RILJ_LOGD = true;
    static final boolean RILJ_LOGV = false; // STOPSHIP if true
    static final boolean RILJ_LOGV = true; // STOPSHIP if true
    static final int RIL_HISTOGRAM_BUCKET_COUNT = 5;

    /**
@@ -5402,7 +5405,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
    // TODO(b/119224773) refactor the converter of CellInfo.
    private static void writeToParcelForGsm(
            Parcel p, int lac, int cid, int arfcn, int bsic, String mcc, String mnc,
            String al, String as, int ss, int ber, int ta) {
            String al, String as, CellSignalStrengthGsm ss) {
        p.writeInt(CellInfo.TYPE_GSM);
        p.writeString(mcc);
        p.writeString(mnc);
@@ -5412,23 +5415,21 @@ public class RIL extends BaseCommands implements CommandsInterface {
        p.writeInt(cid);
        p.writeInt(arfcn);
        p.writeInt(bsic);
        p.writeInt(ss);
        p.writeInt(ber);
        p.writeInt(ta);
        ss.writeToParcel(p, 0);
    }

    // TODO(b/119224773) refactor the converter of CellInfo.
    private static void writeToParcelForCdma(
            Parcel p, int ni, int si, int bsi, int lon, int lat, String al, String as,
            int dbm, int ecio, int eDbm, int eEcio, int eSnr) {
            CellSignalStrengthCdma ss) {
        new CellIdentityCdma(ni, si, bsi, lon, lat, al, as).writeToParcel(p, 0);
        new CellSignalStrengthCdma(dbm, ecio, eDbm, eEcio, eSnr).writeToParcel(p, 0);
        ss.writeToParcel(p, 0);
    }

    // TODO(b/119224773) refactor the converter of CellInfo.
    private static void writeToParcelForLte(
            Parcel p, int ci, int pci, int tac, int earfcn, int bandwidth, String mcc, String mnc,
            String al, String as, int ss, int rsrp, int rsrq, int rssnr, int cqi, int ta,
            String al, String as, CellSignalStrengthLte ss,
            boolean isEndcAvailable) {

        // General CellInfo
@@ -5446,12 +5447,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
        p.writeInt(bandwidth);

        // CellSignalStrength
        p.writeInt(ss);
        p.writeInt(rsrp);
        p.writeInt(rsrq);
        p.writeInt(rssnr);
        p.writeInt(cqi);
        p.writeInt(ta);
        ss.writeToParcel(p, 0);

        // CellConfigLte
        p.writeBoolean(isEndcAvailable);
@@ -5460,7 +5456,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
    // TODO(b/119224773) refactor the converter of CellInfo.
    private static void writeToParcelForWcdma(
            Parcel p, int lac, int cid, int psc, int uarfcn, String mcc, String mnc,
            String al, String as, int ss, int ber, int rscp, int ecno) {
            String al, String as, CellSignalStrengthWcdma ss) {
        p.writeInt(CellInfo.TYPE_WCDMA);
        p.writeString(mcc);
        p.writeString(mnc);
@@ -5470,16 +5466,13 @@ public class RIL extends BaseCommands implements CommandsInterface {
        p.writeInt(cid);
        p.writeInt(psc);
        p.writeInt(uarfcn);
        p.writeInt(ss);
        p.writeInt(ber);
        p.writeInt(rscp);
        p.writeInt(ecno);
        ss.writeToParcel(p, 0);
    }

    // TODO(b/119224773) refactor the converter of CellInfo.
    private static void writeToParcelForTdscdma(
            Parcel p, int lac, int cid, int cpid, int uarfcn, String mcc, String mnc,
            String al, String as, int ss, int ber, int rscp) {
            String al, String as, CellSignalStrengthTdscdma ss) {
        p.writeInt(CellInfo.TYPE_TDSCDMA);
        p.writeString(mcc);
        p.writeString(mnc);
@@ -5489,9 +5482,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
        p.writeInt(cid);
        p.writeInt(cpid);
        p.writeInt(uarfcn);
        p.writeInt(ss);
        p.writeInt(ber);
        p.writeInt(rscp);
        ss.writeToParcel(p, 0);
    }

    /**
@@ -5524,9 +5515,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoGsm.cellIdentityGsm.mnc,
                            EMPTY_ALPHA_LONG,
                            EMPTY_ALPHA_SHORT,
                            cellInfoGsm.signalStrengthGsm.signalStrength,
                            cellInfoGsm.signalStrengthGsm.bitErrorRate,
                            cellInfoGsm.signalStrengthGsm.timingAdvance);
                            new CellSignalStrengthGsm(cellInfoGsm.signalStrengthGsm));
                    break;
                }

@@ -5541,11 +5530,9 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoCdma.cellIdentityCdma.latitude,
                            EMPTY_ALPHA_LONG,
                            EMPTY_ALPHA_SHORT,
                            cellInfoCdma.signalStrengthCdma.dbm,
                            cellInfoCdma.signalStrengthCdma.ecio,
                            cellInfoCdma.signalStrengthEvdo.dbm,
                            cellInfoCdma.signalStrengthEvdo.ecio,
                            cellInfoCdma.signalStrengthEvdo.signalNoiseRatio);
                            new CellSignalStrengthCdma(
                                    cellInfoCdma.signalStrengthCdma,
                                    cellInfoCdma.signalStrengthEvdo));
                    break;
                }

@@ -5562,12 +5549,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoLte.cellIdentityLte.mnc,
                            EMPTY_ALPHA_LONG,
                            EMPTY_ALPHA_SHORT,
                            cellInfoLte.signalStrengthLte.signalStrength,
                            cellInfoLte.signalStrengthLte.rsrp,
                            cellInfoLte.signalStrengthLte.rsrq,
                            cellInfoLte.signalStrengthLte.rssnr,
                            cellInfoLte.signalStrengthLte.cqi,
                            cellInfoLte.signalStrengthLte.timingAdvance,
                            new CellSignalStrengthLte(cellInfoLte.signalStrengthLte),
                            false /* isEndcAvailable */);
                    break;
                }
@@ -5584,10 +5566,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoWcdma.cellIdentityWcdma.mnc,
                            EMPTY_ALPHA_LONG,
                            EMPTY_ALPHA_SHORT,
                            cellInfoWcdma.signalStrengthWcdma.signalStrength,
                            cellInfoWcdma.signalStrengthWcdma.bitErrorRate,
                            Integer.MAX_VALUE,
                            Integer.MAX_VALUE);
                            new CellSignalStrengthWcdma(cellInfoWcdma.signalStrengthWcdma));
                    break;
                }

@@ -5603,9 +5582,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoTdscdma.cellIdentityTdscdma.mnc,
                            EMPTY_ALPHA_LONG,
                            EMPTY_ALPHA_SHORT,
                            Integer.MAX_VALUE,
                            Integer.MAX_VALUE,
                            convertTdscdmaRscpTo1_2(cellInfoTdscdma.signalStrengthTdscdma.rscp));
                            new CellSignalStrengthTdscdma(cellInfoTdscdma.signalStrengthTdscdma));
                    break;
                }
                default:
@@ -5651,9 +5628,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoGsm.cellIdentityGsm.base.mnc,
                            cellInfoGsm.cellIdentityGsm.operatorNames.alphaLong,
                            cellInfoGsm.cellIdentityGsm.operatorNames.alphaShort,
                            cellInfoGsm.signalStrengthGsm.signalStrength,
                            cellInfoGsm.signalStrengthGsm.bitErrorRate,
                            cellInfoGsm.signalStrengthGsm.timingAdvance);
                            new CellSignalStrengthGsm(cellInfoGsm.signalStrengthGsm));
                    break;
                }

@@ -5668,11 +5643,9 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoCdma.cellIdentityCdma.base.latitude,
                            cellInfoCdma.cellIdentityCdma.operatorNames.alphaLong,
                            cellInfoCdma.cellIdentityCdma.operatorNames.alphaShort,
                            cellInfoCdma.signalStrengthCdma.dbm,
                            cellInfoCdma.signalStrengthCdma.ecio,
                            cellInfoCdma.signalStrengthEvdo.dbm,
                            cellInfoCdma.signalStrengthEvdo.ecio,
                            cellInfoCdma.signalStrengthEvdo.signalNoiseRatio);
                            new CellSignalStrengthCdma(
                                cellInfoCdma.signalStrengthCdma,
                                cellInfoCdma.signalStrengthEvdo));
                    break;
                }

@@ -5689,12 +5662,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoLte.cellIdentityLte.base.mnc,
                            cellInfoLte.cellIdentityLte.operatorNames.alphaLong,
                            cellInfoLte.cellIdentityLte.operatorNames.alphaShort,
                            cellInfoLte.signalStrengthLte.signalStrength,
                            cellInfoLte.signalStrengthLte.rsrp,
                            cellInfoLte.signalStrengthLte.rsrq,
                            cellInfoLte.signalStrengthLte.rssnr,
                            cellInfoLte.signalStrengthLte.cqi,
                            cellInfoLte.signalStrengthLte.timingAdvance,
                            new CellSignalStrengthLte(cellInfoLte.signalStrengthLte),
                            false /* isEndcAvailable */);
                    break;
                }
@@ -5711,10 +5679,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoWcdma.cellIdentityWcdma.base.mnc,
                            cellInfoWcdma.cellIdentityWcdma.operatorNames.alphaLong,
                            cellInfoWcdma.cellIdentityWcdma.operatorNames.alphaShort,
                            cellInfoWcdma.signalStrengthWcdma.base.signalStrength,
                            cellInfoWcdma.signalStrengthWcdma.base.bitErrorRate,
                            cellInfoWcdma.signalStrengthWcdma.rscp,
                            cellInfoWcdma.signalStrengthWcdma.ecno);
                            new CellSignalStrengthWcdma(cellInfoWcdma.signalStrengthWcdma));
                    break;
                }

@@ -5731,9 +5696,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
                            cellInfoTdscdma.cellIdentityTdscdma.base.mnc,
                            cellInfoTdscdma.cellIdentityTdscdma.operatorNames.alphaLong,
                            cellInfoTdscdma.cellIdentityTdscdma.operatorNames.alphaShort,
                            cellInfoTdscdma.signalStrengthTdscdma.signalStrength,
                            cellInfoTdscdma.signalStrengthTdscdma.bitErrorRate,
                            cellInfoTdscdma.signalStrengthTdscdma.rscp);
                            new CellSignalStrengthTdscdma(cellInfoTdscdma.signalStrengthTdscdma));
                    break;
                }

@@ -5762,48 +5725,6 @@ public class RIL extends BaseCommands implements CommandsInterface {
        return Integer.MAX_VALUE;
    }

    /** Convert HAL 1.0 Signal Strength to android SignalStrength */
    @VisibleForTesting
    public static SignalStrength convertHalSignalStrength(
            android.hardware.radio.V1_0.SignalStrength signalStrength) {
        return new SignalStrength(
                signalStrength.gw.signalStrength,
                signalStrength.gw.bitErrorRate,
                signalStrength.cdma.dbm,
                signalStrength.cdma.ecio,
                signalStrength.evdo.dbm,
                signalStrength.evdo.ecio,
                signalStrength.evdo.signalNoiseRatio,
                signalStrength.lte.signalStrength,
                signalStrength.lte.rsrp,
                signalStrength.lte.rsrq,
                signalStrength.lte.rssnr,
                signalStrength.lte.cqi,
                convertTdscdmaRscpTo1_2(signalStrength.tdScdma.rscp));
    }

    /** Convert HAL 1.2 Signal Strength to android SignalStrength */
    @VisibleForTesting
    public static SignalStrength convertHalSignalStrength_1_2(
            android.hardware.radio.V1_2.SignalStrength signalStrength) {
        return new SignalStrength(
                signalStrength.gsm.signalStrength,
                signalStrength.gsm.bitErrorRate,
                signalStrength.cdma.dbm,
                signalStrength.cdma.ecio,
                signalStrength.evdo.dbm,
                signalStrength.evdo.ecio,
                signalStrength.evdo.signalNoiseRatio,
                signalStrength.lte.signalStrength,
                signalStrength.lte.rsrp,
                signalStrength.lte.rsrq,
                signalStrength.lte.rssnr,
                signalStrength.lte.cqi,
                signalStrength.tdScdma.rscp,
                signalStrength.wcdma.base.signalStrength,
                signalStrength.wcdma.rscp);
    }

    /**
     * @return The {@link IwlanOperationMode IWLAN operation mode}
     */
+2 −2
Original line number Diff line number Diff line
@@ -229,7 +229,7 @@ public class RadioIndication extends IRadioIndication.Stub {
                                      android.hardware.radio.V1_0.SignalStrength signalStrength) {
        mRil.processIndication(indicationType);

        SignalStrength ss = RIL.convertHalSignalStrength(signalStrength);
        SignalStrength ss = new SignalStrength(signalStrength);
        // Note this is set to "verbose" because it happens frequently
        if (RIL.RILJ_LOGV) mRil.unsljLogvRet(RIL_UNSOL_SIGNAL_STRENGTH, ss);

@@ -261,7 +261,7 @@ public class RadioIndication extends IRadioIndication.Stub {
                                      android.hardware.radio.V1_2.SignalStrength signalStrength) {
        mRil.processIndication(indicationType);

        SignalStrength ss = RIL.convertHalSignalStrength_1_2(signalStrength);
        SignalStrength ss = new SignalStrength(signalStrength);
        // Note this is set to "verbose" because it happens frequently
        if (RIL.RILJ_LOGV) mRil.unsljLogvRet(RIL_UNSOL_SIGNAL_STRENGTH, ss);

+2 −2
Original line number Diff line number Diff line
@@ -1720,7 +1720,7 @@ public class RadioResponse extends IRadioResponse.Stub {
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            SignalStrength ret = RIL.convertHalSignalStrength(signalStrength);
            SignalStrength ret = new SignalStrength(signalStrength);
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, ret);
            }
@@ -1734,7 +1734,7 @@ public class RadioResponse extends IRadioResponse.Stub {
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            SignalStrength ret = RIL.convertHalSignalStrength_1_2(signalStrength);
            SignalStrength ret = new SignalStrength(signalStrength);
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, ret);
            }
+3 −38
Original line number Diff line number Diff line
@@ -3190,7 +3190,6 @@ public class ServiceStateTracker extends Handler {
        if (hasRilDataRadioTechnologyChanged || hasRilVoiceRadioTechnologyChanged) {
            logRatChange();

            updateRatTypeForSignalStrength();
            notifySignalStrength();
        }

@@ -4344,53 +4343,19 @@ public class ServiceStateTracker extends Handler {

        if ((ar.exception == null) && (ar.result != null)) {
            mSignalStrength = (SignalStrength) ar.result;
            mSignalStrength.validateInput();
            mSignalStrength.setLteRsrpBoost(mSS.getLteEarfcnRsrpBoost());

            PersistableBundle config = getCarrierConfig();
            mSignalStrength.setUseOnlyRsrpForLteLevel(config.getBoolean(
                    CarrierConfigManager.KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL));
            mSignalStrength.setLteRsrpThresholds(config.getIntArray(
                    CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY));
            mSignalStrength.setWcdmaDefaultSignalMeasurement(config.getString(
                    CarrierConfigManager.KEY_WCDMA_DEFAULT_SIGNAL_STRENGTH_MEASUREMENT_STRING));
            mSignalStrength.setWcdmaRscpThresholds(config.getIntArray(
                    CarrierConfigManager.KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY));
            mSignalStrength.updateLevel(config, mSS);
        } else {
            log("onSignalStrengthResult() Exception from RIL : " + ar.exception);
            mSignalStrength = new SignalStrength(true);
            mSignalStrength = new SignalStrength();
        }

        updateRatTypeForSignalStrength();
        boolean ssChanged = notifySignalStrength();

        return ssChanged;
    }

    private void updateRatTypeForSignalStrength() {
        if (mSignalStrength != null) {
            boolean isGsm = false;
            int dataRat = mSS.getRilDataRadioTechnology();
            int voiceRat = mSS.getRilVoiceRadioTechnology();

            // Override isGsm based on currently camped data and voice RATs
            // Set isGsm to true if the RAT belongs to GSM family and not IWLAN
            if ((dataRat != ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
                    && ServiceState.isGsm(dataRat))
                    || (voiceRat != ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
                    && ServiceState.isGsm(voiceRat))) {
                isGsm = true;
            }

            if (dataRat == ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN
                    && voiceRat == ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN) {
                mSignalStrength.fixType();
            } else {
                mSignalStrength.setGsm(isGsm);
            }
        }
    }

    /**
     * Hang up all voice call and turn off radio. Implemented by derived class.
     */
@@ -4859,7 +4824,7 @@ public class ServiceStateTracker extends Handler {
    }

    private void setSignalStrengthDefaultValues() {
        mSignalStrength = new SignalStrength(true);
        mSignalStrength = new SignalStrength();
    }

    protected String getHomeOperatorNumeric() {
+15 −30
Original line number Diff line number Diff line
@@ -32,6 +32,11 @@ import android.os.WorkSource;
import android.service.carrier.CarrierIdentifier;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.CellSignalStrengthCdma;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.CellSignalStrengthLte;
import android.telephony.CellSignalStrengthTdscdma;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.IccOpenLogicalChannelResponse;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.NetworkRegistrationState;
@@ -858,25 +863,14 @@ public class SimulatedCommands extends BaseCommands

    @Override
    public void getSignalStrength (Message result) {

        if (mSignalStrength == null) {
            mSignalStrength = new SignalStrength(
                20, // gsmSignalStrength
                0,  // gsmBitErrorRate
                -1, // cdmaDbm
                -1, // cdmaEcio
                -1, // evdoDbm
                -1, // evdoEcio
                -1, // evdoSnr
                99, // lteSignalStrength
                SignalStrength.INVALID,     // lteRsrp
                SignalStrength.INVALID,     // lteRsrq
                SignalStrength.INVALID,     // lteRssnr
                SignalStrength.INVALID,     // lteCqi
                SignalStrength.INVALID      // tdScdmaRscp
            );
                    new CellSignalStrengthCdma(),
                    new CellSignalStrengthGsm(20, 0, CellInfo.UNAVAILABLE),
                    new CellSignalStrengthWcdma(),
                    new CellSignalStrengthTdscdma(),
                    new CellSignalStrengthLte());
        }

        resultSuccess(result, mSignalStrength);
    }

@@ -2151,20 +2145,11 @@ public class SimulatedCommands extends BaseCommands
    public void notifySignalStrength() {
        if (mSignalStrength == null) {
            mSignalStrength = new SignalStrength(
                    20, // gsmSignalStrength
                    0,  // gsmBitErrorRate
                    -1, // cdmaDbm
                    -1, // cdmaEcio
                    -1, // evdoDbm
                    -1, // evdoEcio
                    -1, // evdoSnr
                    99, // lteSignalStrength
                    SignalStrength.INVALID,     // lteRsrp
                    SignalStrength.INVALID,     // lteRsrq
                    SignalStrength.INVALID,     // lteRssnr
                    SignalStrength.INVALID,     // lteCqi
                    SignalStrength.INVALID      // tdScdmaRscp
            );
                    new CellSignalStrengthCdma(),
                    new CellSignalStrengthGsm(20, 0, CellInfo.UNAVAILABLE),
                    new CellSignalStrengthWcdma(),
                    new CellSignalStrengthTdscdma(),
                    new CellSignalStrengthLte());
        }

        if (mSignalStrengthRegistrant != null) {
Loading