Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96d9baca authored by Thomas Nguyen's avatar Thomas Nguyen
Browse files

Hide IDLE state from clients

Bug: 378762930
Test: SatelliteSessionControllerTest
Manual system test with Pixel Skylo
Flag: com.android.internal.telephony.flags.carrier_roaming_nb_iot_ntn

This CL also adds a new method to SatelliteSessionController that can be used to determine whether or not the IDLE state is supported. This method is used to determine whether or not the IDLE state should be hidden from apps.

Change-Id: I5318110d85b19a506783eb597d4bacdd1e07b66a
parent 7313e64f
Loading
Loading
Loading
Loading
+32 −57
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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);
    }

@@ -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();
@@ -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) {
@@ -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");
                }
@@ -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
@@ -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) {
+284 −20

File changed.

Preview size limit exceeded, changes collapsed.