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

Commit 5b956f07 authored by Sarah Chin's avatar Sarah Chin
Browse files

Force update override network type before timer

When data RAT changes from LTE -> NR but the state is no longer NR
advanced, we don't update the override network type if a timer is
active. For this scenario, manually update the override network type to
be NONE to prevent a mismatch between the data rat and override network
type.

Test: atest NetworkTypeControllerTest
Bug: 269163800
Change-Id: I686fa530814d522ed0b1216c63baf21e1fd00cba
parent 1cf23ca8
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -997,6 +997,13 @@ public class NetworkTypeController extends StateMachine {
                            // Update in case the override network type changed
                            updateOverrideNetworkType();
                        } else {
                            if (rat == TelephonyManager.NETWORK_TYPE_NR && mOverrideNetworkType
                                    != TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED) {
                                // manually override network type after data rat changes since
                                // timer will prevent it from being updated
                                mOverrideNetworkType =
                                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE;
                            }
                            transitionWithTimerTo(mNrConnectedState);
                        }
                    } else if (isLte(rat) && isNrNotRestricted()) {
@@ -1140,15 +1147,12 @@ public class NetworkTypeController extends StateMachine {
            if (currentState.equals(STATE_CONNECTED_NR_ADVANCED)) {
                if (DBG) log("Reset timers since state is NR_ADVANCED.");
                resetAllTimers();
            }

            if (currentState.equals(STATE_CONNECTED)
            } else if (currentState.equals(STATE_CONNECTED)
                    && !mPrimaryTimerState.equals(STATE_CONNECTED_NR_ADVANCED)
                    && !mSecondaryTimerState.equals(STATE_CONNECTED_NR_ADVANCED)) {
                if (DBG) log("Reset non-NR_advanced timers since state is NR_CONNECTED");
                if (DBG) log("Reset non-NR_ADVANCED timers since state is NR_CONNECTED");
                resetAllTimers();
            }

            } else {
                int rat = getDataNetworkType();
                if (!isLte(rat) && rat != TelephonyManager.NETWORK_TYPE_NR) {
                    if (DBG) log("Reset timers since 2G and 3G don't need NR timers.");
@@ -1156,6 +1160,7 @@ public class NetworkTypeController extends StateMachine {
                }
            }
        }
    }

    private void resetAllTimers() {
        removeMessages(EVENT_PRIMARY_TIMER_EXPIRED);