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

Commit 83c3ecb6 authored by Sarah Chin's avatar Sarah Chin
Browse files

Add extra logging to NetworkTypeController

This change has no functional logic changes.

Test: atest NetworkTypeControllerTest
Bug: 233934605
Change-Id: I26d8770fde4a2fbdc78ccd3f280a11b9cd39fdbd
Merged-In: I26d8770fde4a2fbdc78ccd3f280a11b9cd39fdbd
parent 11341cac
Loading
Loading
Loading
Loading
+48 −30
Original line number Original line Diff line number Diff line
@@ -543,10 +543,12 @@ public class NetworkTypeController extends StateMachine {
            switch (msg.what) {
            switch (msg.what) {
                case EVENT_UPDATE:
                case EVENT_UPDATE:
                case EVENT_PREFERRED_NETWORK_MODE_CHANGED:
                case EVENT_PREFERRED_NETWORK_MODE_CHANGED:
                    if (DBG) log("Reset timers since preferred network mode changed.");
                    resetAllTimers();
                    resetAllTimers();
                    transitionToCurrentState();
                    transitionToCurrentState();
                    break;
                    break;
                case EVENT_QUIT:
                case EVENT_QUIT:
                    if (DBG) log("Reset timers on state machine quitting.");
                    resetAllTimers();
                    resetAllTimers();
                    unRegisterForAllEvents();
                    unRegisterForAllEvents();
                    quit();
                    quit();
@@ -585,25 +587,32 @@ public class NetworkTypeController extends StateMachine {
                        log("mIsPhysicalChannelConfigOn changed to: " + mIsPhysicalChannelConfigOn);
                        log("mIsPhysicalChannelConfigOn changed to: " + mIsPhysicalChannelConfigOn);
                    }
                    }
                    if (!mIsPhysicalChannelConfigOn) {
                    if (!mIsPhysicalChannelConfigOn) {
                        if (DBG) {
                            log("Reset timers since physical channel config indications are off.");
                        }
                        resetAllTimers();
                        resetAllTimers();
                    }
                    }
                    transitionToCurrentState();
                    transitionToCurrentState();
                    break;
                    break;
                case EVENT_CARRIER_CONFIG_CHANGED:
                case EVENT_CARRIER_CONFIG_CHANGED:
                    parseCarrierConfigs();
                    parseCarrierConfigs();
                    if (DBG) log("Reset timers since carrier configurations changed.");
                    resetAllTimers();
                    resetAllTimers();
                    transitionToCurrentState();
                    transitionToCurrentState();
                    break;
                    break;
                case EVENT_PRIMARY_TIMER_EXPIRED:
                case EVENT_PRIMARY_TIMER_EXPIRED:
                    if (DBG) log("Primary timer expired for state: " + mPrimaryTimerState);
                    transitionWithSecondaryTimerTo((IState) msg.obj);
                    transitionWithSecondaryTimerTo((IState) msg.obj);
                    break;
                    break;
                case EVENT_SECONDARY_TIMER_EXPIRED:
                case EVENT_SECONDARY_TIMER_EXPIRED:
                    if (DBG) log("Secondary timer expired for state: " + mSecondaryTimerState);
                    mIsSecondaryTimerActive = false;
                    mIsSecondaryTimerActive = false;
                    mSecondaryTimerState = "";
                    mSecondaryTimerState = "";
                    updateTimers();
                    updateTimers();
                    updateOverrideNetworkType();
                    updateOverrideNetworkType();
                    break;
                    break;
                case EVENT_RADIO_OFF_OR_UNAVAILABLE:
                case EVENT_RADIO_OFF_OR_UNAVAILABLE:
                    if (DBG) log("Reset timers since radio is off or unavailable.");
                    resetAllTimers();
                    resetAllTimers();
                    transitionTo(mLegacyState);
                    transitionTo(mLegacyState);
                    break;
                    break;
@@ -614,6 +623,7 @@ public class NetworkTypeController extends StateMachine {
                        log("mIsDeviceIdleMode changed to: " + mIsDeviceIdleMode);
                        log("mIsDeviceIdleMode changed to: " + mIsDeviceIdleMode);
                    }
                    }
                    if (mIsDeviceIdleMode) {
                    if (mIsDeviceIdleMode) {
                        if (DBG) log("Reset timers since device is in idle mode.");
                        resetAllTimers();
                        resetAllTimers();
                    }
                    }
                    transitionToCurrentState();
                    transitionToCurrentState();
@@ -637,7 +647,7 @@ public class NetworkTypeController extends StateMachine {
     * This is the initial state.
     * This is the initial state.
     */
     */
    private final class LegacyState extends State {
    private final class LegacyState extends State {
        private Boolean mIsNrRestricted = false;
        private boolean mIsNrRestricted = false;


        @Override
        @Override
        public void enter() {
        public void enter() {
@@ -664,7 +674,7 @@ public class NetworkTypeController extends StateMachine {
                                ? mLteConnectedState : mIdleState);
                                ? mLteConnectedState : mIdleState);
                    } else {
                    } else {
                        if (!isLte(rat)) {
                        if (!isLte(rat)) {
                            // Rat is 3G or 2G, and it doesn't need NR timer.
                            if (DBG) log("Reset timers since 2G and 3G don't need NR timers.");
                            resetAllTimers();
                            resetAllTimers();
                        }
                        }
                        updateOverrideNetworkType();
                        updateOverrideNetworkType();
@@ -689,6 +699,7 @@ public class NetworkTypeController extends StateMachine {
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                        if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) {
                        if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) {
                            if (DBG) log("Reset timers since timer reset is enabled for RRC idle.");
                            resetAllTimers();
                            resetAllTimers();
                        }
                        }
                    }
                    }
@@ -699,6 +710,7 @@ public class NetworkTypeController extends StateMachine {
                    AsyncResult ar = (AsyncResult) msg.obj;
                    AsyncResult ar = (AsyncResult) msg.obj;
                    mPhysicalLinkStatus = (int) ar.result;
                    mPhysicalLinkStatus = (int) ar.result;
                    if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) {
                    if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) {
                        if (DBG) log("Reset timers since timer reset is enabled for RRC idle.");
                        resetAllTimers();
                        resetAllTimers();
                        updateOverrideNetworkType();
                        updateOverrideNetworkType();
                    }
                    }
@@ -889,14 +901,14 @@ public class NetworkTypeController extends StateMachine {
    private final LteConnectedState mLteConnectedState = new LteConnectedState();
    private final LteConnectedState mLteConnectedState = new LteConnectedState();


    /**
    /**
     * Device is connected to 5G NR as the secondary cell.
     * Device is connected to 5G NR as the primary or secondary cell.
     */
     */
    private final class NrConnectedState extends State {
    private final class NrConnectedState extends State {
        private Boolean mIsNrAdvanced = false;
        private boolean mIsNrAdvanced = false;


        @Override
        @Override
        public void enter() {
        public void enter() {
            if (DBG) log("Entering NrConnectedState");
            if (DBG) log("Entering NrConnectedState(" + getName() + ")");
            updateTimers();
            updateTimers();
            updateOverrideNetworkType();
            updateOverrideNetworkType();
            if (!mIsPrimaryTimerActive && !mIsSecondaryTimerActive) {
            if (!mIsPrimaryTimerActive && !mIsSecondaryTimerActive) {
@@ -907,7 +919,7 @@ public class NetworkTypeController extends StateMachine {


        @Override
        @Override
        public boolean processMessage(Message msg) {
        public boolean processMessage(Message msg) {
            if (DBG) log("NrConnectedState: process " + getEventName(msg.what));
            if (DBG) log("NrConnectedState(" + getName() + "): process " + getEventName(msg.what));
            updateTimers();
            updateTimers();
            int rat = getDataNetworkType();
            int rat = getDataNetworkType();
            switch (msg.what) {
            switch (msg.what) {
@@ -974,10 +986,10 @@ public class NetworkTypeController extends StateMachine {
                return;
                return;
            }
            }
            if (!isNrAdvanced()) {
            if (!isNrAdvanced()) {
                // STATE_CONNECTED_NR_ADVANCED -> STATE_CONNECTED
                if (DBG) log("updateNrAdvancedState: CONNECTED_NR_ADVANCED -> CONNECTED");
                transitionWithTimerTo(mNrConnectedState);
                transitionWithTimerTo(mNrConnectedState);
            } else {
            } else {
                // STATE_CONNECTED -> STATE_CONNECTED_NR_ADVANCED
                if (DBG) log("updateNrAdvancedState: CONNECTED -> CONNECTED_NR_ADVANCED");
                transitionTo(mNrConnectedState);
                transitionTo(mNrConnectedState);
            }
            }
            mIsNrAdvanced = isNrAdvanced();
            mIsNrAdvanced = isNrAdvanced();
@@ -1002,10 +1014,10 @@ public class NetworkTypeController extends StateMachine {
                    && mNrAdvancedCapablePcoId > 0
                    && mNrAdvancedCapablePcoId > 0
                    && pcodata.pcoId == mNrAdvancedCapablePcoId
                    && pcodata.pcoId == mNrAdvancedCapablePcoId
            ) {
            ) {
                log("EVENT_PCO_DATA_CHANGED: Nr Advanced is allowed by PCO. length:"
                log("EVENT_PCO_DATA_CHANGED: NR_ADVANCED is allowed by PCO. length:"
                        + pcodata.contents.length + ",value: " + Arrays.toString(pcodata.contents));
                        + pcodata.contents.length + ",value: " + Arrays.toString(pcodata.contents));
                mIsNrAdvancedAllowedByPco = (pcodata.contents.length > 0)
                mIsNrAdvancedAllowedByPco = pcodata.contents.length > 0
                        ? pcodata.contents[pcodata.contents.length - 1] == 1 : false;
                        && pcodata.contents[pcodata.contents.length - 1] == 1;
                updateNrAdvancedState();
                updateNrAdvancedState();
            }
            }
        }
        }
@@ -1015,14 +1027,15 @@ public class NetworkTypeController extends StateMachine {


    private void transitionWithTimerTo(IState destState) {
    private void transitionWithTimerTo(IState destState) {
        String destName = destState.getName();
        String destName = destState.getName();
        if (DBG) log("Transition with primary timer from " + mPreviousState + " to " + destName);
        OverrideTimerRule rule = mOverrideTimerRules.get(mPreviousState);
        OverrideTimerRule rule = mOverrideTimerRules.get(mPreviousState);
        if (!mIsDeviceIdleMode && rule != null && rule.getTimer(destName) > 0) {
        if (!mIsDeviceIdleMode && rule != null && rule.getTimer(destName) > 0) {
            if (DBG) log("Primary timer started for state: " + mPreviousState);
            int duration = rule.getTimer(destName);
            if (DBG) log(duration + "s primary timer started for state: " + mPreviousState);
            mPrimaryTimerState = mPreviousState;
            mPrimaryTimerState = mPreviousState;
            mPreviousState = getCurrentState().getName();
            mPreviousState = getCurrentState().getName();
            mIsPrimaryTimerActive = true;
            mIsPrimaryTimerActive = true;
            sendMessageDelayed(EVENT_PRIMARY_TIMER_EXPIRED, destState,
            sendMessageDelayed(EVENT_PRIMARY_TIMER_EXPIRED, destState, duration * 1000L);
                    rule.getTimer(destName) * 1000L);
        }
        }
        transitionTo(destState);
        transitionTo(destState);
    }
    }
@@ -1030,13 +1043,17 @@ public class NetworkTypeController extends StateMachine {
    private void transitionWithSecondaryTimerTo(IState destState) {
    private void transitionWithSecondaryTimerTo(IState destState) {
        String currentName = getCurrentState().getName();
        String currentName = getCurrentState().getName();
        OverrideTimerRule rule = mOverrideTimerRules.get(mPrimaryTimerState);
        OverrideTimerRule rule = mOverrideTimerRules.get(mPrimaryTimerState);
        if (DBG) {
            log("Transition with secondary timer from " + currentName + " to "
                    + destState.getName());
        }
        if (!mIsDeviceIdleMode && rule != null && rule.getSecondaryTimer(currentName) > 0) {
        if (!mIsDeviceIdleMode && rule != null && rule.getSecondaryTimer(currentName) > 0) {
            if (DBG) log("Secondary timer started for state: " + currentName);
            int duration = rule.getSecondaryTimer(currentName);
            if (DBG) log(duration + "s secondary timer started for state: " + currentName);
            mSecondaryTimerState = currentName;
            mSecondaryTimerState = currentName;
            mPreviousState = currentName;
            mPreviousState = currentName;
            mIsSecondaryTimerActive = true;
            mIsSecondaryTimerActive = true;
            sendMessageDelayed(EVENT_SECONDARY_TIMER_EXPIRED, destState,
            sendMessageDelayed(EVENT_SECONDARY_TIMER_EXPIRED, destState, duration * 1000L);
                    rule.getSecondaryTimer(currentName) * 1000L);
        }
        }
        mIsPrimaryTimerActive = false;
        mIsPrimaryTimerActive = false;
        transitionTo(getCurrentState());
        transitionTo(getCurrentState());
@@ -1070,6 +1087,7 @@ public class NetworkTypeController extends StateMachine {
    private void updateTimers() {
    private void updateTimers() {
        if ((mPhone.getCachedAllowedNetworkTypesBitmask()
        if ((mPhone.getCachedAllowedNetworkTypesBitmask()
                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) == 0) {
                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) == 0) {
            if (DBG) log("Reset timers since NR is not allowed.");
            resetAllTimers();
            resetAllTimers();
            return;
            return;
        }
        }
@@ -1098,21 +1116,21 @@ public class NetworkTypeController extends StateMachine {
            mSecondaryTimerState = "";
            mSecondaryTimerState = "";
        }
        }


        if (mIsPrimaryTimerActive || mIsSecondaryTimerActive) {
            if (currentState.equals(STATE_CONNECTED_NR_ADVANCED)) {
            if (currentState.equals(STATE_CONNECTED_NR_ADVANCED)) {
                if (DBG) log("Reset timers since state is NR_ADVANCED.");
                resetAllTimers();
                resetAllTimers();
            }
            }


            int rat = getDataNetworkType();
            int rat = getDataNetworkType();
            if (!isLte(rat) && rat != TelephonyManager.NETWORK_TYPE_NR) {
            if (!isLte(rat) && rat != TelephonyManager.NETWORK_TYPE_NR) {
            // Rat is 3G or 2G, and it doesn't need NR timer.
                if (DBG) log("Reset timers since 2G and 3G don't need NR timers.");
                resetAllTimers();
                resetAllTimers();
            }
            }
        }
        }
    }


    private void resetAllTimers() {
    private void resetAllTimers() {
        if (DBG) {
            log("Remove all timers");
        }
        removeMessages(EVENT_PRIMARY_TIMER_EXPIRED);
        removeMessages(EVENT_PRIMARY_TIMER_EXPIRED);
        removeMessages(EVENT_SECONDARY_TIMER_EXPIRED);
        removeMessages(EVENT_SECONDARY_TIMER_EXPIRED);
        mIsPrimaryTimerActive = false;
        mIsPrimaryTimerActive = false;
@@ -1125,7 +1143,7 @@ public class NetworkTypeController extends StateMachine {
     * Private class defining timer rules between states to prevent flickering. These rules are
     * Private class defining timer rules between states to prevent flickering. These rules are
     * created in {@link #parseCarrierConfigs()} based on various carrier configs.
     * created in {@link #parseCarrierConfigs()} based on various carrier configs.
     */
     */
    private class OverrideTimerRule {
    private static class OverrideTimerRule {
        /** The 5G state this timer rule applies for. See {@link #ALL_STATES}. */
        /** The 5G state this timer rule applies for. See {@link #ALL_STATES}. */
        final String mState;
        final String mState;


@@ -1320,7 +1338,7 @@ public class NetworkTypeController extends StateMachine {
                + ", mPrimaryTimerState=" + mPrimaryTimerState
                + ", mPrimaryTimerState=" + mPrimaryTimerState
                + ", mSecondaryTimerState=" + mSecondaryTimerState
                + ", mSecondaryTimerState=" + mSecondaryTimerState
                + ", mPreviousState=" + mPreviousState
                + ", mPreviousState=" + mPreviousState
                + ", misNrAdvanced=" + isNrAdvanced();
                + ", mIsNrAdvanced=" + isNrAdvanced();
    }
    }


    @Override
    @Override