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

Commit e8376888 authored by Sarah Chin's avatar Sarah Chin Committed by Gerrit Code Review
Browse files

Merge changes from topics "addl_nr_band", "nr_advanced"

* changes:
  Add new rule to display 5G+ icon.
  Add NR SA OVERRIDE_NETWORK_TYPE_NR_ADVANCED for TelephonyDisplayInfo
parents de4aa08c 6132531b
Loading
Loading
Loading
Loading
+71 −31
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation;
import android.telephony.CarrierConfigManager;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PhysicalChannelConfig;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyDisplayInfo;
@@ -35,6 +36,7 @@ import android.text.TextUtils;

import com.android.internal.telephony.dataconnection.DcController;
import com.android.internal.telephony.dataconnection.DcController.PhysicalLinkState;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.util.IState;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.State;
@@ -44,6 +46,7 @@ import com.android.telephony.Rlog;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -63,14 +66,14 @@ public class NetworkTypeController extends StateMachine {
    private static final String TAG = "NetworkTypeController";
    private static final String ICON_5G = "5g";
    private static final String ICON_5G_PLUS = "5g_plus";
    private static final String STATE_CONNECTED_MMWAVE = "connected_mmwave";
    private static final String STATE_CONNECTED_NR_ADVANCED = "connected_mmwave";
    private static final String STATE_CONNECTED = "connected";
    private static final String STATE_NOT_RESTRICTED_RRC_IDLE = "not_restricted_rrc_idle";
    private static final String STATE_NOT_RESTRICTED_RRC_CON = "not_restricted_rrc_con";
    private static final String STATE_RESTRICTED = "restricted";
    private static final String STATE_ANY = "any";
    private static final String STATE_LEGACY = "legacy";
    private static final String[] ALL_STATES = { STATE_CONNECTED_MMWAVE, STATE_CONNECTED,
    private static final String[] ALL_STATES = {STATE_CONNECTED_NR_ADVANCED, STATE_CONNECTED,
            STATE_NOT_RESTRICTED_RRC_IDLE, STATE_NOT_RESTRICTED_RRC_CON, STATE_RESTRICTED,
            STATE_LEGACY };

@@ -89,13 +92,14 @@ public class NetworkTypeController extends StateMachine {
    private static final int EVENT_RADIO_OFF_OR_UNAVAILABLE = 10;
    private static final int EVENT_PREFERRED_NETWORK_MODE_CHANGED = 11;
    private static final int EVENT_INITIALIZE = 12;
    private static final int EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED = 13;
    // events that don't reset the timer
    private static final int[] ALL_EVENTS = { EVENT_DATA_RAT_CHANGED, EVENT_NR_STATE_CHANGED,
            EVENT_NR_FREQUENCY_CHANGED, EVENT_PHYSICAL_LINK_STATE_CHANGED,
            EVENT_PHYSICAL_CHANNEL_CONFIG_NOTIF_CHANGED, EVENT_PRIMARY_TIMER_EXPIRED,
            EVENT_SECONDARY_TIMER_EXPIRED};
            EVENT_SECONDARY_TIMER_EXPIRED, EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED};

    private static final String[] sEvents = new String[EVENT_INITIALIZE + 1];
    private static final String[] sEvents = new String[EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED + 1];
    static {
        sEvents[EVENT_UPDATE] = "EVENT_UPDATE";
        sEvents[EVENT_QUIT] = "EVENT_QUIT";
@@ -111,6 +115,7 @@ public class NetworkTypeController extends StateMachine {
        sEvents[EVENT_RADIO_OFF_OR_UNAVAILABLE] = "EVENT_RADIO_OFF_OR_UNAVAILABLE";
        sEvents[EVENT_PREFERRED_NETWORK_MODE_CHANGED] = "EVENT_PREFERRED_NETWORK_MODE_CHANGED";
        sEvents[EVENT_INITIALIZE] = "EVENT_INITIALIZE";
        sEvents[EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED] = "EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED";
    }

    private final Phone mPhone;
@@ -136,6 +141,7 @@ public class NetworkTypeController extends StateMachine {
    private boolean mIsSecondaryTimerActive;
    private boolean mIsTimerResetEnabledForLegacyStateRRCIdle;
    private int mLtePlusThresholdBandwidth;
    private int[] mAdditionalNrAdvancedBandsList;
    private String mPrimaryTimerState;
    private String mSecondaryTimerState;
    private String mPreviousState;
@@ -184,6 +190,8 @@ public class NetworkTypeController extends StateMachine {
                EVENT_RADIO_OFF_OR_UNAVAILABLE, null);
        mPhone.registerForPreferredNetworkTypeChanged(getHandler(),
                EVENT_PREFERRED_NETWORK_MODE_CHANGED, null);
        mPhone.registerForPhysicalChannelConfig(getHandler(),
                EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED, null);
        mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getHandler(),
                EVENT_DATA_RAT_CHANGED, null);
@@ -256,6 +264,8 @@ public class NetworkTypeController extends StateMachine {
                mLtePlusThresholdBandwidth = b.getInt(
                        CarrierConfigManager.KEY_LTE_PLUS_THRESHOLD_BANDWIDTH_KHZ_INT,
                        mLtePlusThresholdBandwidth);
                mAdditionalNrAdvancedBandsList = b.getIntArray(
                        CarrierConfigManager.KEY_ADDITIONAL_NR_ADVANCED_BANDS_INT_ARRAY);
            }
        }
        createTimerRules(nrIconConfiguration, overrideTimerRule, overrideSecondaryTimerRule);
@@ -275,7 +285,7 @@ public class NetworkTypeController extends StateMachine {
                if (kv[1].equals(ICON_5G)) {
                    icon = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA;
                } else if (kv[1].equals(ICON_5G_PLUS)) {
                    icon = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE;
                    icon = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED;
                } else {
                    if (DBG) loge("Invalid 5G icon = " + kv[1]);
                }
@@ -367,7 +377,7 @@ public class NetworkTypeController extends StateMachine {
        // NR display is not accurate when physical channel config notifications are off
        if (mIsPhysicalChannelConfigOn && (nrNsa || nrSa)) {
            // Process NR display network type
            displayNetworkType = getNrDisplayType();
            displayNetworkType = getNrDisplayType(nrSa);
            if (displayNetworkType == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) {
                // Use LTE values if 5G values aren't defined
                displayNetworkType = getLteDisplayType();
@@ -379,7 +389,7 @@ public class NetworkTypeController extends StateMachine {
        return displayNetworkType;
    }

    private @Annotation.OverrideNetworkType int getNrDisplayType() {
    private @Annotation.OverrideNetworkType int getNrDisplayType(boolean isNrSa) {
        // Don't show 5G icon if preferred network type does not include 5G
        if ((mPhone.getCachedAllowedNetworkTypesBitmask()
                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) == 0) {
@@ -387,11 +397,13 @@ public class NetworkTypeController extends StateMachine {
        }
        // Icon display keys in order of priority
        List<String> keys = new ArrayList<>();
        // TODO: Update for NR SA
        if (isNrSa && isNrAdvanced()) {
            keys.add(STATE_CONNECTED_NR_ADVANCED);
        } else {
            switch (mPhone.getServiceState().getNrState()) {
                case NetworkRegistrationInfo.NR_STATE_CONNECTED:
                if (isNrMmwave()) {
                    keys.add(STATE_CONNECTED_MMWAVE);
                    if (isNrAdvanced()) {
                        keys.add(STATE_CONNECTED_NR_ADVANCED);
                    }
                    keys.add(STATE_CONNECTED);
                    break;
@@ -403,6 +415,7 @@ public class NetworkTypeController extends StateMachine {
                    keys.add(STATE_RESTRICTED);
                    break;
            }
        }

        for (String key : keys) {
            OverrideTimerRule rule = mOverrideTimerRules.get(key);
@@ -473,6 +486,7 @@ public class NetworkTypeController extends StateMachine {
                case EVENT_DATA_RAT_CHANGED:
                case EVENT_NR_STATE_CHANGED:
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    // ignored
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
@@ -579,6 +593,7 @@ public class NetworkTypeController extends StateMachine {
                    mIsNrRestricted = isNrRestricted();
                    break;
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    // ignored
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
@@ -641,6 +656,7 @@ public class NetworkTypeController extends StateMachine {
                    }
                    break;
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    // ignore
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
@@ -708,6 +724,7 @@ public class NetworkTypeController extends StateMachine {
                    }
                    break;
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    // ignore
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
@@ -744,7 +761,7 @@ public class NetworkTypeController extends StateMachine {
     * Device is connected to 5G NR as the secondary cell.
     */
    private final class NrConnectedState extends State {
        private Boolean mIsNrMmwave = false;
        private Boolean mIsNrAdvanced = false;

        @Override
        public void enter() {
@@ -752,7 +769,7 @@ public class NetworkTypeController extends StateMachine {
            updateTimers();
            updateOverrideNetworkType();
            if (!mIsPrimaryTimerActive && !mIsSecondaryTimerActive) {
                mIsNrMmwave = isNrMmwave();
                mIsNrAdvanced = isNrAdvanced();
                mPreviousState = getName();
            }
        }
@@ -782,19 +799,20 @@ public class NetworkTypeController extends StateMachine {
                    }
                    break;
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    if (!isNrConnected()) {
                        log("NR state changed. Sending EVENT_NR_STATE_CHANGED");
                        sendMessage(EVENT_NR_STATE_CHANGED);
                        break;
                    }
                    if (!isNrMmwave()) {
                        // STATE_CONNECTED_MMWAVE -> STATE_CONNECTED
                    if (!isNrAdvanced()) {
                        // STATE_CONNECTED_NR_ADVANCED -> STATE_CONNECTED
                        transitionWithTimerTo(mNrConnectedState);
                    } else {
                        // STATE_CONNECTED -> STATE_CONNECTED_MMWAVE
                        // STATE_CONNECTED -> STATE_CONNECTED_NR_ADVANCED
                        transitionTo(mNrConnectedState);
                    }
                    mIsNrMmwave = isNrMmwave();
                    mIsNrAdvanced = isNrAdvanced();
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
                    AsyncResult ar = (AsyncResult) msg.obj;
@@ -815,7 +833,7 @@ public class NetworkTypeController extends StateMachine {

        @Override
        public String getName() {
            return mIsNrMmwave ? STATE_CONNECTED_MMWAVE : STATE_CONNECTED;
            return mIsNrAdvanced ? STATE_CONNECTED_NR_ADVANCED : STATE_CONNECTED;
        }
    }

@@ -855,7 +873,7 @@ public class NetworkTypeController extends StateMachine {
        IState transitionState;
        if (dataRat == TelephonyManager.NETWORK_TYPE_NR || isNrConnected()) {
            transitionState = mNrConnectedState;
            mPreviousState = isNrMmwave() ? STATE_CONNECTED_MMWAVE : STATE_CONNECTED;
            mPreviousState = isNrAdvanced() ? STATE_CONNECTED_NR_ADVANCED : STATE_CONNECTED;
        } else if (isLte(dataRat) && isNrNotRestricted()) {
            if (isPhysicalLinkActive()) {
                transitionState = mLteConnectedState;
@@ -900,7 +918,7 @@ public class NetworkTypeController extends StateMachine {
            mSecondaryTimerState = "";
        }

        if (currentState.equals(STATE_CONNECTED_MMWAVE)) {
        if (currentState.equals(STATE_CONNECTED_NR_ADVANCED)) {
            resetAllTimers();
        }

@@ -1019,11 +1037,31 @@ public class NetworkTypeController extends StateMachine {
                == NetworkRegistrationInfo.NR_STATE_RESTRICTED;
    }

    private boolean isNrAdvanced() {
        return isNrMmwave() || isAdditionalNrAdvancedBand();
    }

    private boolean isNrMmwave() {
        return mPhone.getServiceState().getNrFrequencyRange()
                == ServiceState.FREQUENCY_RANGE_MMWAVE;
    }

    private boolean isAdditionalNrAdvancedBand() {
        List<PhysicalChannelConfig> physicalChannelConfigList =
                mPhone.getServiceStateTracker().getPhysicalChannelConfigList();
        if (ArrayUtils.isEmpty(mAdditionalNrAdvancedBandsList)
                || physicalChannelConfigList == null) {
            return false;
        }
        for (PhysicalChannelConfig item : physicalChannelConfigList) {
            if (item.getNetworkType() == TelephonyManager.NETWORK_TYPE_NR
                    && ArrayUtils.contains(mAdditionalNrAdvancedBandsList, item.getBand())) {
                return true;
            }
        }
        return false;
    }

    private boolean isLte(int rat) {
        return rat == TelephonyManager.NETWORK_TYPE_LTE
                || rat == TelephonyManager.NETWORK_TYPE_LTE_CA;
@@ -1088,6 +1126,8 @@ public class NetworkTypeController extends StateMachine {
        pw.println("mSecondaryTimerState=" + mSecondaryTimerState);
        pw.println("mPreviousState=" + mPreviousState);
        pw.println("mPhysicalLinkState=" + mPhysicalLinkState);
        pw.println("mAdditionalNrAdvancedBandsList="
                + Arrays.toString(mAdditionalNrAdvancedBandsList));
        pw.decreaseIndent();
        pw.flush();
    }
+4 −4
Original line number Diff line number Diff line
@@ -4381,7 +4381,7 @@ public class DcTracker extends Handler {

        if (isNetworkTypeUnmetered(NETWORK_TYPE_NR)) {
            if (mNrNsaMmwaveUnmetered) {
                if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE) {
                if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED) {
                    if (DBG) log("NR unmetered for mmwave only");
                    return true;
                }
@@ -4393,7 +4393,7 @@ public class DcTracker extends Handler {
                }
                return false;
            }
            if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE
            if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED
                    || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA
                    || rat == NETWORK_TYPE_NR) {
                if (DBG) log("NR unmetered for all frequencies");
@@ -4404,7 +4404,7 @@ public class DcTracker extends Handler {

        if (mNrNsaAllUnmetered) {
            if (mNrNsaMmwaveUnmetered) {
                if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE) {
                if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED) {
                    if (DBG) log("NR NSA unmetered for mmwave only via carrier configs");
                    return true;
                }
@@ -4416,7 +4416,7 @@ public class DcTracker extends Handler {
                }
                return false;
            }
            if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE
            if (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED
                    || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA) {
                if (DBG) log("NR NSA unmetered for all frequencies via carrier configs");
                return true;
+112 −15

File changed.

Preview size limit exceeded, changes collapsed.

+2 −2
Original line number Diff line number Diff line
@@ -2541,7 +2541,7 @@ public class DcTrackerTest extends TelephonyTest {

        // NetCapability should switch to unmetered with fr=MMWAVE
        doReturn(new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_LTE,
                TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE))
                TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED))
                .when(mDisplayInfoController).getTelephonyDisplayInfo();
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TELEPHONY_DISPLAY_INFO_CHANGED));
        waitForLastHandlerAction(mDcTrackerTestHandler.getThreadHandler());
@@ -2578,7 +2578,7 @@ public class DcTrackerTest extends TelephonyTest {

        // NetCapability should switch to unmetered when fr=MMWAVE and MMWAVE unmetered
        doReturn(new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_LTE,
                TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE))
                TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED))
                .when(mDisplayInfoController).getTelephonyDisplayInfo();
        mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TELEPHONY_DISPLAY_INFO_CHANGED));
        waitForLastHandlerAction(mDcTrackerTestHandler.getThreadHandler());