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
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index 0a39865..ab54e9f 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -115,8 +115,10 @@
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 @@
}
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 @@
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 @@
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()) {
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java b/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java
index 849004a..d644cc1 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java
@@ -40,6 +40,7 @@
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 @@
* 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);
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
index 405cf59..cd4d433 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
@@ -41,6 +41,8 @@
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;
@@ -258,6 +260,41 @@
}
/**
+ * 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.
*
* @param ar AsyncResult used to determine the error code.
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
index a3a189b..483db50 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -125,7 +125,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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));
}