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

Commit 6bf3337a authored by Thomas Nguyen's avatar Thomas Nguyen Committed by Gerrit Code Review
Browse files

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

parents 88bcb020 4f5a1142
Loading
Loading
Loading
Loading
+28 −23
Original line number Original line Diff line number Diff line
@@ -313,31 +313,38 @@ public class SignalStrengthController extends Handler {
    }
    }


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

        // This signal is used for both voice and data radio signal so parse all fields.
        // This signal is used for both voice and data radio signal so parse
        // all fields


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

        } else {
            if (mPhone.getServiceStateTracker() != null) {
            loge("onSignalStrengthResult() Exception from RIL : " + ar.exception);
                mSignalStrength.updateLevel(mCarrierConfig, mPhone.getServiceStateTracker().mSS);
            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 {
        } else {
            log("onSignalStrengthResult() Exception from RIL : " + ar.exception);
            loge("updateSignalStrength: serviceStateTracker is null");
            mSignalStrength = new SignalStrength();
        }
        }
        mSignalStrengthUpdatedTime = System.currentTimeMillis();
        mSignalStrengthUpdatedTime = System.currentTimeMillis();

        notifySignalStrength();
        boolean ssChanged = notifySignalStrength();

        return ssChanged;
    }
    }


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


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


    /**
    /**
@@ -1016,6 +1020,7 @@ public class SignalStrengthController extends Handler {


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


    private static SignalThresholdInfo createSignalThresholdsInfo(
    private static SignalThresholdInfo createSignalThresholdsInfo(
+53 −0
Original line number Original line Diff line number Diff line
@@ -737,6 +737,59 @@ public class SignalStrengthControllerTest extends TelephonyTest {
        assertThat(msgCaptor.getValue().what).isEqualTo(ssChangedEvent);
        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(
    private void verifyAllEmptyThresholdAreDisabledWhenSetSignalStrengthReportingCriteria(
            int expectedNonEmptyThreshold) {
            int expectedNonEmptyThreshold) {
        ArgumentCaptor<List<SignalThresholdInfo>> signalThresholdInfoCaptor =
        ArgumentCaptor<List<SignalThresholdInfo>> signalThresholdInfoCaptor =