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

Commit 84e045d8 authored by Han Sol Jin's avatar Han Sol Jin
Browse files

Revert "Clear up the obsoleted cascading signal strength polling logic"

Some vendors appear to not use the standard UNSOL command to deliver
signal strength, or not send an UNSOL at all. In particular, on LG
devices with SDM845 or later chipset, LG's custom RIL stack does not
appear to be sending neither the AOSP nor the LG variant of
RIL_UNSOL_SIGNAL_STRENGTH whatsoever.

Because the polling logic was removed, these devices are currently
stuck on default SignalStrength values forever.

Bring it back.

This reverts commit 682dd4df.

Test: *#*#4636#*#* -> disable/enable radio power
Fixes: https://gitlab.com/LineageOS/issues/android/-/issues/6954
Change-Id: I149a129d39291fa67fa5c05c94fa7a4cb87e106b
parent bfc901e7
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1326,6 +1326,8 @@ public class ServiceStateTracker extends Handler {
                mPrevSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
                mIsSimReady = true;
                pollStateInternal(false);
                // Signal strength polling stops when radio is off
                queueNextSignalStrengthPoll();
                break;

            case EVENT_RADIO_STATE_CHANGED:
@@ -1333,6 +1335,9 @@ public class ServiceStateTracker extends Handler {
                if(!mPhone.isPhoneTypeGsm() &&
                        mCi.getRadioState() == TelephonyManager.RADIO_POWER_ON) {
                    handleCdmaSubscriptionSource(mCdmaSSM.getCdmaSubscriptionSource());

                    // Signal strength polling stops when radio is off.
                    queueNextSignalStrengthPoll();
                }
                // This will do nothing in the 'radio not available' case
                setPowerStateToDesired();
@@ -4748,6 +4753,10 @@ public class ServiceStateTracker extends Handler {
        }
    }

    private void queueNextSignalStrengthPoll() {
        mPhone.getSignalStrengthController().queueNextSignalStrengthPoll();
    }

    private void notifyCdmaSubscriptionInfoReady() {
        if (mCdmaForSubscriptionInfoReadyRegistrants != null) {
            if (DBG) log("CDMA_SUBSCRIPTION: call notifyRegistrants()");
+38 −0
Original line number Diff line number Diff line
@@ -41,11 +41,15 @@ import android.telephony.SignalStrength;
import android.telephony.SignalStrengthUpdateRequest;
import android.telephony.SignalThresholdInfo;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.LocalLog;
import android.util.Pair;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.UiccCard;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.telephony.Rlog;
@@ -109,6 +113,12 @@ public class SignalStrengthController extends Handler {
    private long mSignalStrengthUpdatedTime;
    @Nullable
    private SignalStrength mLastSignalStrength = null;
    /**
     * By default, strength polling is enabled.  However, if we're
     * getting unsolicited signal strength updates from the radio, set
     * value to true and don't bother polling any more.
     */
    private boolean mDontPollSignalStrength = false;

    /**
     * List of LTE EARFCNs (E-UTRAN Absolute Radio Frequency Channel Number,
@@ -263,6 +273,8 @@ public class SignalStrengthController extends Handler {
                }
                ar = (AsyncResult) msg.obj;
                onSignalStrengthResult(ar);
                queueNextSignalStrengthPoll();

                break;
            }

@@ -277,6 +289,11 @@ public class SignalStrengthController extends Handler {
                // This is a notification from CommandsInterface.setOnSignalStrengthUpdate

                ar = (AsyncResult) msg.obj;

                // The radio is telling us about signal strength changes
                // we don't have to ask it
                mDontPollSignalStrength = true;

                onSignalStrengthResult(ar);
                break;
            }
@@ -381,6 +398,26 @@ public class SignalStrengthController extends Handler {
        return false;
    }

    void queueNextSignalStrengthPoll() {
        if (mDontPollSignalStrength) {
            // The radio is telling us about signal strength changes
            // we don't have to ask it
            return;
        }

        // if there is no SIM present, do not poll signal strength
        UiccCard uiccCard = UiccController.getInstance().getUiccCard(
                mPhone != null ? mPhone.getPhoneId() : SubscriptionManager.DEFAULT_PHONE_INDEX);
        if (uiccCard == null
                || uiccCard.getCardState() == IccCardStatus.CardState.CARDSTATE_ABSENT) {
            log("Not polling signal strength due to absence of SIM");
            return;
        }

        // TODO Don't poll signal strength if screen is off
        sendMessageDelayed(obtainMessage(EVENT_POLL_SIGNAL_STRENGTH), POLL_PERIOD_MILLIS);
    }

    /**
     * Update signal strength reporting criteria from the carrier config
     */
@@ -628,6 +665,7 @@ public class SignalStrengthController extends Handler {
        pw.println("mSignalRequestRecords=" + mSignalRequestRecords);
        pw.println(" mLastSignalStrength=" + mLastSignalStrength);
        pw.println(" mSignalStrength=" + mSignalStrength);
        pw.println(" mDontPollSignalStrength=" + mDontPollSignalStrength);
        pw.println(" mLteRsrpBoost=" + mLteRsrpBoost);
        pw.println(" mNrRsrpBoost=" + Arrays.toString(mNrRsrpBoost));
        pw.println(" mEarfcnPairListForRsrpBoost=" + mEarfcnPairListForRsrpBoost);