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

Commit 81ea3735 authored by Hakjun Choi's avatar Hakjun Choi
Browse files

Prevent redundent command to modem for startSendingNtnSignalStrength

SatelliteController was flooding modem with a command.
Therefore a cache was intoduced to compare the current modem state with
the expected state and to ignore command that match.

Bug: 308838372
Test: Manually test and verify via tracking log.

Change-Id: Icf4eba2afaffe098e7193d5c21de666882516ba9
parent 369eea36
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -214,6 +214,7 @@ public class SatelliteController extends Handler {
    private final AtomicBoolean mRegisteredForNtnSignalStrengthChanged = new AtomicBoolean(false);
    private final AtomicBoolean mRegisteredForSatelliteCapabilitiesChanged =
            new AtomicBoolean(false);
    private final AtomicBoolean mShouldReportNtnSignalStrength = new AtomicBoolean(false);
    /**
     * Map key: subId, value: callback to get error code of the provision request.
     */
@@ -1184,12 +1185,21 @@ public class SatelliteController extends Handler {
            case CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: {
                ar = (AsyncResult) msg.obj;
                boolean shouldReport = (boolean) ar.result;
                if (DBG) {
                    logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: shouldReport=" + shouldReport);
                }
                request = new SatelliteControllerHandlerRequest(shouldReport,
                        SatelliteServiceUtils.getPhone());
                if (SATELLITE_RESULT_SUCCESS != evaluateOemSatelliteRequestAllowed(true)) {
                    return;
                }
                if (mShouldReportNtnSignalStrength.get() == shouldReport) {
                    if (DBG) {
                        logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING : modem state matches the "
                                + "expected state, return.");
                    }
                    return;
                }
                onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE,
                        request);
                if (shouldReport) {
@@ -1203,9 +1213,12 @@ public class SatelliteController extends Handler {
            case EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE: {
                ar = (AsyncResult) msg.obj;
                request = (SatelliteControllerHandlerRequest) ar.userObj;
                boolean shouldReport = (boolean) request.argument;
                int errorCode =  SatelliteServiceUtils.getSatelliteError(ar,
                        "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE");
                if (errorCode != SATELLITE_RESULT_SUCCESS) {
                if (errorCode == SATELLITE_RESULT_SUCCESS) {
                    mShouldReportNtnSignalStrength.set(shouldReport);
                } else {
                    loge(((boolean) request.argument ? "startSendingNtnSignalStrength"
                            : "stopSendingNtnSignalStrength") + "returns " + errorCode);
                }
+43 −1
Original line number Diff line number Diff line
@@ -2273,6 +2273,13 @@ public class SatelliteControllerTest extends TelephonyTest {
        verify(mMockSatelliteModemInterface, times(1))
                .startSendingNtnSignalStrength(any(Message.class));

        // requested again but ignored as expected and current state are matched.
        setUpResponseForStartSendingNtnSignalStrength(expectedResult);
        sendCmdStartSendingNtnSignalStrengthChangedEvent(true);
        processAllMessages();
        verify(mMockSatelliteModemInterface, times(1))
                .startSendingNtnSignalStrength(any(Message.class));

        // stopSendingNtnSignalStrength() is requested when screen off event comes.
        reset(mMockSatelliteModemInterface);
        setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);
@@ -2284,6 +2291,13 @@ public class SatelliteControllerTest extends TelephonyTest {
        verify(mMockSatelliteModemInterface, times(1))
                .stopSendingNtnSignalStrength(any(Message.class));

        // requested again but ignored as expected and current state are matched.
        setUpResponseForStopSendingNtnSignalStrength(expectedResult);
        sendCmdStartSendingNtnSignalStrengthChangedEvent(false);
        processAllMessages();
        verify(mMockSatelliteModemInterface, times(1))
                .stopSendingNtnSignalStrength(any(Message.class));

        // startSendingNtnSignalStrength() is requested but received fail from the service.
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
@@ -2293,7 +2307,26 @@ public class SatelliteControllerTest extends TelephonyTest {
        verify(mMockSatelliteModemInterface, times(1))
                .startSendingNtnSignalStrength(any(Message.class));

        // stopSendingNtnSignalStrength() is requested but received fail from the service.
        /* stopSendingNtnSignalStrength() is ignored because startSendingNtnSignalStrength has
           failed thus current state is stopSendingNtnSignalStrength */
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForStopSendingNtnSignalStrength(SATELLITE_RESULT_NO_RESOURCES);
        sendCmdStartSendingNtnSignalStrengthChangedEvent(false);
        processAllMessages();
        verify(mMockSatelliteModemInterface, never())
                .stopSendingNtnSignalStrength(any(Message.class));

        // startSendingNtnSignalStrength() is requested and modem state is changed
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForStartSendingNtnSignalStrength(SATELLITE_RESULT_SUCCESS);
        sendCmdStartSendingNtnSignalStrengthChangedEvent(true);
        processAllMessages();
        verify(mMockSatelliteModemInterface, times(1))
                .startSendingNtnSignalStrength(any(Message.class));

        // stopSendingNtnSignalStrength() is failed as modem returns error
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForStopSendingNtnSignalStrength(SATELLITE_RESULT_NO_RESOURCES);
@@ -2301,6 +2334,15 @@ public class SatelliteControllerTest extends TelephonyTest {
        processAllMessages();
        verify(mMockSatelliteModemInterface, times(1))
                .stopSendingNtnSignalStrength(any(Message.class));

        // request stopSendingNtnSignalStrength() again and returns success
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForStopSendingNtnSignalStrength(SATELLITE_RESULT_SUCCESS);
        sendCmdStartSendingNtnSignalStrengthChangedEvent(false);
        processAllMessages();
        verify(mMockSatelliteModemInterface, times(1))
                .stopSendingNtnSignalStrength(any(Message.class));
    }

    @Test