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

Commit ddc9b446 authored by Hakjun Choi's avatar Hakjun Choi Committed by Automerger Merge Worker
Browse files

Merge "Add additional scenario for requesting ntn signal strength report" into...

Merge "Add additional scenario for requesting ntn signal strength report" into 24D1-dev am: 583cc5ef

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



Change-Id: Ice757e05d6f3c3ad82169c6b11e8352e3a1fd1af
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 4f3d8eb4 583cc5ef
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);
        }
    }

@@ -3932,6 +3919,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
@@ -3186,6 +3186,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);