Add `shell commands` for satellite CTS tests
- Set SatelliteAccessAllowedForSubscriptions
- SetSatelliteTnScanningSupport
Change-Id: I29ea89f53b287e43561e4c9ec015d8c7a78b2b8e
Flag: EXEMPT bugfix
Bug: 397980611
Test: System test and SatelliteManagerTestOnMockService
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index f4b2545..b51ffff 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -13283,6 +13283,7 @@
(r == SATELLITE_DISALLOWED_REASON_UNSUPPORTED_DEFAULT_MSG_APP
|| r == SATELLITE_DISALLOWED_REASON_NOT_PROVISIONED
|| r == SATELLITE_DISALLOWED_REASON_NOT_SUPPORTED))) {
+ Log.d(LOG_TAG, "Satellite access is disallowed for current location.");
result.accept(SATELLITE_RESULT_ACCESS_BARRED);
return;
}
@@ -14181,6 +14182,30 @@
}
/**
+ * This API can be used by only CTS to override the satellite access allowed state for
+ * a list of subscription IDs.
+ *
+ * @param subIdListStr The string representation of the list of subscription IDs,
+ * which are numbers separated by comma.
+ * @return {@code true} if the satellite access allowed state is set successfully,
+ * {@code false} otherwise.
+ */
+ public boolean setSatelliteAccessAllowedForSubscriptions(@Nullable String subIdListStr) {
+ Log.d(LOG_TAG, "setSatelliteAccessAllowedForSubscriptions - " + subIdListStr);
+ TelephonyPermissions.enforceShellOnly(
+ Binder.getCallingUid(), "setSatelliteAccessAllowedForSubscriptions");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setSatelliteAccessAllowedForSubscriptions");
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return mSatelliteController.setSatelliteAccessAllowedForSubscriptions(subIdListStr);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ /**
* This API can be used by only CTS to update satellite gateway service package name.
*
* @param servicePackageName The package name of the satellite gateway service.
@@ -14251,6 +14276,37 @@
}
/**
+ * This API can be used by only CTS to override TN scanning support.
+ *
+ * @param reset {@code true} mean the overridden configs should not be used, {@code false}
+ * otherwise.
+ * @param concurrentTnScanningSupported Whether concurrent TN scanning is supported.
+ * @param tnScanningDuringSatelliteSessionAllowed Whether TN scanning is allowed during
+ * a satellite session.
+ * @return {@code true} if the TN scanning support is set successfully,
+ * {@code false} otherwise.
+ */
+ public boolean setTnScanningSupport(boolean reset, boolean concurrentTnScanningSupported,
+ boolean tnScanningDuringSatelliteSessionAllowed) {
+ Log.d(LOG_TAG, "setTnScanningSupport: reset= " + reset
+ + ", concurrentTnScanningSupported=" + concurrentTnScanningSupported
+ + ", tnScanningDuringSatelliteSessionAllowed="
+ + tnScanningDuringSatelliteSessionAllowed);
+ TelephonyPermissions.enforceShellOnly(
+ Binder.getCallingUid(), "setTnScanningSupport");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setTnScanningSupport");
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return mSatelliteController.setTnScanningSupport(reset,
+ concurrentTnScanningSupported, tnScanningDuringSatelliteSessionAllowed);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ /**
* This API can be used by only CTS to control ingoring cellular service state event.
*
* @param enabled Whether to enable boolean config.
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index cd6a369..c1692f8 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -189,6 +189,8 @@
"set-satellite-listening-timeout-duration";
private static final String SET_SATELLITE_IGNORE_CELLULAR_SERVICE_STATE =
"set-satellite-ignore-cellular-service-state";
+ private static final String SET_SATELLITE_TN_SCANNING_SUPPORT =
+ "set-satellite-tn-scanning-support";
private static final String SET_SATELLITE_POINTING_UI_CLASS_NAME =
"set-satellite-pointing-ui-class-name";
private static final String SET_DATAGRAM_CONTROLLER_TIMEOUT_DURATION =
@@ -214,6 +216,8 @@
private static final String SET_SATELLITE_ACCESS_RESTRICTION_CHECKING_RESULT =
"set-satellite-access-restriction-checking-result";
+ private static final String SET_SATELLITE_ACCESS_ALLOWED_FOR_SUBSCRIPTIONS =
+ "set-satellite-access-allowed-for-subscriptions";
private static final String DOMAIN_SELECTION_SUBCOMMAND = "domainselection";
private static final String DOMAIN_SELECTION_SET_SERVICE_OVERRIDE = "set-dss-override";
@@ -432,6 +436,10 @@
return handleSetSatelliteSubscriberIdListChangedIntentComponent();
case SET_SATELLITE_ACCESS_RESTRICTION_CHECKING_RESULT:
return handleOverrideCarrierRoamingNtnEligibilityChanged();
+ case SET_SATELLITE_ACCESS_ALLOWED_FOR_SUBSCRIPTIONS:
+ return handleSetSatelliteAccessAllowedForSubscriptions();
+ case SET_SATELLITE_TN_SCANNING_SUPPORT:
+ return handleSetSatelliteTnScanningSupport();
case COMMAND_DELETE_IMSI_KEY:
return handleDeleteTestImsiKey();
default: {
@@ -3231,6 +3239,38 @@
return 0;
}
+ private int handleSetSatelliteAccessAllowedForSubscriptions() {
+ PrintWriter errPw = getErrPrintWriter();
+ String subIdListStr = null;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-s": {
+ subIdListStr = getNextArgRequired();
+ break;
+ }
+ }
+ }
+ Log.d(LOG_TAG, "handleSetSatelliteAccessAllowedForSubscriptions: subIdListStr="
+ + subIdListStr);
+
+ try {
+ boolean result = mInterface.setSatelliteAccessAllowedForSubscriptions(subIdListStr);
+ if (VDBG) {
+ Log.v(LOG_TAG, "SetSatelliteAccessAllowedForSubscriptions " + subIdListStr
+ + ", result = " + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG, "SetSatelliteAccessAllowedForSubscriptions: error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+
+ return 0;
+ }
+
private int handleSetSatelliteGatewayServicePackageNameCommand() {
PrintWriter errPw = getErrPrintWriter();
String serviceName = null;
@@ -3411,6 +3451,50 @@
return 0;
}
+ private int handleSetSatelliteTnScanningSupport() {
+ PrintWriter errPw = getErrPrintWriter();
+ boolean reset = false;
+ boolean concurrentTnScanningSupported = false;
+ boolean tnScanningDuringSatelliteSessionAllowed = false;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-r": {
+ reset = true;
+ break;
+ }
+ case "-s": {
+ concurrentTnScanningSupported = Boolean.parseBoolean(getNextArgRequired());
+ break;
+ }
+ case "-a": {
+ tnScanningDuringSatelliteSessionAllowed =
+ Boolean.parseBoolean(getNextArgRequired());
+ break;
+ }
+ }
+ }
+ Log.d(LOG_TAG, "handleSetSatelliteTnScanningSupport: reset=" + reset
+ + ", concurrentTnScanningSupported =" + concurrentTnScanningSupported
+ + ", tnScanningDuringSatelliteSessionAllowed="
+ + tnScanningDuringSatelliteSessionAllowed);
+
+ try {
+ boolean result = mInterface.setTnScanningSupport(reset,
+ concurrentTnScanningSupported, tnScanningDuringSatelliteSessionAllowed);
+ if (VDBG) {
+ Log.v(LOG_TAG, "handleSetSatelliteTnScanningSupport: result = " + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG, "handleSetSatelliteTnScanningSupport: error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
private int handleSetDatagramControllerTimeoutDuration() {
PrintWriter errPw = getErrPrintWriter();
boolean reset = false;