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

Commit 1c3860b0 authored by Thomas Nguyen's avatar Thomas Nguyen Committed by Automerger Merge Worker
Browse files

Merge "Update signal strength level on carrier config changed" into main am:...

Merge "Update signal strength level on carrier config changed" into main am: 6bf3337a am: 75b9bea2 am: c4e41063

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/2663958



Change-Id: I81b69e2fae277d67ccf8d56e8fcfdaf5c13d87e8
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 08a2e768 c4e41063
Loading
Loading
Loading
Loading
+28 −23
Original line number Diff line number Diff line
@@ -294,31 +294,38 @@ public class SignalStrengthController extends Handler {
    }

    /**
     * send signal-strength-changed notification if changed Called both for
     * solicited and unsolicited signal strength updates
     *
     * @return true if the signal strength changed and a notification was sent.
     * Send signal-strength-changed notification if changed. Called for both solicited and
     * unsolicited signal strength updates.
     */
    private boolean onSignalStrengthResult(@NonNull AsyncResult ar) {

        // This signal is used for both voice and data radio signal so parse
        // all fields
    private void onSignalStrengthResult(@NonNull AsyncResult ar) {
        // This signal is used for both voice and data radio signal so parse all fields.

        SignalStrength signalStrength;
        if ((ar.exception == null) && (ar.result != null)) {
            mSignalStrength = (SignalStrength) ar.result;

            if (mPhone.getServiceStateTracker() != null) {
                mSignalStrength.updateLevel(mCarrierConfig, mPhone.getServiceStateTracker().mSS);
            signalStrength = (SignalStrength) ar.result;
        } else {
            loge("onSignalStrengthResult() Exception from RIL : " + ar.exception);
            signalStrength = new SignalStrength();
        }
        updateSignalStrength(signalStrength);
    }

    /**
     * Set {@code mSignalStrength} to the input argument {@code signalStrength}, update its level,
     * and send signal-strength-changed notification if changed.
     *
     * @param signalStrength The new SignalStrength used for updating {@code mSignalStrength}.
     */
    private void updateSignalStrength(@NonNull SignalStrength signalStrength) {
        mSignalStrength = signalStrength;
        ServiceStateTracker serviceStateTracker = mPhone.getServiceStateTracker();
        if (serviceStateTracker != null) {
            mSignalStrength.updateLevel(mCarrierConfig, serviceStateTracker.mSS);
        } else {
            log("onSignalStrengthResult() Exception from RIL : " + ar.exception);
            mSignalStrength = new SignalStrength();
            loge("updateSignalStrength: serviceStateTracker is null");
        }
        mSignalStrengthUpdatedTime = System.currentTimeMillis();

        boolean ssChanged = notifySignalStrength();

        return ssChanged;
        notifySignalStrength();
    }

    /**
@@ -720,20 +727,17 @@ public class SignalStrengthController extends Handler {
        mSignalStrengthUpdatedTime = System.currentTimeMillis();
    }

    boolean notifySignalStrength() {
        boolean notified = false;
    void notifySignalStrength() {
        if (!mSignalStrength.equals(mLastSignalStrength)) {
            try {
                mSignalStrengthChangedRegistrants.notifyRegistrants();
                mPhone.notifySignalStrength();
                notified = true;
                mLastSignalStrength = mSignalStrength;
            } catch (NullPointerException ex) {
                log("updateSignalStrength() Phone already destroyed: " + ex
                loge("updateSignalStrength() Phone already destroyed: " + ex
                        + "SignalStrength not notified");
            }
        }
        return notified;
    }

    /**
@@ -1132,6 +1136,7 @@ public class SignalStrengthController extends Handler {

        updateArfcnLists();
        updateReportingCriteria();
        updateSignalStrength(new SignalStrength(mSignalStrength));
    }

    private static SignalThresholdInfo createSignalThresholdsInfo(
+53 −0
Original line number Diff line number Diff line
@@ -959,6 +959,59 @@ public class SignalStrengthControllerTest extends TelephonyTest {
        assertThat(msgCaptor.getValue().what).isEqualTo(ssChangedEvent);
    }

    @Test
    public void testSignalStrengthLevelUpdatedDueToCarrierConfigChanged() {
        Handler mockRegistrant = Mockito.mock(Handler.class);
        ArgumentCaptor<Message> msgCaptor = ArgumentCaptor.forClass(Message.class);
        int ssChangedEvent = 0;
        mSsc.registerForSignalStrengthChanged(mockRegistrant, ssChangedEvent, null);

        SignalStrength ss = new SignalStrength(
                new CellSignalStrengthCdma(),
                new CellSignalStrengthGsm(),
                new CellSignalStrengthWcdma(),
                new CellSignalStrengthTdscdma(),
                new CellSignalStrengthLte(
                        -110, /* rssi */
                        -114, /* rsrp */
                        -5, /* rsrq */
                        0, /* rssnr */
                        SignalStrength.INVALID, /* cqi */
                        SignalStrength.INVALID /* ta */),
                new CellSignalStrengthNr());

        mBundle.putBoolean(CarrierConfigManager.KEY_USE_ONLY_RSRP_FOR_LTE_SIGNAL_BAR_BOOL, true);

        sendCarrierConfigUpdate();
        verify(mockRegistrant).sendMessageDelayed(msgCaptor.capture(), Mockito.anyLong());
        assertThat(msgCaptor.getValue().what).isEqualTo(ssChangedEvent);
        assertEquals(CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN,
                mSsc.getSignalStrength().getLevel());

        Mockito.clearInvocations(mockRegistrant);
        mSimulatedCommands.setSignalStrength(ss);
        mSimulatedCommands.notifySignalStrength();
        processAllMessages();
        // Default thresholds are POOR=-115 MODERATE=-105 GOOD=-95 GREAT=-85
        assertEquals(CellSignalStrength.SIGNAL_STRENGTH_POOR, mSsc.getSignalStrength().getLevel());
        verify(mockRegistrant).sendMessageDelayed(msgCaptor.capture(), Mockito.anyLong());
        assertThat(msgCaptor.getValue().what).isEqualTo(ssChangedEvent);

        Mockito.clearInvocations(mockRegistrant);
        int[] lteThresholds = {
                -130, // SIGNAL_STRENGTH_POOR
                -120, // SIGNAL_STRENGTH_MODERATE
                -110, // SIGNAL_STRENGTH_GOOD
                -100,  // SIGNAL_STRENGTH_GREAT
        };
        mBundle.putIntArray(CarrierConfigManager.KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY, lteThresholds);
        sendCarrierConfigUpdate();
        assertEquals(CellSignalStrength.SIGNAL_STRENGTH_MODERATE,
                mSsc.getSignalStrength().getLevel());
        verify(mockRegistrant).sendMessageDelayed(msgCaptor.capture(), Mockito.anyLong());
        assertThat(msgCaptor.getValue().what).isEqualTo(ssChangedEvent);
    }

    private void verifyAllEmptyThresholdAreDisabledWhenSetSignalStrengthReportingCriteria(
            int expectedNonEmptyThreshold) {
        ArgumentCaptor<List<SignalThresholdInfo>> signalThresholdInfoCaptor =