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

Commit 9203b8e8 authored by SongFerngWang's avatar SongFerngWang
Browse files

To improve signal strength notification after service state change

Signal bar level is wrong after user switch WFC. Because telephony don't send
signal strength notification after service state change.

Bug: 110189009
Test: manual - to check signal strength notification after service state
change. e.g. airplane mode on/off , preferred network mode change.

Change-Id: I27dccdb10769131c3b898f1145fe653a1349e774
Merged-In: I27dccdb10769131c3b898f1145fe653a1349e774
parent 8ac8303f
Loading
Loading
Loading
Loading
+29 −19
Original line number Diff line number Diff line
@@ -2996,6 +2996,9 @@ public class ServiceStateTracker extends Handler {

        if (hasRilDataRadioTechnologyChanged || hasRilVoiceRadioTechnologyChanged) {
            logRatChange();

            updateRatTypeForSignalStrength();
            notifySignalStrength();
        }

        if (hasDataRegStateChanged || hasRilDataRadioTechnologyChanged) {
@@ -4091,18 +4094,6 @@ public class ServiceStateTracker extends Handler {
     * @return true if the signal strength changed and a notification was sent.
     */
    protected boolean onSignalStrengthResult(AsyncResult ar) {
        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;
        }

        // This signal is used for both voice and data radio signal so parse
        // all fields
@@ -4110,12 +4101,6 @@ public class ServiceStateTracker extends Handler {
        if ((ar.exception == null) && (ar.result != null)) {
            mSignalStrength = (SignalStrength) ar.result;
            mSignalStrength.validateInput();
            if (dataRat == ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN
                    && voiceRat == ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN) {
                mSignalStrength.fixType();
            } else {
                mSignalStrength.setGsm(isGsm);
            }
            mSignalStrength.setLteRsrpBoost(mSS.getLteEarfcnRsrpBoost());

            PersistableBundle config = getCarrierConfig();
@@ -4129,14 +4114,39 @@ public class ServiceStateTracker extends Handler {
                    CarrierConfigManager.KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY));
        } else {
            log("onSignalStrengthResult() Exception from RIL : " + ar.exception);
            mSignalStrength = new SignalStrength(isGsm);
            mSignalStrength = new SignalStrength(true);
        }

        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.
     */