Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +52 −22 Original line number Diff line number Diff line Loading @@ -248,7 +248,8 @@ public class SatelliteController extends Handler { private final AtomicBoolean mRegisteredForNtnSignalStrengthChanged = new AtomicBoolean(false); private final AtomicBoolean mRegisteredForSatelliteCapabilitiesChanged = new AtomicBoolean(false); private final AtomicBoolean mShouldReportNtnSignalStrength = new AtomicBoolean(false); private final AtomicBoolean mIsModemEnabledReportingNtnSignalStrength = new AtomicBoolean(false); /** * Map key: subId, value: callback to get error code of the provision request. */ Loading Loading @@ -938,6 +939,8 @@ public class SatelliteController extends Handler { mWaitingForDisableSatelliteModemResponse = false; } } // Request Ntn signal strength report when satellite enabled or disabled done. updateNtnSignalStrengthReporting(argument.enableSatellite); } else { synchronized (mSatelliteEnabledRequestLock) { if (mSatelliteEnabledRequest != null && Loading Loading @@ -1265,24 +1268,7 @@ public class SatelliteController extends Handler { if (DBG) { logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: shouldReport=" + shouldReport); } request = new SatelliteControllerHandlerRequest(shouldReport, SatelliteServiceUtils.getPhone()); if (SATELLITE_RESULT_SUCCESS != evaluateOemSatelliteRequestAllowed(true)) { return; } if (!isSatelliteEnabled() || mShouldReportNtnSignalStrength.get() == shouldReport) { if (DBG) { logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: ignore request."); } return; } onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE, request); if (shouldReport) { mSatelliteModemInterface.startSendingNtnSignalStrength(onCompleted); } else { mSatelliteModemInterface.stopSendingNtnSignalStrength(onCompleted); } handleCmdUpdateNtnSignalStrengthReporting(shouldReport); break; } Loading @@ -1291,9 +1277,10 @@ public class SatelliteController extends Handler { request = (SatelliteControllerHandlerRequest) ar.userObj; boolean shouldReport = (boolean) request.argument; int errorCode = SatelliteServiceUtils.getSatelliteError(ar, "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE"); "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE: shouldReport=" + shouldReport); if (errorCode == SATELLITE_RESULT_SUCCESS) { mShouldReportNtnSignalStrength.set(shouldReport); mIsModemEnabledReportingNtnSignalStrength.set(shouldReport); } else { loge(((boolean) request.argument ? "startSendingNtnSignalStrength" : "stopSendingNtnSignalStrength") + "returns " + errorCode); Loading Loading @@ -2927,7 +2914,7 @@ public class SatelliteController extends Handler { loge(caller + ": mSatelliteSessionController is not initialized yet"); } if (!enabled) { mShouldReportNtnSignalStrength.set(false); mIsModemEnabledReportingNtnSignalStrength.set(false); } } Loading Loading @@ -3932,6 +3919,49 @@ public class SatelliteController extends Handler { } } private void handleCmdUpdateNtnSignalStrengthReporting(boolean shouldReport) { if (!mFeatureFlags.oemEnabledSatelliteFlag()) { logd("handleCmdUpdateNtnSignalStrengthReporting: oemEnabledSatelliteFlag is " + "disabled"); return; } if (!isSatelliteEnabled()) { logd("handleCmdUpdateNtnSignalStrengthReporting: ignore request, satellite is " + "disabled"); return; } if (mIsModemEnabledReportingNtnSignalStrength.get() == shouldReport) { logd("handleCmdUpdateNtnSignalStrengthReporting: ignore request. " + "mIsModemEnabledReportingNtnSignalStrength=" + mIsModemEnabledReportingNtnSignalStrength.get()); return; } updateNtnSignalStrengthReporting(shouldReport); } private void updateNtnSignalStrengthReporting(boolean shouldReport) { if (!mFeatureFlags.oemEnabledSatelliteFlag()) { logd("updateNtnSignalStrengthReporting: oemEnabledSatelliteFlag is " + "disabled"); return; } SatelliteControllerHandlerRequest request = new SatelliteControllerHandlerRequest( shouldReport, SatelliteServiceUtils.getPhone()); Message onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE, request); if (shouldReport) { logd("updateNtnSignalStrengthReporting: startSendingNtnSignalStrength"); mSatelliteModemInterface.startSendingNtnSignalStrength(onCompleted); } else { logd("updateNtnSignalStrengthReporting: stopSendingNtnSignalStrength"); mSatelliteModemInterface.stopSendingNtnSignalStrength(onCompleted); } } /** * This API can be used by only CTS to override the cached value for the device overlay config * value : config_send_satellite_datagram_to_modem_in_demo_mode, which determines whether Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +89 −0 Original line number Diff line number Diff line Loading @@ -3186,6 +3186,95 @@ public class SatelliteControllerTest extends TelephonyTest { verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS); } @Test public void testUpdateNtnSignalStrentghReportWithFeatureFlagEnabled() { when(mFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true); mIsSatelliteEnabledSemaphore.drainPermits(); mIIntegerConsumerResults.clear(); resetSatelliteControllerUT(); // Successfully provisioned reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS); verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS); sendProvisionedStateChangedEvent(true, null); setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS); sendProvisionedStateChangedEvent(true, null); processAllMessages(); verifySatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS); // startSendingNtnSignalStrength should be invoked when satellite is enabled mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false; setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS); assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled); assertEquals( SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue); verify(mMockSatelliteModemInterface, times(1)).startSendingNtnSignalStrength( any(Message.class)); // Ignore request ntn signal strength for redundant enable request reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS); verify(mMockSatelliteModemInterface, never()).startSendingNtnSignalStrength( any(Message.class)); // stopSendingNtnSignalStrength should be invoked when satellite is successfully off. mIIntegerConsumerResults.clear(); reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS); verify(mMockSatelliteModemInterface, times(1)).stopSendingNtnSignalStrength( any(Message.class)); // Ignore redundant request for stop reporting ntn signal strength. mIIntegerConsumerResults.clear(); reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); mIIntegerConsumerResults.clear(); setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS); verify(mMockSatelliteModemInterface, never()).stopSendingNtnSignalStrength( any(Message.class)); // startSendingNtnSignalStrength is invoked when satellite is enabled again. mIIntegerConsumerResults.clear(); reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false; setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS); assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled); assertEquals( SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue); verify(mMockSatelliteModemInterface, times(1)).startSendingNtnSignalStrength( any(Message.class)); } private void resetSatelliteControllerUTEnabledState() { logd("resetSatelliteControllerUTEnabledState"); setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RESULT_RADIO_NOT_AVAILABLE); Loading Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +52 −22 Original line number Diff line number Diff line Loading @@ -248,7 +248,8 @@ public class SatelliteController extends Handler { private final AtomicBoolean mRegisteredForNtnSignalStrengthChanged = new AtomicBoolean(false); private final AtomicBoolean mRegisteredForSatelliteCapabilitiesChanged = new AtomicBoolean(false); private final AtomicBoolean mShouldReportNtnSignalStrength = new AtomicBoolean(false); private final AtomicBoolean mIsModemEnabledReportingNtnSignalStrength = new AtomicBoolean(false); /** * Map key: subId, value: callback to get error code of the provision request. */ Loading Loading @@ -938,6 +939,8 @@ public class SatelliteController extends Handler { mWaitingForDisableSatelliteModemResponse = false; } } // Request Ntn signal strength report when satellite enabled or disabled done. updateNtnSignalStrengthReporting(argument.enableSatellite); } else { synchronized (mSatelliteEnabledRequestLock) { if (mSatelliteEnabledRequest != null && Loading Loading @@ -1265,24 +1268,7 @@ public class SatelliteController extends Handler { if (DBG) { logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: shouldReport=" + shouldReport); } request = new SatelliteControllerHandlerRequest(shouldReport, SatelliteServiceUtils.getPhone()); if (SATELLITE_RESULT_SUCCESS != evaluateOemSatelliteRequestAllowed(true)) { return; } if (!isSatelliteEnabled() || mShouldReportNtnSignalStrength.get() == shouldReport) { if (DBG) { logd("CMD_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING: ignore request."); } return; } onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE, request); if (shouldReport) { mSatelliteModemInterface.startSendingNtnSignalStrength(onCompleted); } else { mSatelliteModemInterface.stopSendingNtnSignalStrength(onCompleted); } handleCmdUpdateNtnSignalStrengthReporting(shouldReport); break; } Loading @@ -1291,9 +1277,10 @@ public class SatelliteController extends Handler { request = (SatelliteControllerHandlerRequest) ar.userObj; boolean shouldReport = (boolean) request.argument; int errorCode = SatelliteServiceUtils.getSatelliteError(ar, "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE"); "EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE: shouldReport=" + shouldReport); if (errorCode == SATELLITE_RESULT_SUCCESS) { mShouldReportNtnSignalStrength.set(shouldReport); mIsModemEnabledReportingNtnSignalStrength.set(shouldReport); } else { loge(((boolean) request.argument ? "startSendingNtnSignalStrength" : "stopSendingNtnSignalStrength") + "returns " + errorCode); Loading Loading @@ -2927,7 +2914,7 @@ public class SatelliteController extends Handler { loge(caller + ": mSatelliteSessionController is not initialized yet"); } if (!enabled) { mShouldReportNtnSignalStrength.set(false); mIsModemEnabledReportingNtnSignalStrength.set(false); } } Loading Loading @@ -3932,6 +3919,49 @@ public class SatelliteController extends Handler { } } private void handleCmdUpdateNtnSignalStrengthReporting(boolean shouldReport) { if (!mFeatureFlags.oemEnabledSatelliteFlag()) { logd("handleCmdUpdateNtnSignalStrengthReporting: oemEnabledSatelliteFlag is " + "disabled"); return; } if (!isSatelliteEnabled()) { logd("handleCmdUpdateNtnSignalStrengthReporting: ignore request, satellite is " + "disabled"); return; } if (mIsModemEnabledReportingNtnSignalStrength.get() == shouldReport) { logd("handleCmdUpdateNtnSignalStrengthReporting: ignore request. " + "mIsModemEnabledReportingNtnSignalStrength=" + mIsModemEnabledReportingNtnSignalStrength.get()); return; } updateNtnSignalStrengthReporting(shouldReport); } private void updateNtnSignalStrengthReporting(boolean shouldReport) { if (!mFeatureFlags.oemEnabledSatelliteFlag()) { logd("updateNtnSignalStrengthReporting: oemEnabledSatelliteFlag is " + "disabled"); return; } SatelliteControllerHandlerRequest request = new SatelliteControllerHandlerRequest( shouldReport, SatelliteServiceUtils.getPhone()); Message onCompleted = obtainMessage(EVENT_UPDATE_NTN_SIGNAL_STRENGTH_REPORTING_DONE, request); if (shouldReport) { logd("updateNtnSignalStrengthReporting: startSendingNtnSignalStrength"); mSatelliteModemInterface.startSendingNtnSignalStrength(onCompleted); } else { logd("updateNtnSignalStrengthReporting: stopSendingNtnSignalStrength"); mSatelliteModemInterface.stopSendingNtnSignalStrength(onCompleted); } } /** * This API can be used by only CTS to override the cached value for the device overlay config * value : config_send_satellite_datagram_to_modem_in_demo_mode, which determines whether Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +89 −0 Original line number Diff line number Diff line Loading @@ -3186,6 +3186,95 @@ public class SatelliteControllerTest extends TelephonyTest { verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS); } @Test public void testUpdateNtnSignalStrentghReportWithFeatureFlagEnabled() { when(mFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true); mIsSatelliteEnabledSemaphore.drainPermits(); mIIntegerConsumerResults.clear(); resetSatelliteControllerUT(); // Successfully provisioned reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS); verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS); sendProvisionedStateChangedEvent(true, null); setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS); sendProvisionedStateChangedEvent(true, null); processAllMessages(); verifySatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS); // startSendingNtnSignalStrength should be invoked when satellite is enabled mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false; setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS); assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled); assertEquals( SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue); verify(mMockSatelliteModemInterface, times(1)).startSendingNtnSignalStrength( any(Message.class)); // Ignore request ntn signal strength for redundant enable request reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS); verify(mMockSatelliteModemInterface, never()).startSendingNtnSignalStrength( any(Message.class)); // stopSendingNtnSignalStrength should be invoked when satellite is successfully off. mIIntegerConsumerResults.clear(); reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS); verify(mMockSatelliteModemInterface, times(1)).stopSendingNtnSignalStrength( any(Message.class)); // Ignore redundant request for stop reporting ntn signal strength. mIIntegerConsumerResults.clear(); reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); mIIntegerConsumerResults.clear(); setUpResponseForRequestSatelliteEnabled(false, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, false, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(false, SATELLITE_RESULT_SUCCESS); verify(mMockSatelliteModemInterface, never()).stopSendingNtnSignalStrength( any(Message.class)); // startSendingNtnSignalStrength is invoked when satellite is enabled again. mIIntegerConsumerResults.clear(); reset(mMockSatelliteModemInterface); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled = false; setUpResponseForRequestSatelliteEnabled(true, false, SATELLITE_RESULT_SUCCESS); mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, mIIntegerConsumer); processAllMessages(); assertTrue(waitForIIntegerConsumerResult(1)); assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0)); verifySatelliteEnabled(true, SATELLITE_RESULT_SUCCESS); assertTrue(mSatelliteControllerUT.setSettingsKeyForSatelliteModeCalled); assertEquals( SATELLITE_MODE_ENABLED_TRUE, mSatelliteControllerUT.satelliteModeSettingValue); verify(mMockSatelliteModemInterface, times(1)).startSendingNtnSignalStrength( any(Message.class)); } private void resetSatelliteControllerUTEnabledState() { logd("resetSatelliteControllerUTEnabledState"); setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RESULT_RADIO_NOT_AVAILABLE); Loading