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

Commit af8e6954 authored by Ling Ma's avatar Ling Ma
Browse files

Enable modem with SatelliteModemEnableRequestAttributes

Wrap parameters that are used for requestSatelliteEnabled.

- Wrap icc id and apn name into a new class SatelliteSubscriptionInfo,
which represents the info needed by modem for satellite
provision/attachment.
- Wrap SatelliteSubscriptionInfo along with mIsEnabled, mIsDemoMode,
  mIsEmergencyMode when requestSatelliteEnabled

Bug: 350387637
Test: integration test to provision and attach to skylo
Flag: com.android.internal.telephony.flags.carrier_roaming_nb_iot_ntn

Change-Id: If3ee7b65f500bd7f00d173e6eac9c0570eafcbea
parent d602a896
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));
    }