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

Commit 6171d7ff authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Enable modem with SatelliteModemEnableRequestAttributes" into main

parents 8d3712c9 af8e6954
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -115,8 +115,10 @@ import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteCapabilities;
import android.telephony.satellite.SatelliteDatagram;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteModemEnableRequestAttributes;
import android.telephony.satellite.SatelliteSubscriberInfo;
import android.telephony.satellite.SatelliteSubscriberProvisionStatus;
import android.telephony.satellite.SatelliteSubscriptionInfo;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
@@ -3607,8 +3609,9 @@ public class SatelliteController extends Handler {
        }

        Message onCompleted = obtainMessage(EVENT_SET_SATELLITE_ENABLED_DONE, request);
        mSatelliteModemInterface.requestSatelliteEnabled(argument.enableSatellite,
                argument.enableDemoMode, argument.isEmergency, onCompleted);
        mSatelliteModemInterface.requestSatelliteEnabled(
                createModemEnableRequest(argument),
                onCompleted);
        startWaitForSatelliteEnablingResponseTimer(argument);
        // Logs satellite session timestamps for session metrics
        if (argument.enableSatellite) {
@@ -3617,6 +3620,21 @@ public class SatelliteController extends Handler {
        mSessionProcessingTimeStamp = System.currentTimeMillis();
    }

    /** Get the request attributes that modem needs to enable/disable satellite */
    private SatelliteModemEnableRequestAttributes createModemEnableRequest(
            @NonNull RequestSatelliteEnabledArgument arg) {
        int subId = mSubscriptionManagerService.getDefaultSubId();
        synchronized (mSatellitePhoneLock) {
            if (mSatellitePhone != null) subId = mSatellitePhone.getSubId();
        }
        SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(subId);
        String iccid = subInfo != null ? subInfo.getIccId() : "";
        String apn = getConfigForSubId(subId).getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, "");
        return new SatelliteModemEnableRequestAttributes(
                arg.enableSatellite, arg.enableDemoMode, arg.isEmergency,
                new SatelliteSubscriptionInfo(iccid, apn));
    }

    private void handleRequestSatelliteAttachRestrictionForCarrierCmd(
            SatelliteControllerHandlerRequest request) {
        RequestHandleSatelliteAttachRestrictionForCarrierArgument argument =
@@ -5705,7 +5723,7 @@ public class SatelliteController extends Handler {
                    String subscriberId = subscriberIdPair.first;
                    int carrierId = info.getCarrierId();
                    String apn = getConfigForSubId(info.getSubscriptionId())
                            .getString(KEY_SATELLITE_NIDD_APN_NAME_STRING);
                            .getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, "");
                    logd("requestSatelliteSubscriberProvisionStatus: subscriberId:"
                            + subscriberId + " , carrierId=" + carrierId + " , apn=" + apn);
                    if (subscriberId.isEmpty()) {
+7 −7
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.telephony.satellite.SatelliteCapabilities;
import android.telephony.satellite.SatelliteDatagram;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteManager.SatelliteException;
import android.telephony.satellite.SatelliteModemEnableRequestAttributes;
import android.telephony.satellite.stub.INtnSignalStrengthConsumer;
import android.telephony.satellite.stub.ISatellite;
import android.telephony.satellite.stub.ISatelliteCapabilitiesConsumer;
@@ -654,17 +655,16 @@ public class SatelliteModemInterface {
     * is enabled, this may also disable the cellular modem, and if the satellite modem is disabled,
     * this may also re-enable the cellular modem.
     *
     * @param enableSatellite True to enable the satellite modem and false to disable.
     * @param enableDemoMode True to enable demo mode and false to disable.
     * @param isEmergency {@code true} to enable emergency mode, {@code false} otherwise.
     * @param enableAttributes info needed to allow carrier to roam to satellite.
     * @param message The Message to send to result of the operation to.
     */
    public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
            boolean isEmergency, @NonNull Message message) {
    public void requestSatelliteEnabled(SatelliteModemEnableRequestAttributes enableAttributes,
            @NonNull Message message) {
        if (mSatelliteService != null) {
            try {
                mSatelliteService.requestSatelliteEnabled(enableSatellite, enableDemoMode,
                        isEmergency, new IIntegerConsumer.Stub() {
                mSatelliteService.requestSatelliteEnabled(SatelliteServiceUtils
                        .toSatelliteModemEnableRequestAttributes(enableAttributes),
                        new IIntegerConsumer.Stub() {
                            @Override
                            public void accept(int result) {
                                int error = SatelliteServiceUtils.fromSatelliteError(result);
+37 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import android.telephony.satellite.PointingInfo;
import android.telephony.satellite.SatelliteCapabilities;
import android.telephony.satellite.SatelliteDatagram;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteModemEnableRequestAttributes;
import android.telephony.satellite.SatelliteSubscriptionInfo;
import android.telephony.satellite.stub.NTRadioTechnology;
import android.telephony.satellite.stub.SatelliteModemState;
import android.telephony.satellite.stub.SatelliteResult;
@@ -257,6 +259,41 @@ public class SatelliteServiceUtils {
        return converted;
    }

    /**
     * Convert SatelliteSubscriptionInfo from framework definition to service definition.
     * @param info The SatelliteSubscriptionInfo from the framework.
     * @return The converted SatelliteSubscriptionInfo for the satellite service.
     */
    @NonNull public static android.telephony.satellite.stub
            .SatelliteSubscriptionInfo toSatelliteSubscriptionInfo(
            @NonNull SatelliteSubscriptionInfo info
    ) {
        android.telephony.satellite.stub.SatelliteSubscriptionInfo converted =
                new android.telephony.satellite.stub.SatelliteSubscriptionInfo();
        converted.iccId = info.getIccId();
        converted.niddApn = info.getNiddApn();
        return converted;
    }

    /**
     * Convert SatelliteModemEnableRequestAttributes from framework definition to service definition
     * @param attributes The SatelliteModemEnableRequestAttributes from the framework.
     * @return The converted SatelliteModemEnableRequestAttributes for the satellite service.
     */
    @NonNull public static android.telephony.satellite.stub
            .SatelliteModemEnableRequestAttributes toSatelliteModemEnableRequestAttributes(
            @NonNull SatelliteModemEnableRequestAttributes attributes
    ) {
        android.telephony.satellite.stub.SatelliteModemEnableRequestAttributes converted =
                new android.telephony.satellite.stub.SatelliteModemEnableRequestAttributes();
        converted.isEnabled = attributes.isEnabled();
        converted.isDemoMode = attributes.isDemoMode();
        converted.isEmergencyMode = attributes.isEmergencyMode();
        converted.satelliteSubscriptionInfo = toSatelliteSubscriptionInfo(
                attributes.getSatelliteSubscriptionInfo());
        return converted;
    }

    /**
     * Get the {@link SatelliteManager.SatelliteResult} from the provided result.
     *
+33 −20
Original line number Diff line number Diff line
@@ -125,7 +125,9 @@ import android.telephony.satellite.SatelliteCapabilities;
import android.telephony.satellite.SatelliteDatagram;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteManager.SatelliteException;
import android.telephony.satellite.SatelliteModemEnableRequestAttributes;
import android.telephony.satellite.SatelliteSubscriberProvisionStatus;
import android.telephony.satellite.SatelliteSubscriptionInfo;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.Pair;
@@ -3043,8 +3045,8 @@ public class SatelliteControllerTest extends TelephonyTest {
        List<String> barredPlmnList = new ArrayList<>();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(),
                anyBoolean(), anyBoolean(), any(Message.class));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

        // If the entitlement plmn list and the overlay config plmn list are available and the
        // carrier plmn list and the barred plmn list are empty, verify passing to the modem.
@@ -3101,32 +3103,32 @@ public class SatelliteControllerTest extends TelephonyTest {
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", ""}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(),
                anyBoolean(), anyBoolean(), any(Message.class));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

        // If the entitlement plmn list is invalid, verify not passing to the modem.
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "123456789"}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(),
                anyBoolean(), anyBoolean(), any(Message.class));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

        // If the entitlement plmn list is invalid, verify not passing to the modem.
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "12"}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(),
                anyBoolean(), anyBoolean(), any(Message.class));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));

        // If the entitlement plmn list is invalid, verify not passing to the modem.
        reset(mMockSatelliteModemInterface);
        entitlementPlmnList = Arrays.stream(new String[]{"00101", "00102", "1234"}).toList();
        mSatelliteControllerUT.onSatelliteEntitlementStatusUpdated(SUB_ID, false,
                entitlementPlmnList, barredPlmnList, mIIntegerConsumer);
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(),
                anyBoolean(), anyBoolean(), any(Message.class));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));
    }

    private void verifyPassingToModemAfterQueryCompleted(List<String> entitlementPlmnList,
@@ -3537,23 +3539,31 @@ public class SatelliteControllerTest extends TelephonyTest {
        verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS);

        // Time out to enable satellite
        ArgumentCaptor<SatelliteModemEnableRequestAttributes> enableSatelliteRequest =
                ArgumentCaptor.forClass(SatelliteModemEnableRequestAttributes.class);
        ArgumentCaptor<Message> enableSatelliteResponse = ArgumentCaptor.forClass(Message.class);
        mIIntegerConsumerResults.clear();
        setUpNoResponseForRequestSatelliteEnabled(true, false, false);
        clearInvocations(mMockSatelliteModemInterface);
        mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, false,
                mIIntegerConsumer);
        processAllMessages();
        assertFalse(waitForIIntegerConsumerResult(1));
        verify(mMockSatelliteModemInterface).requestSatelliteEnabled(eq(true), eq(false), eq(false),
        verify(mMockSatelliteModemInterface).requestSatelliteEnabled(
                enableSatelliteRequest.capture(),
                enableSatelliteResponse.capture());
        SatelliteModemEnableRequestAttributes request = enableSatelliteRequest.getValue();
        assertTrue(request.isEnabled());
        assertFalse(request.isDemoMode());
        assertFalse(request.isEmergencyMode());

        clearInvocations(mMockSatelliteModemInterface);
        moveTimeForward(TEST_WAIT_FOR_SATELLITE_ENABLING_RESPONSE_TIMEOUT_MILLIS);
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_MODEM_TIMEOUT, (long) mIIntegerConsumerResults.get(0));
        verify(mMockSatelliteModemInterface).requestSatelliteEnabled(eq(false), eq(false),
                eq(false), any(Message.class));
        verify(mMockSatelliteModemInterface).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));
        verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS);

        // Send the response for the above request to enable satellite. SatelliteController should
@@ -3583,8 +3593,8 @@ public class SatelliteControllerTest extends TelephonyTest {
                mIIntegerConsumer);
        processAllMessages();
        assertFalse(waitForIIntegerConsumerResult(1));
        verify(mMockSatelliteModemInterface).requestSatelliteEnabled(eq(false), eq(false),
                eq(false),
        verify(mMockSatelliteModemInterface).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class),
                disableSatelliteResponse.capture());

        clearInvocations(mMockSatelliteModemInterface);
@@ -3592,8 +3602,8 @@ public class SatelliteControllerTest extends TelephonyTest {
        processAllMessages();
        assertTrue(waitForIIntegerConsumerResult(1));
        assertEquals(SATELLITE_RESULT_MODEM_TIMEOUT, (long) mIIntegerConsumerResults.get(0));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(anyBoolean(),
                anyBoolean(), anyBoolean(), any(Message.class));
        verify(mMockSatelliteModemInterface, never()).requestSatelliteEnabled(
                any(SatelliteModemEnableRequestAttributes.class), any(Message.class));
        // Satellite should state at enabled state since satellite disable request failed
        verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS);

@@ -4204,12 +4214,12 @@ public class SatelliteControllerTest extends TelephonyTest {
            if (exception == null && !enabled) {
                sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_OFF, null);
            }
            Message message = (Message) invocation.getArguments()[3];
            Message message = (Message) invocation.getArguments()[1];
            AsyncResult.forMessage(message, null, exception);
            message.sendToTarget();
            return null;
        }).when(mMockSatelliteModemInterface)
                .requestSatelliteEnabled(eq(enabled), eq(demoMode), eq(emergency),
                .requestSatelliteEnabled(any(SatelliteModemEnableRequestAttributes.class),
                        any(Message.class));
    }

@@ -4229,7 +4239,10 @@ public class SatelliteControllerTest extends TelephonyTest {
    private void setUpNoResponseForRequestSatelliteEnabled(boolean enabled, boolean demoMode,
            boolean emergency) {
        doNothing().when(mMockSatelliteModemInterface)
                .requestSatelliteEnabled(eq(enabled), eq(demoMode), eq(emergency),
                .requestSatelliteEnabled(eq(new SatelliteModemEnableRequestAttributes(
                                enabled, demoMode, emergency,
                                new SatelliteSubscriptionInfo("", "")
                        )),
                        any(Message.class));
    }