Loading src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java +32 −57 Original line number Diff line number Diff line Loading @@ -137,6 +137,7 @@ public class SatelliteSessionController extends StateMachine { private static final int EVENT_ENABLE_CELLULAR_MODEM_WHILE_SATELLITE_MODE_IS_ON_DONE = 12; private static final int EVENT_SERVICE_STATE_CHANGED = 13; protected static final int EVENT_P2P_SMS_INACTIVITY_TIMER_TIMED_OUT = 14; private static final long REBIND_INITIAL_DELAY = 2 * 1000; // 2 seconds private static final long REBIND_MAXIMUM_DELAY = 64 * 1000; // 1 minute private static final int REBIND_MULTIPLIER = 2; Loading Loading @@ -182,16 +183,12 @@ public class SatelliteSessionController extends StateMachine { boolean mIsScreenOn = true; private boolean mIsDeviceAlignedWithSatellite = false; @GuardedBy("mLock") @NonNull private boolean mIsDisableCellularModemInProgress = false; @NonNull private final SatelliteController mSatelliteController; @NonNull private final DatagramController mDatagramController; @Nullable private PersistentLogger mPersistentLogger = null; @Nullable private DeviceStateMonitor mDeviceStateMonitor; @NonNull private SessionMetricsStats mSessionMetricsStats; @NonNull private FeatureFlags mFeatureFlags; @SatelliteManager.SatelliteModemState private int mModemStateFromController = SATELLITE_MODEM_STATE_UNKNOWN; @NonNull private AlarmManager mAlarmManager; private final AlarmManager.OnAlarmListener mAlarmListener = new AlarmManager.OnAlarmListener() { @Override Loading Loading @@ -386,10 +383,6 @@ public class SatelliteSessionController extends StateMachine { */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (mFeatureFlags.carrierRoamingNbIotNtn()) { plogd("onSatelliteModemStateChanged from SatelliteController : " + state); mModemStateFromController = state; } sendMessage(EVENT_SATELLITE_MODEM_STATE_CHANGED, state); } Loading Loading @@ -695,9 +688,6 @@ public class SatelliteSessionController extends StateMachine { mPreviousState = mCurrentState; mCurrentState = SatelliteManager.SATELLITE_MODEM_STATE_OFF; mIsSendingTriggeredDuringTransferringState.set(false); synchronized (mLock) { mIsDisableCellularModemInProgress = false; } unbindService(); stopNbIotInactivityTimer(); DemoSimulator.getInstance().onSatelliteModeOff(); Loading Loading @@ -899,8 +889,12 @@ public class SatelliteSessionController extends StateMachine { Message onCompleted = obtainMessage(EVENT_ENABLE_CELLULAR_MODEM_WHILE_SATELLITE_MODE_IS_ON_DONE); mSatelliteModemInterface.enableCellularModemWhileSatelliteModeIsOn(true, onCompleted); if (isConcurrentTnScanningSupported()) { plogd("IDLE state is hidden from clients"); } else { notifyStateChangedEvent(SatelliteManager.SATELLITE_MODEM_STATE_IDLE); } } @Override public boolean processMessage(Message msg) { Loading Loading @@ -954,17 +948,13 @@ public class SatelliteSessionController extends StateMachine { if ((datagramTransferState.sendState == SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING) || (datagramTransferState.receiveState == SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING)) { if (mSatelliteController.isSatelliteAttachRequired()) { ploge("Unexpected transferring state received for NB-IOT NTN"); } else { transitionTo(mTransferringState); } } else if ((datagramTransferState.sendState == SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT) || (datagramTransferState.receiveState == SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT)) { if (mSatelliteController.isSatelliteAttachRequired()) { disableCellularModemWhileSatelliteModeIsOn(); transitionTo(mNotConnectedState); } else { ploge("Unexpected transferring state received for non-NB-IOT NTN"); } Loading Loading @@ -1012,59 +1002,34 @@ public class SatelliteSessionController extends StateMachine { private void handleEventDisableCellularModemWhileSatelliteModeIsOnDone( @NonNull AsyncResult result) { synchronized (mLock) { if (mIsDisableCellularModemInProgress) { int error = SatelliteServiceUtils.getSatelliteError( result, "DisableCellularModemWhileSatelliteModeIsOnDone"); if (error == SatelliteManager.SATELLITE_RESULT_SUCCESS) { if (mFeatureFlags.carrierRoamingNbIotNtn() && mModemStateFromController == SATELLITE_MODEM_STATE_CONNECTED) { ploge("mPreviousState : " + mPreviousState + " mModemStateFromController : " + mModemStateFromController + " I->C"); transitionTo(mConnectedState); } else { transitionTo(mNotConnectedState); } } mIsDisableCellularModemInProgress = false; } else { ploge("DisableCellularModemWhileSatelliteModeIsOn is not in progress"); } } plogd("Disable TN scanning done with result: " + error); } private void handleSatelliteModemStateChanged(@NonNull Message msg) { int state = msg.arg1; if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF) { transitionTo(mPowerOffState); } else if (state == SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED || state == SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED) { if (isConcurrentTnScanningSupported()) { plogd("Notifying the new state " + state + " to clients but still" + " stay at IDLE state internally"); notifyStateChangedEvent(state); } else { plogd("Ignoring the modem state " + state); } } private void disableCellularModemWhileSatelliteModeIsOn() { synchronized (mLock) { if (mIsDisableCellularModemInProgress) { plogd("Cellular scanning is already being disabled"); return; } mIsDisableCellularModemInProgress = true; Message onCompleted = obtainMessage(EVENT_DISABLE_CELLULAR_MODEM_WHILE_SATELLITE_MODE_IS_ON_DONE); mSatelliteModemInterface.enableCellularModemWhileSatelliteModeIsOn(false, onCompleted); } } @Override public void exit() { if (DBG) plogd("Exiting IdleState"); if (!mSatelliteController.isSatelliteAttachRequired()) { // Disable cellular modem scanning mSatelliteModemInterface.enableCellularModemWhileSatelliteModeIsOn(false, null); } } } private class TransferringState extends State { @Override Loading Loading @@ -1989,6 +1954,16 @@ public class SatelliteSessionController extends StateMachine { } } private boolean isConcurrentTnScanningSupported() { try { return mContext.getResources().getBoolean( R.bool.config_satellite_modem_support_concurrent_tn_scanning); } catch (RuntimeException e) { plogd("isConcurrentTnScanningSupported: ex=" + e); return false; } } private void plogd(@NonNull String log) { logd(log); if (mPersistentLogger != null) { Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSessionControllerTest.java +284 −20 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java +32 −57 Original line number Diff line number Diff line Loading @@ -137,6 +137,7 @@ public class SatelliteSessionController extends StateMachine { private static final int EVENT_ENABLE_CELLULAR_MODEM_WHILE_SATELLITE_MODE_IS_ON_DONE = 12; private static final int EVENT_SERVICE_STATE_CHANGED = 13; protected static final int EVENT_P2P_SMS_INACTIVITY_TIMER_TIMED_OUT = 14; private static final long REBIND_INITIAL_DELAY = 2 * 1000; // 2 seconds private static final long REBIND_MAXIMUM_DELAY = 64 * 1000; // 1 minute private static final int REBIND_MULTIPLIER = 2; Loading Loading @@ -182,16 +183,12 @@ public class SatelliteSessionController extends StateMachine { boolean mIsScreenOn = true; private boolean mIsDeviceAlignedWithSatellite = false; @GuardedBy("mLock") @NonNull private boolean mIsDisableCellularModemInProgress = false; @NonNull private final SatelliteController mSatelliteController; @NonNull private final DatagramController mDatagramController; @Nullable private PersistentLogger mPersistentLogger = null; @Nullable private DeviceStateMonitor mDeviceStateMonitor; @NonNull private SessionMetricsStats mSessionMetricsStats; @NonNull private FeatureFlags mFeatureFlags; @SatelliteManager.SatelliteModemState private int mModemStateFromController = SATELLITE_MODEM_STATE_UNKNOWN; @NonNull private AlarmManager mAlarmManager; private final AlarmManager.OnAlarmListener mAlarmListener = new AlarmManager.OnAlarmListener() { @Override Loading Loading @@ -386,10 +383,6 @@ public class SatelliteSessionController extends StateMachine { */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (mFeatureFlags.carrierRoamingNbIotNtn()) { plogd("onSatelliteModemStateChanged from SatelliteController : " + state); mModemStateFromController = state; } sendMessage(EVENT_SATELLITE_MODEM_STATE_CHANGED, state); } Loading Loading @@ -695,9 +688,6 @@ public class SatelliteSessionController extends StateMachine { mPreviousState = mCurrentState; mCurrentState = SatelliteManager.SATELLITE_MODEM_STATE_OFF; mIsSendingTriggeredDuringTransferringState.set(false); synchronized (mLock) { mIsDisableCellularModemInProgress = false; } unbindService(); stopNbIotInactivityTimer(); DemoSimulator.getInstance().onSatelliteModeOff(); Loading Loading @@ -899,8 +889,12 @@ public class SatelliteSessionController extends StateMachine { Message onCompleted = obtainMessage(EVENT_ENABLE_CELLULAR_MODEM_WHILE_SATELLITE_MODE_IS_ON_DONE); mSatelliteModemInterface.enableCellularModemWhileSatelliteModeIsOn(true, onCompleted); if (isConcurrentTnScanningSupported()) { plogd("IDLE state is hidden from clients"); } else { notifyStateChangedEvent(SatelliteManager.SATELLITE_MODEM_STATE_IDLE); } } @Override public boolean processMessage(Message msg) { Loading Loading @@ -954,17 +948,13 @@ public class SatelliteSessionController extends StateMachine { if ((datagramTransferState.sendState == SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING) || (datagramTransferState.receiveState == SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING)) { if (mSatelliteController.isSatelliteAttachRequired()) { ploge("Unexpected transferring state received for NB-IOT NTN"); } else { transitionTo(mTransferringState); } } else if ((datagramTransferState.sendState == SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT) || (datagramTransferState.receiveState == SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT)) { if (mSatelliteController.isSatelliteAttachRequired()) { disableCellularModemWhileSatelliteModeIsOn(); transitionTo(mNotConnectedState); } else { ploge("Unexpected transferring state received for non-NB-IOT NTN"); } Loading Loading @@ -1012,59 +1002,34 @@ public class SatelliteSessionController extends StateMachine { private void handleEventDisableCellularModemWhileSatelliteModeIsOnDone( @NonNull AsyncResult result) { synchronized (mLock) { if (mIsDisableCellularModemInProgress) { int error = SatelliteServiceUtils.getSatelliteError( result, "DisableCellularModemWhileSatelliteModeIsOnDone"); if (error == SatelliteManager.SATELLITE_RESULT_SUCCESS) { if (mFeatureFlags.carrierRoamingNbIotNtn() && mModemStateFromController == SATELLITE_MODEM_STATE_CONNECTED) { ploge("mPreviousState : " + mPreviousState + " mModemStateFromController : " + mModemStateFromController + " I->C"); transitionTo(mConnectedState); } else { transitionTo(mNotConnectedState); } } mIsDisableCellularModemInProgress = false; } else { ploge("DisableCellularModemWhileSatelliteModeIsOn is not in progress"); } } plogd("Disable TN scanning done with result: " + error); } private void handleSatelliteModemStateChanged(@NonNull Message msg) { int state = msg.arg1; if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF) { transitionTo(mPowerOffState); } else if (state == SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED || state == SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED) { if (isConcurrentTnScanningSupported()) { plogd("Notifying the new state " + state + " to clients but still" + " stay at IDLE state internally"); notifyStateChangedEvent(state); } else { plogd("Ignoring the modem state " + state); } } private void disableCellularModemWhileSatelliteModeIsOn() { synchronized (mLock) { if (mIsDisableCellularModemInProgress) { plogd("Cellular scanning is already being disabled"); return; } mIsDisableCellularModemInProgress = true; Message onCompleted = obtainMessage(EVENT_DISABLE_CELLULAR_MODEM_WHILE_SATELLITE_MODE_IS_ON_DONE); mSatelliteModemInterface.enableCellularModemWhileSatelliteModeIsOn(false, onCompleted); } } @Override public void exit() { if (DBG) plogd("Exiting IdleState"); if (!mSatelliteController.isSatelliteAttachRequired()) { // Disable cellular modem scanning mSatelliteModemInterface.enableCellularModemWhileSatelliteModeIsOn(false, null); } } } private class TransferringState extends State { @Override Loading Loading @@ -1989,6 +1954,16 @@ public class SatelliteSessionController extends StateMachine { } } private boolean isConcurrentTnScanningSupported() { try { return mContext.getResources().getBoolean( R.bool.config_satellite_modem_support_concurrent_tn_scanning); } catch (RuntimeException e) { plogd("isConcurrentTnScanningSupported: ex=" + e); return false; } } private void plogd(@NonNull String log) { logd(log); if (mPersistentLogger != null) { Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSessionControllerTest.java +284 −20 File changed.Preview size limit exceeded, changes collapsed. Show changes