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

Commit 475bfd12 authored by Thomas Nguyen's avatar Thomas Nguyen Committed by Android (Google) Code Review
Browse files

Merge "Hide IDLE state from clients" into main

parents 20b72a3f 96d9baca
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.