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

Commit 621534f5 authored by Hakjun Choi's avatar Hakjun Choi
Browse files

Add additional scenario for requesting ntn signal strength report

When there is a case satellite ie not enabled yet, but DSM requested signal streangth report, it misses request command to modem

Bug: 331083865
Test: atest SatelliteControllerTest
      manual test to verify whether request reporting NTN signal
      strength, whenever satellite is enabled/disabled.
Change-Id: I3d0fed6931fcabcbf807de4e309a088a38fcb071
parent 984430a0
Loading
Loading
Loading
Loading
+52 −22
Original line number Diff line number Diff line
@@ -248,7 +248,8 @@ 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);
    private final AtomicBoolean mIsModemEnabledReportingNtnSignalStrength =
            new AtomicBoolean(false);
    /**
     * Map key: subId, value: callback to get error code of the provision request.
     */
@@ -938,6 +939,8 @@ public class SatelliteController extends Handler {
                            mWaitingForDisableSatelliteModemResponse = false;
                        }
                    }
                    // Request Ntn signal strength report when satellite enabled or disabled done.
                    updateNtnSignalStrengthReporting(argument.enableSatellite);
                } else {
                    synchronized (mSatelliteEnabledRequestLock) {
                        if (mSatelliteEnabledRequest != null &&
@@ -1265,24 +1268,7 @@ public class SatelliteController extends Handler {
                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 (!isSatelliteEnabled() || mShouldReportNtnSignalStrength.get() == shouldReport) {
                    if (DBG) {
                        logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: ignore request.");
                    }
                    return;
                }
                onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE,
                        request);
                if (shouldReport) {
                    mSatelliteModemInterface.startSendingNtnSignalStrength(onCompleted);
                } else {
                    mSatelliteModemInterface.stopSendingNtnSignalStrength(onCompleted);
                }
                handleCmdUpdateNtnSignalStrengthReporting(shouldReport);
                break;
            }

@@ -1291,9 +1277,10 @@ public class SatelliteController extends Handler {
                request = (SatelliteControllerHandlerRequest) ar.userObj;
                boolean shouldReport = (boolean) request.argument;
                int errorCode =  SatelliteServiceUtils.getSatelliteError(ar,
                        "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE");
                        "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE: shouldReport="
                                + shouldReport);
                if (errorCode == SATELLITE_RESULT_SUCCESS) {
                    mShouldReportNtnSignalStrength.set(shouldReport);
                    mIsModemEnabledReportingNtnSignalStrength.set(shouldReport);
                } else {
                    loge(((boolean) request.argument ? "startSendingNtnSignalStrength"
                            : "stopSendingNtnSignalStrength") + "returns " + errorCode);
@@ -2927,7 +2914,7 @@ public class SatelliteController extends Handler {
            loge(caller + ": mSatelliteSessionController is not initialized yet");
        }
        if (!enabled) {
            mShouldReportNtnSignalStrength.set(false);
            mIsModemEnabledReportingNtnSignalStrength.set(false);
        }
    }

@@ -3925,6 +3912,49 @@ public class SatelliteController extends Handler {
        }
    }

    private void handleCmdUpdateNtnSignalStrengthReporting(boolean shouldReport) {
        if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
            logd("handleCmdUpdateNtnSignalStrengthReporting: oemEnabledSatelliteFlag is "
                    + "disabled");
            return;
        }

        if (!isSatelliteEnabled()) {
            logd("handleCmdUpdateNtnSignalStrengthReporting: ignore request, satellite is "
                    + "disabled");
            return;
        }

        if (mIsModemEnabledReportingNtnSignalStrength.get() == shouldReport) {
            logd("handleCmdUpdateNtnSignalStrengthReporting: ignore request. "
                    + "mIsModemEnabledReportingNtnSignalStrength="
                    + mIsModemEnabledReportingNtnSignalStrength.get());
            return;
        }

        updateNtnSignalStrengthReporting(shouldReport);
    }

    private void updateNtnSignalStrengthReporting(boolean shouldReport) {
        if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
            logd("updateNtnSignalStrengthReporting: oemEnabledSatelliteFlag is "
                    + "disabled");
            return;
        }

        SatelliteControllerHandlerRequest request = new SatelliteControllerHandlerRequest(
                shouldReport, SatelliteServiceUtils.getPhone());
        Message onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE,
                request);
        if (shouldReport) {
            logd("updateNtnSignalStrengthReporting: startSendingNtnSignalStrength");
            mSatelliteModemInterface.startSendingNtnSignalStrength(onCompleted);
        } else {
            logd("updateNtnSignalStrengthReporting: stopSendingNtnSignalStrength");
            mSatelliteModemInterface.stopSendingNtnSignalStrength(onCompleted);
        }
    }

    /**
     * This API can be used by only CTS to override the cached value for the device overlay config
     * value : config_send_satellite_datagram_to_modem_in_demo_mode, which determines whether
+89 −0
Original line number Diff line number Diff line
@@ -3196,6 +3196,95 @@ public class SatelliteControllerTest extends TelephonyTest {
        verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS);
    }

    @Test
    public void testUpdateNtnSignalStrentghReportWithFeatureFlagEnabled() {
        when(mFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true);

        mIsSatelliteEnabledSemaphore.drainPermits();
        mIIntegerConsumerResults.clear();
        resetSatelliteControllerUT();

        // Successfully provisioned
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
        verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
        sendProvisionedStateChangedEvent(true, null);
        setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);
        sendProvisionedStateChangedEvent(true, null);
        processAllMessages();
        verifySatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);

        // startSendingNtnSignalStrength should be invoked when satellite is enabled
        mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
        setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_RESULT_SUCCESS);
        mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
        verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS);
        assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
        assertEquals(
                SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue);
        verify(mMockSatelliteModemInterface, times(1)).startSendingNtnSignalStrength(
                any(Message.class));

        // Ignore request ntn signal strength for redundant enable request
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
        verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS);
        verify(mMockSatelliteModemInterface, never()).startSendingNtnSignalStrength(
                any(Message.class));

        // stopSendingNtnSignalStrength should be invoked when satellite is successfully off.
        mIIntegerConsumerResults.clear();
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_RESULT_SUCCESS);
        mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
        verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS);
        verify(mMockSatelliteModemInterface, times(1)).stopSendingNtnSignalStrength(
                any(Message.class));

        // Ignore redundant request for stop reporting ntn signal strength.
        mIIntegerConsumerResults.clear();
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        mIIntegerConsumerResults.clear();
        setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_RESULT_SUCCESS);
        mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer);
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
        verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS);
        verify(mMockSatelliteModemInterface, never()).stopSendingNtnSignalStrength(
                any(Message.class));

        // startSendingNtnSignalStrength is invoked when satellite is enabled again.
        mIIntegerConsumerResults.clear();
        reset(mMockSatelliteModemInterface);
        doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported();
        mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
        setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_RESULT_SUCCESS);
        mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer);
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
        verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS);
        assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled);
        assertEquals(
                SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue);
        verify(mMockSatelliteModemInterface, times(1)).startSendingNtnSignalStrength(
                any(Message.class));
    }

    private void resetSatelliteControllerUTEnabledState() {
        logd("resetSatelliteControllerUTEnabledState");
        setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RESULT_RADIO_NOT_AVAILABLE);