Implement API for SatelliteManager#requestIsEmergencyModeEnabled()
Bug: 351703546
Test: atest SatelliteControllerTest
Flag: com.android.internal.telephony.flags.oem_enabled_satellite_flag
Change-Id: I1ff586d6113146537f8ecbfddb200632faabc20f
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index ca83953..97b0492 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -1778,6 +1778,28 @@
}
/**
+ * Request to get whether the satellite enabled request is for emergency or not.
+ *
+ * @param subId The subId of the subscription to check whether request is for emergency.
+ * @param result The result receiver that returns whether the request is for emergency
+ * if the request is successful or an error code if the request failed.
+ */
+ public void requestIsEmergencyModeEnabled(int subId, @NonNull ResultReceiver result) {
+ if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
+ plogd("requestIsEmergencyModeEnabled: oemEnabledSatelliteFlag is disabled");
+ result.send(SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED, null);
+ return;
+ }
+
+ synchronized (mSatelliteEnabledRequestLock) {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(SatelliteManager.KEY_EMERGENCY_MODE_ENABLED,
+ getRequestIsEmergency());
+ result.send(SATELLITE_RESULT_SUCCESS, bundle);
+ }
+ }
+
+ /**
* Request to get whether the satellite service is supported on the device.
*
* @param subId The subId of the subscription to check satellite service support for.
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 986e573..e6d825e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -26,6 +26,7 @@
import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_POOR;
import static android.telephony.satellite.SatelliteManager.KEY_DEMO_MODE_ENABLED;
+import static android.telephony.satellite.SatelliteManager.KEY_EMERGENCY_MODE_ENABLED;
import static android.telephony.satellite.SatelliteManager.KEY_NTN_SIGNAL_STRENGTH;
import static android.telephony.satellite.SatelliteManager.KEY_SATELLITE_CAPABILITIES;
import static android.telephony.satellite.SatelliteManager.KEY_SATELLITE_COMMUNICATION_ALLOWED;
@@ -453,6 +454,23 @@
}
};
+ private boolean mRequestIsEmergency = false;
+ private ResultReceiver mRequestIsEmergencyReceiver = new ResultReceiver(null) {
+ @Override
+ protected void onReceiveResult(int resultCode, Bundle resultData) {
+ logd("requestIsEmergencyReceiver: resultCode=" + resultCode);
+ if (resultCode == SATELLITE_RESULT_SUCCESS) {
+ if (resultData.containsKey(KEY_EMERGENCY_MODE_ENABLED)) {
+ mRequestIsEmergency = resultData.getBoolean(
+ KEY_EMERGENCY_MODE_ENABLED);
+ } else {
+ loge("KEY_EMERGENCY_MODE_ENABLED does not exist.");
+
+ }
+ }
+ }
+ };
+
@Before
public void setUp() throws Exception {
super.setUp(getClass().getSimpleName());
@@ -1026,6 +1044,42 @@
}
@Test
+ public void testGetRequestIsEmergency() {
+ mIsSatelliteEnabledSemaphore.drainPermits();
+ doReturn(true).when(mFeatureFlags).carrierRoamingNbIotNtn();
+
+ // Successfully enable satellite
+ mIIntegerConsumerResults.clear();
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
+ verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
+
+ // Set provisioned state
+ sendProvisionedStateChangedEvent(true, null);
+ processAllMessages();
+ verifySatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);
+
+ mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false;
+ mSatelliteControllerUT.setSettingsKeyToAllowDeviceRotationCalled = false;
+ // Set response for enabling request
+ setUpResponseForRequestSatelliteEnabled(true, false, true/*emergency*/,
+ SATELLITE_RESULT_SUCCESS);
+ // Request satellite enabling for emergency
+ mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, true/*isEmergency*/,
+ mIIntegerConsumer);
+ mSatelliteControllerUT.setSatelliteSessionController(mMockSatelliteSessionController);
+ processAllMessages();
+
+ assertTrue(waitForIIntegerConsumerResult(1));
+ assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
+ verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS);
+
+ // Verify satellite enabled for emergency
+ assertTrue(mSatelliteControllerUT.getRequestIsEmergency());
+ mSatelliteControllerUT.requestIsEmergencyModeEnabled(SUB_ID, mRequestIsEmergencyReceiver);
+ assertTrue(mRequestIsEmergency);
+ }
+
+ @Test
public void testRequestSatelliteCapabilities() {
mSatelliteCapabilitiesSemaphore.drainPermits();
mSatelliteControllerUT.requestSatelliteCapabilities(SUB_ID, mSatelliteCapabilitiesReceiver);