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

Commit df6435c1 authored by Wei Huang's avatar Wei Huang Committed by Jordan Liu
Browse files

Customize the WCDMA signal strength based on RSCP

To customize the WCDMA signal strength based on RSCP, acquire RSCP of
WCDMA from RIL and set it in signal strength.

Test: manual - Checked that signal bar of WCDMA signal strength can be
customized based on RSCP.
Test: auto - Passed SignalStrengthTest and ServiceStateTrackerTest.
Bug: 71329173
Change-Id: Ifdea81c7a6968fda7236663b6ebb0a8be7f64fb1
parent b38959c8
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -5282,7 +5282,6 @@ public class RIL extends BaseCommands implements CommandsInterface {

    static SignalStrength convertHalSignalStrength_1_2(
            android.hardware.radio.V1_2.SignalStrength signalStrength) {
        // TODO: Pipe WCDMA up
        return new SignalStrength(
                signalStrength.gsm.signalStrength,
                signalStrength.gsm.bitErrorRate,
@@ -5296,6 +5295,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
                signalStrength.lte.rsrq,
                signalStrength.lte.rssnr,
                signalStrength.lte.cqi,
                signalStrength.tdScdma.rscp);
                signalStrength.tdScdma.rscp,
                signalStrength.wcdma.base.signalStrength,
                signalStrength.wcdma.rscp);
    }
}
+10 −22
Original line number Diff line number Diff line
@@ -3945,8 +3945,16 @@ public class ServiceStateTracker extends Handler {
                mSignalStrength.setGsm(isGsm);
            }
            mSignalStrength.setLteRsrpBoost(mSS.getLteEarfcnRsrpBoost());
            mSignalStrength.setUseOnlyRsrpForLteLevel(isUseOnlyRsrpForLteLevel());
            mSignalStrength.setLteRsrpThresholds(getLteRsrpThresholds());

            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));
        } else {
            log("onSignalStrengthResult() Exception from RIL : " + ar.exception);
            mSignalStrength = new SignalStrength(isGsm);
@@ -4519,26 +4527,6 @@ public class ServiceStateTracker extends Handler {
        return regState;
    }

    /**
     * Check whether to use only RSRP for the number of LTE signal bar.
     *
     * @return true if it should use only RSRP for the number of LTE signal bar.
     */
    private boolean isUseOnlyRsrpForLteLevel() {
        return getCarrierConfig().getBoolean(
                CarrierConfigManager.KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL);
    }

    /**
     * Gets the threshold array for determining the display level of LTE signal bar.
     *
     * @return int array for determining the display level.
     */
    private int[] getLteRsrpThresholds() {
        return getCarrierConfig().getIntArray(
                CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY);
    }

    /**
     * Gets the carrier configuration values for a particular subscription.
     *
+142 −0
Original line number Diff line number Diff line
@@ -427,6 +427,148 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        assertEquals(sst.getSignalStrength().isGsm(), false);
    }

    @Test
    @MediumTest
    public void testSignalLevelWithWcdmaRscpThresholds() {
        mBundle.putIntArray(CarrierConfigManager.KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY,
                new int[] {
                        -110, /* SIGNAL_STRENGTH_POOR */
                        -100, /* SIGNAL_STRENGTH_MODERATE */
                        -90, /* SIGNAL_STRENGTH_GOOD */
                        -80  /* SIGNAL_STRENGTH_GREAT */
                });
        mBundle.putString(
                CarrierConfigManager.KEY_WCDMA_DEFAULT_SIGNAL_STRENGTH_MEASUREMENT_STRING,
                "rscp");

        SignalStrength ss = new SignalStrength(
                30, // 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
                99,                         // wcdmaSignalStrength
                45                         // wcdmaRscpAsu
        );
        mSimulatedCommands.setSignalStrength(ss);
        mSimulatedCommands.notifySignalStrength();
        waitForMs(300);
        assertEquals(sst.getSignalStrength(), ss);
        assertEquals(sst.getSignalStrength().getWcdmaLevel(), SignalStrength.SIGNAL_STRENGTH_GREAT);
        assertEquals(sst.getSignalStrength().getWcdmaAsuLevel(), 45);
        assertEquals(sst.getSignalStrength().getWcdmaDbm(), -75);

        ss = new SignalStrength(
                30, // 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
                99,                         // wcdmaSignalStrength
                35                          // wcdmaRscpAsu
        );
        mSimulatedCommands.setSignalStrength(ss);
        mSimulatedCommands.notifySignalStrength();
        waitForMs(300);
        assertEquals(sst.getSignalStrength(), ss);
        assertEquals(sst.getSignalStrength().getWcdmaLevel(), SignalStrength.SIGNAL_STRENGTH_GOOD);
        assertEquals(sst.getSignalStrength().getWcdmaAsuLevel(), 35);
        assertEquals(sst.getSignalStrength().getWcdmaDbm(), -85);

        ss = new SignalStrength(
                30, // 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
                99,                         // wcdmaSignalStrength
                25                          // wcdmaRscpAsu
        );
        mSimulatedCommands.setSignalStrength(ss);
        mSimulatedCommands.notifySignalStrength();
        waitForMs(300);
        assertEquals(sst.getSignalStrength(), ss);
        assertEquals(sst.getSignalStrength().getWcdmaLevel(),
                SignalStrength.SIGNAL_STRENGTH_MODERATE);
        assertEquals(sst.getSignalStrength().getWcdmaAsuLevel(), 25);
        assertEquals(sst.getSignalStrength().getWcdmaDbm(), -95);

        ss = new SignalStrength(
                30, // 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
                99,                         // wcdmaSignalStrength
                15                          // wcdmaRscpAsu
        );
        mSimulatedCommands.setSignalStrength(ss);
        mSimulatedCommands.notifySignalStrength();
        waitForMs(300);
        assertEquals(sst.getSignalStrength(), ss);
        assertEquals(sst.getSignalStrength().getWcdmaLevel(), SignalStrength.SIGNAL_STRENGTH_POOR);
        assertEquals(sst.getSignalStrength().getWcdmaAsuLevel(), 15);
        assertEquals(sst.getSignalStrength().getWcdmaDbm(), -105);

        ss = new SignalStrength(
                30, // 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
                99,                         // wcdmaSignalStrength
                5                           // wcdmaRscpAsu
        );
        mSimulatedCommands.setSignalStrength(ss);
        mSimulatedCommands.notifySignalStrength();
        waitForMs(300);
        assertEquals(sst.getSignalStrength(), ss);
        assertEquals(sst.getSignalStrength().getWcdmaLevel(),
                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
        assertEquals(sst.getSignalStrength().getWcdmaAsuLevel(), 5);
        assertEquals(sst.getSignalStrength().getWcdmaDbm(), -115);
    }

    @Test
    @MediumTest
    public void testGsmCellLocation() {
+19 −16
Original line number Diff line number Diff line
@@ -63,9 +63,12 @@ public class SignalStrengthTest {
                -115,    // lteRssnr
                13,      // lteCqi
                -90,     // tdscdmaRscp
                45,      // wcdmaSignalStrength
                20,      // wcdmaRscpAsu
                2,       // lteRsrpBoost
                false,   // gsmFlag
                true); // lteLevelBaseOnRsrp
                true,    // lteLevelBaseOnRsrp
                "rscp"); // wcdmaDefaultMeasurement
        assertParcelingIsLossless(s);
    }