Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +9 −9 Original line number Diff line number Diff line Loading @@ -264,8 +264,16 @@ public class GsmCdmaPhone extends Phone { this, this.mCi); mDataEnabledSettings = mTelephonyComponentFactory .inject(DataEnabledSettings.class.getName()).makeDataEnabledSettings(this); mDeviceStateMonitor = mTelephonyComponentFactory.inject(DeviceStateMonitor.class.getName()) .makeDeviceStateMonitor(this); // DisplayInfoController creates an OverrideNetworkTypeController, which uses // DeviceStateMonitor so needs to be crated after it is instantiated. mDisplayInfoController = mTelephonyComponentFactory.inject( DisplayInfoController.class.getName()).makeDisplayInfoController(this); // DcTracker uses SST so needs to be created after it is instantiated // DcTracker uses ServiceStateTracker and DisplayInfoController so needs to be created // after they are instantiated for (int transport : mTransportManager.getAvailableTransports()) { mDcTrackers.put(transport, mTelephonyComponentFactory.inject(DcTracker.class.getName()) .makeDcTracker(this, transport)); Loading @@ -279,14 +287,6 @@ public class GsmCdmaPhone extends Phone { EVENT_SET_CARRIER_DATA_ENABLED, null, false); mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); mDeviceStateMonitor = mTelephonyComponentFactory.inject(DeviceStateMonitor.class.getName()) .makeDeviceStateMonitor(this); // DisplayInfoController creates an OverrideNetworkTypeController, which uses // DeviceStateMonitor so needs to be crated after it is instantiated. mDisplayInfoController = mTelephonyComponentFactory.inject( DisplayInfoController.class.getName()).makeDisplayInfoController(this); mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null); mSettingsObserver = new SettingsObserver(context, this); Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +9 −14 Original line number Diff line number Diff line Loading @@ -2006,15 +2006,6 @@ public class ServiceStateTracker extends Handler { return cdmaRoaming && !isSameOperatorNameFromSimAndSS(s); } private boolean isNrStateChanged( NetworkRegistrationInfo oldRegState, NetworkRegistrationInfo newRegState) { if (oldRegState == null || newRegState == null) { return oldRegState != newRegState; } return oldRegState.getNrState() != newRegState.getNrState(); } private boolean updateNrFrequencyRangeFromPhysicalChannelConfigs( List<PhysicalChannelConfig> physicalChannelConfigs, ServiceState ss) { int newFrequencyRange = ServiceState.FREQUENCY_RANGE_UNKNOWN; Loading Loading @@ -3261,11 +3252,7 @@ public class ServiceStateTracker extends Handler { boolean hasNrFrequencyRangeChanged = mSS.getNrFrequencyRange() != mNewSS.getNrFrequencyRange(); boolean hasNrStateChanged = isNrStateChanged( mSS.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkType.EUTRAN), mNewSS.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkType.EUTRAN)); boolean hasNrStateChanged = mSS.getNrState() != mNewSS.getNrState(); final List<CellIdentity> prioritizedCids = getPrioritizedCellIdentities(mNewSS); Loading Loading @@ -3582,6 +3569,14 @@ public class ServiceStateTracker extends Handler { mPhone.notifyLocationChanged(getCellIdentity()); } if (hasNrStateChanged) { mNrStateChangedRegistrants.notifyRegistrants(); } if (hasNrFrequencyRangeChanged) { mNrFrequencyChangedRegistrants.notifyRegistrants(); } if (mPhone.isPhoneTypeGsm()) { if (!isGprsConsistent(mSS.getDataRegistrationState(), mSS.getState())) { if (!mStartedGprsRegCheck && !mReportedGprsNoReg) { Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +41 −238 Original line number Diff line number Diff line Loading @@ -132,8 +132,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; /** Loading Loading @@ -315,9 +313,9 @@ public class DcTracker extends Handler { private final LocalLog mDataRoamingLeakageLog = new LocalLog(50); private final LocalLog mApnSettingsInitializationLog = new LocalLog(50); /* Default for 5G connection reevaluation alarm durations */ private int mHysteresisTimeSec = 0; /* 5G connection reevaluation watchdog alarm constants */ private long mWatchdogTimeMs = 1000 * 60 * 60; private boolean mWatchdog = false; /* Default for whether 5G frequencies are considered unmetered */ private boolean mNrNsaAllUnmetered = false; Loading @@ -328,21 +326,9 @@ public class DcTracker extends Handler { private boolean mNrSaSub6Unmetered = false; private boolean mRoamingUnmetered = false; /* Used to check whether 5G timers are currently active and waiting to go off */ private boolean mHysteresis = false; private boolean mWatchdog = false; /* List of SubscriptionPlans, updated on SubscriptionManager.setSubscriptionPlans */ private List<SubscriptionPlan> mSubscriptionPlans = null; /* Used to check whether phone was recently connected to 5G. */ private boolean m5GWasConnected = false; /* Used to determine TelephonyDisplayInfo to send to SysUI. */ private TelephonyDisplayInfo mTelephonyDisplayInfo = null; private final Map<String, Integer> m5GIconMapping = new HashMap<>(); private String mDataIconPattern = ""; @SimState private int mSimState = TelephonyManager.SIM_STATE_UNKNOWN; Loading @@ -358,16 +344,12 @@ public class DcTracker extends Handler { stopNetStatPoll(); startNetStatPoll(); restartDataStallAlarm(); reevaluateUnmeteredConnections(); } else if (action.equals(Intent.ACTION_SCREEN_OFF)) { if (DBG) log("screen off"); mIsScreenOn = false; stopNetStatPoll(); startNetStatPoll(); restartDataStallAlarm(); stopHysteresisAlarm(); stopWatchdogAlarm(); setDataConnectionUnmetered(false); } else if (action.equals(INTENT_DATA_STALL_ALARM)) { onActionIntentDataStallAlarm(intent); } else if (action.equals(INTENT_PROVISIONING_APN_ALARM)) { Loading Loading @@ -781,8 +763,6 @@ public class DcTracker extends Handler { DctConstants.EVENT_PS_RESTRICT_DISABLED, null); mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(mTransportType, this, DctConstants.EVENT_DATA_RAT_CHANGED, null); // listens for PhysicalChannelConfig changes mPhone.registerForServiceStateChanged(this, DctConstants.EVENT_SERVICE_STATE_CHANGED, null); } public void unregisterServiceStateTrackerEvents() { Loading @@ -792,9 +772,7 @@ public class DcTracker extends Handler { mPhone.getServiceStateTracker().unregisterForDataRoamingOff(this); mPhone.getServiceStateTracker().unregisterForPsRestrictedEnabled(this); mPhone.getServiceStateTracker().unregisterForPsRestrictedDisabled(this); mPhone.getServiceStateTracker().unregisterForDataRegStateOrRatChanged(mTransportType, this); mPhone.unregisterForServiceStateChanged(this); mPhone.getServiceStateTracker().unregisterForDataRegStateOrRatChanged(mTransportType, this); } private void registerForAllEvents() { Loading @@ -814,6 +792,8 @@ public class DcTracker extends Handler { DctConstants.EVENT_VOICE_CALL_ENDED, null); mPhone.getCallTracker().registerForVoiceCallStarted(this, DctConstants.EVENT_VOICE_CALL_STARTED, null); mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged(this, DctConstants.EVENT_TELEPHONY_DISPLAY_INFO_CHANGED, null); registerServiceStateTrackerEvents(); mDataServiceManager.registerForServiceBindingChanged(this, DctConstants.EVENT_DATA_SERVICE_BINDING_CHANGED, null); Loading Loading @@ -860,9 +840,9 @@ public class DcTracker extends Handler { mPhone.getCallTracker().unregisterForVoiceCallEnded(this); mPhone.getCallTracker().unregisterForVoiceCallStarted(this); mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged(this); unregisterServiceStateTrackerEvents(); mDataServiceManager.unregisterForServiceBindingChanged(this); mDataEnabledSettings.unregisterForDataEnabledChanged(this); mDataEnabledSettings.unregisterForDataEnabledOverrideChanged(this); } Loading Loading @@ -897,7 +877,6 @@ public class DcTracker extends Handler { log("setActivity = " + activity); mActivity = activity; mPhone.notifyDataActivity(); updateDisplayInfo(); } public void requestNetwork(NetworkRequest networkRequest, @RequestNetworkType int type, Loading Loading @@ -3880,19 +3859,11 @@ public class DcTracker extends Handler { case DctConstants.EVENT_DATA_ENABLED_OVERRIDE_RULES_CHANGED: onDataEnabledOverrideRulesChanged(); break; case DctConstants.EVENT_SERVICE_STATE_CHANGED: if (!reevaluateUnmeteredConnections()) { // always update on ServiceState changed so MobileSignalController gets // accurate display info mPhone.notifyDisplayInfoChanged(mTelephonyDisplayInfo); } break; case DctConstants.EVENT_5G_TIMER_HYSTERESIS: case DctConstants.EVENT_NR_TIMER_WATCHDOG: mWatchdog = false; reevaluateUnmeteredConnections(); mHysteresis = false; break; case DctConstants.EVENT_5G_TIMER_WATCHDOG: mWatchdog = false; case DctConstants.EVENT_TELEPHONY_DISPLAY_INFO_CHANGED: reevaluateUnmeteredConnections(); break; case DctConstants.EVENT_CARRIER_CONFIG_CHANGED: Loading Loading @@ -3990,26 +3961,6 @@ public class DcTracker extends Handler { return mBandwidths.get(ratName); } private void update5GIconMapping(String config) { synchronized (m5GIconMapping) { m5GIconMapping.clear(); for (String pair : config.trim().split(",")) { String[] kv = (pair.trim().toLowerCase()).split(":"); if (kv.length != 2) { if (DBG) log("Invalid 5G icon configuration, config = " + pair); continue; } int value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; if (kv[1].equals("5g")) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA; } else if (kv[1].equals("5g_plus")) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE; } m5GIconMapping.put(kv[0], value); } } } @VisibleForTesting public boolean shouldAutoAttach() { if (mAutoAttachEnabled.get()) return true; Loading Loading @@ -4084,49 +4035,25 @@ public class DcTracker extends Handler { } } private boolean reevaluateUnmeteredConnections() { private void reevaluateUnmeteredConnections() { log("reevaluateUnmeteredConnections"); int networkType = ServiceState.rilRadioTechnologyToNetworkType(getDataRat()); boolean nrUnmetered = isNetworkTypeUnmetered(NETWORK_TYPE_NR); boolean nrNsaUnmetered = isNrNsaFrequencyRangeUnmetered(); boolean nrSaUnmetered = isNrSaFrequencyRangeUnmetered(); if ((nrUnmetered || nrNsaUnmetered || nrSaUnmetered) int rat = mPhone.getDisplayInfoController().getTelephonyDisplayInfo().getNetworkType(); int override = mPhone.getDisplayInfoController().getTelephonyDisplayInfo() .getOverrideNetworkType(); boolean nrPlanUnmetered = isNetworkTypeUnmetered(NETWORK_TYPE_NR) && (rat == NETWORK_TYPE_NR || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE); if ((nrPlanUnmetered || isNrNsaFrequencyRangeUnmetered() || isNrSaFrequencyRangeUnmetered()) && !mPhone.getServiceState().getRoaming() || mRoamingUnmetered) { if (DBG) log("NR is unmetered"); if ((nrUnmetered || nrNsaUnmetered) && mPhone.getServiceState().getNrState() == NetworkRegistrationInfo.NR_STATE_CONNECTED || (nrUnmetered || nrSaUnmetered) && networkType == NETWORK_TYPE_NR) { if (!m5GWasConnected) { // 4G -> 5G stopHysteresisAlarm(); setDataConnectionUnmetered(true); } if (!mWatchdog) { startWatchdogAlarm(); } m5GWasConnected = true; } else { if (m5GWasConnected) { // 5G -> 4G if (!mHysteresis && !startHysteresisAlarm()) { // hysteresis is not active but carrier does not support hysteresis stopWatchdogAlarm(); setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType)); } m5GWasConnected = false; } else { // 4G -> 4G if (!hasMessages(DctConstants.EVENT_5G_TIMER_HYSTERESIS)) { stopWatchdogAlarm(); setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType)); setDataConnectionUnmetered(isNetworkTypeUnmetered(rat)); } // do nothing if waiting for hysteresis alarm to go off } } } else { stopWatchdogAlarm(); stopHysteresisAlarm(); setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType)); m5GWasConnected = false; } return updateDisplayInfo(); } private void setDataConnectionUnmetered(boolean isUnmetered) { Loading Loading @@ -4173,18 +4100,24 @@ public class DcTracker extends Handler { } private boolean isNrNsaFrequencyRangeUnmetered() { int override = mPhone.getDisplayInfoController().getTelephonyDisplayInfo() .getOverrideNetworkType(); if (mNrNsaMmwaveUnmetered || mNrNsaSub6Unmetered) { int frequencyRange = mPhone.getServiceState().getNrFrequencyRange(); boolean mmwave = frequencyRange == ServiceState.FREQUENCY_RANGE_MMWAVE; // frequency range LOW, MID, or HIGH boolean sub6 = frequencyRange != ServiceState.FREQUENCY_RANGE_UNKNOWN && !mmwave; return mNrNsaMmwaveUnmetered && mmwave || mNrNsaSub6Unmetered && sub6; return (mNrNsaMmwaveUnmetered && override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE) || (mNrNsaSub6Unmetered && override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA); } else { return mNrNsaAllUnmetered; return mNrNsaAllUnmetered && (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA); } } private boolean isNrSaFrequencyRangeUnmetered() { if (ServiceState.rilRadioTechnologyToNetworkType(getDataRat()) != NETWORK_TYPE_NR) { return false; } if (mNrSaMmwaveUnmetered || mNrSaSub6Unmetered) { int frequencyRange = mPhone.getServiceState().getNrFrequencyRange(); boolean mmwave = frequencyRange == ServiceState.FREQUENCY_RANGE_MMWAVE; Loading @@ -4196,94 +4129,6 @@ public class DcTracker extends Handler { } } private boolean updateDisplayInfo() { int displayNetworkType = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; int dataNetworkType = mPhone.getServiceState().getDataNetworkType(); if (mPhone.getServiceState().getNrState() != NetworkRegistrationInfo.NR_STATE_NONE || dataNetworkType == TelephonyManager.NETWORK_TYPE_NR || mHysteresis) { // process NR display network type displayNetworkType = getNrDisplayType(); if (displayNetworkType == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) { // use LTE values if 5G values aren't defined displayNetworkType = getLteDisplayType(); } } else if (dataNetworkType == TelephonyManager.NETWORK_TYPE_LTE || dataNetworkType == TelephonyManager.NETWORK_TYPE_LTE_CA) { // process LTE display network type displayNetworkType = getLteDisplayType(); } TelephonyDisplayInfo telephonyDisplayInfo = new TelephonyDisplayInfo(dataNetworkType, displayNetworkType); if (!telephonyDisplayInfo.equals(mTelephonyDisplayInfo)) { log("Display info changed: " + telephonyDisplayInfo); mTelephonyDisplayInfo = telephonyDisplayInfo; mPhone.notifyDisplayInfoChanged(telephonyDisplayInfo); return true; } return false; } private int getNrDisplayType() { // icon display keys in order of priority List<String> keys = new ArrayList<>(); switch (mPhone.getServiceState().getNrState()) { case NetworkRegistrationInfo.NR_STATE_CONNECTED: if (mPhone.getServiceState().getNrFrequencyRange() == ServiceState.FREQUENCY_RANGE_MMWAVE) { keys.add("connected_mmwave"); } keys.add("connected"); break; case NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED: if (mActivity == DctConstants.Activity.DORMANT) { keys.add("not_restricted_rrc_idle"); } else { keys.add("not_restricted_rrc_con"); } break; case NetworkRegistrationInfo.NR_STATE_RESTRICTED: keys.add("restricted"); break; } for (String key : keys) { if (m5GIconMapping.containsKey(key) && m5GIconMapping.get(key) != TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) { return m5GIconMapping.get(key); } } return TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; } private int getLteDisplayType() { int value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; if (mPhone.getServiceState().getDataNetworkType() == TelephonyManager.NETWORK_TYPE_LTE_CA || mPhone.getServiceState().isUsingCarrierAggregation()) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA; } if (isLteEnhancedAvailable()) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO; } return value; } private boolean isLteEnhancedAvailable() { if (TextUtils.isEmpty(mDataIconPattern)) { return false; } Pattern stringPattern = Pattern.compile(mDataIconPattern); for (String opName : new String[] {mPhone.getServiceState().getOperatorAlphaLongRaw(), mPhone.getServiceState().getOperatorAlphaShortRaw()}) { if (!TextUtils.isEmpty(opName)) { Matcher matcher = stringPattern.matcher(opName); if (matcher.find()) { return true; } } } return false; } protected void log(String s) { Rlog.d(mLogTag, s); } Loading Loading @@ -4696,7 +4541,6 @@ public class DcTracker extends Handler { log("updateDataActivity: newActivity=" + newActivity); mActivity = newActivity; mPhone.notifyDataActivity(); updateDisplayInfo(); } } } Loading Loading @@ -5141,32 +4985,15 @@ public class DcTracker extends Handler { } /** * 5G connection reevaluation alarms * 5G connection reevaluation alarm */ private boolean startHysteresisAlarm() { if (mHysteresisTimeSec > 0) { // only create hysteresis alarm if CarrierConfig allows it sendMessageDelayed(obtainMessage(DctConstants.EVENT_5G_TIMER_HYSTERESIS), mHysteresisTimeSec * 1000); mHysteresis = true; return true; } else { return false; } } private void stopHysteresisAlarm() { removeMessages(DctConstants.EVENT_5G_TIMER_HYSTERESIS); mHysteresis = false; } private void startWatchdogAlarm() { sendMessageDelayed(obtainMessage(DctConstants.EVENT_5G_TIMER_WATCHDOG), mWatchdogTimeMs); sendMessageDelayed(obtainMessage(DctConstants.EVENT_NR_TIMER_WATCHDOG), mWatchdogTimeMs); mWatchdog = true; } private void stopWatchdogAlarm() { removeMessages(DctConstants.EVENT_5G_TIMER_WATCHDOG); removeMessages(DctConstants.EVENT_NR_TIMER_WATCHDOG); mWatchdog = false; } Loading Loading @@ -5258,50 +5085,28 @@ public class DcTracker extends Handler { return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; } // TODO: Move icon related to display info controller. private void read5GConfiguration() { if (DBG) log("read5GConfiguration"); String nr5GIconConfiguration = CarrierConfigManager.getDefaultConfig().getString( CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING); String[] bandwidths = CarrierConfigManager.getDefaultConfig().getStringArray( CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY); boolean useLte = false; mDataIconPattern = CarrierConfigManager.getDefaultConfig().getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager != null) { PersistableBundle b = configManager.getConfigForSubId(mPhone.getSubId()); if (b != null) { if (b.getString(CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING) != null) { nr5GIconConfiguration = b.getString( CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING); } if (b.getString(CarrierConfigManager .KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING) != null) { mDataIconPattern = b.getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); } if (b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY) != null) { bandwidths = b.getStringArray( CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY); if (b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY) != null) { bandwidths = b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY); } useLte = b.getBoolean(CarrierConfigManager .KEY_BANDWIDTH_NR_NSA_USE_LTE_VALUE_FOR_UPSTREAM_BOOL); mHysteresisTimeSec = b.getInt( CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT); mWatchdogTimeMs = b.getLong( CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG); mNrNsaAllUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL); mWatchdogTimeMs = b.getLong(CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG); mNrNsaAllUnmetered = b.getBoolean(CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL); mNrNsaMmwaveUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_NSA_MMWAVE_BOOL); mNrNsaSub6Unmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_NSA_SUB6_BOOL); mNrSaAllUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_SA_BOOL); mNrSaAllUnmetered = b.getBoolean(CarrierConfigManager.KEY_UNMETERED_NR_SA_BOOL); mNrSaMmwaveUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_SA_MMWAVE_BOOL); mNrSaSub6Unmetered = b.getBoolean( Loading @@ -5310,8 +5115,6 @@ public class DcTracker extends Handler { CarrierConfigManager.KEY_UNMETERED_NR_NSA_WHEN_ROAMING_BOOL); } } updateLinkBandwidths(bandwidths, useLte); update5GIconMapping(nr5GIconConfiguration); } } Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +9 −9 Original line number Diff line number Diff line Loading @@ -264,8 +264,16 @@ public class GsmCdmaPhone extends Phone { this, this.mCi); mDataEnabledSettings = mTelephonyComponentFactory .inject(DataEnabledSettings.class.getName()).makeDataEnabledSettings(this); mDeviceStateMonitor = mTelephonyComponentFactory.inject(DeviceStateMonitor.class.getName()) .makeDeviceStateMonitor(this); // DisplayInfoController creates an OverrideNetworkTypeController, which uses // DeviceStateMonitor so needs to be crated after it is instantiated. mDisplayInfoController = mTelephonyComponentFactory.inject( DisplayInfoController.class.getName()).makeDisplayInfoController(this); // DcTracker uses SST so needs to be created after it is instantiated // DcTracker uses ServiceStateTracker and DisplayInfoController so needs to be created // after they are instantiated for (int transport : mTransportManager.getAvailableTransports()) { mDcTrackers.put(transport, mTelephonyComponentFactory.inject(DcTracker.class.getName()) .makeDcTracker(this, transport)); Loading @@ -279,14 +287,6 @@ public class GsmCdmaPhone extends Phone { EVENT_SET_CARRIER_DATA_ENABLED, null, false); mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); mDeviceStateMonitor = mTelephonyComponentFactory.inject(DeviceStateMonitor.class.getName()) .makeDeviceStateMonitor(this); // DisplayInfoController creates an OverrideNetworkTypeController, which uses // DeviceStateMonitor so needs to be crated after it is instantiated. mDisplayInfoController = mTelephonyComponentFactory.inject( DisplayInfoController.class.getName()).makeDisplayInfoController(this); mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null); mSettingsObserver = new SettingsObserver(context, this); Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +9 −14 Original line number Diff line number Diff line Loading @@ -2006,15 +2006,6 @@ public class ServiceStateTracker extends Handler { return cdmaRoaming && !isSameOperatorNameFromSimAndSS(s); } private boolean isNrStateChanged( NetworkRegistrationInfo oldRegState, NetworkRegistrationInfo newRegState) { if (oldRegState == null || newRegState == null) { return oldRegState != newRegState; } return oldRegState.getNrState() != newRegState.getNrState(); } private boolean updateNrFrequencyRangeFromPhysicalChannelConfigs( List<PhysicalChannelConfig> physicalChannelConfigs, ServiceState ss) { int newFrequencyRange = ServiceState.FREQUENCY_RANGE_UNKNOWN; Loading Loading @@ -3261,11 +3252,7 @@ public class ServiceStateTracker extends Handler { boolean hasNrFrequencyRangeChanged = mSS.getNrFrequencyRange() != mNewSS.getNrFrequencyRange(); boolean hasNrStateChanged = isNrStateChanged( mSS.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkType.EUTRAN), mNewSS.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkType.EUTRAN)); boolean hasNrStateChanged = mSS.getNrState() != mNewSS.getNrState(); final List<CellIdentity> prioritizedCids = getPrioritizedCellIdentities(mNewSS); Loading Loading @@ -3582,6 +3569,14 @@ public class ServiceStateTracker extends Handler { mPhone.notifyLocationChanged(getCellIdentity()); } if (hasNrStateChanged) { mNrStateChangedRegistrants.notifyRegistrants(); } if (hasNrFrequencyRangeChanged) { mNrFrequencyChangedRegistrants.notifyRegistrants(); } if (mPhone.isPhoneTypeGsm()) { if (!isGprsConsistent(mSS.getDataRegistrationState(), mSS.getState())) { if (!mStartedGprsRegCheck && !mReportedGprsNoReg) { Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +41 −238 Original line number Diff line number Diff line Loading @@ -132,8 +132,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; /** Loading Loading @@ -315,9 +313,9 @@ public class DcTracker extends Handler { private final LocalLog mDataRoamingLeakageLog = new LocalLog(50); private final LocalLog mApnSettingsInitializationLog = new LocalLog(50); /* Default for 5G connection reevaluation alarm durations */ private int mHysteresisTimeSec = 0; /* 5G connection reevaluation watchdog alarm constants */ private long mWatchdogTimeMs = 1000 * 60 * 60; private boolean mWatchdog = false; /* Default for whether 5G frequencies are considered unmetered */ private boolean mNrNsaAllUnmetered = false; Loading @@ -328,21 +326,9 @@ public class DcTracker extends Handler { private boolean mNrSaSub6Unmetered = false; private boolean mRoamingUnmetered = false; /* Used to check whether 5G timers are currently active and waiting to go off */ private boolean mHysteresis = false; private boolean mWatchdog = false; /* List of SubscriptionPlans, updated on SubscriptionManager.setSubscriptionPlans */ private List<SubscriptionPlan> mSubscriptionPlans = null; /* Used to check whether phone was recently connected to 5G. */ private boolean m5GWasConnected = false; /* Used to determine TelephonyDisplayInfo to send to SysUI. */ private TelephonyDisplayInfo mTelephonyDisplayInfo = null; private final Map<String, Integer> m5GIconMapping = new HashMap<>(); private String mDataIconPattern = ""; @SimState private int mSimState = TelephonyManager.SIM_STATE_UNKNOWN; Loading @@ -358,16 +344,12 @@ public class DcTracker extends Handler { stopNetStatPoll(); startNetStatPoll(); restartDataStallAlarm(); reevaluateUnmeteredConnections(); } else if (action.equals(Intent.ACTION_SCREEN_OFF)) { if (DBG) log("screen off"); mIsScreenOn = false; stopNetStatPoll(); startNetStatPoll(); restartDataStallAlarm(); stopHysteresisAlarm(); stopWatchdogAlarm(); setDataConnectionUnmetered(false); } else if (action.equals(INTENT_DATA_STALL_ALARM)) { onActionIntentDataStallAlarm(intent); } else if (action.equals(INTENT_PROVISIONING_APN_ALARM)) { Loading Loading @@ -781,8 +763,6 @@ public class DcTracker extends Handler { DctConstants.EVENT_PS_RESTRICT_DISABLED, null); mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(mTransportType, this, DctConstants.EVENT_DATA_RAT_CHANGED, null); // listens for PhysicalChannelConfig changes mPhone.registerForServiceStateChanged(this, DctConstants.EVENT_SERVICE_STATE_CHANGED, null); } public void unregisterServiceStateTrackerEvents() { Loading @@ -792,9 +772,7 @@ public class DcTracker extends Handler { mPhone.getServiceStateTracker().unregisterForDataRoamingOff(this); mPhone.getServiceStateTracker().unregisterForPsRestrictedEnabled(this); mPhone.getServiceStateTracker().unregisterForPsRestrictedDisabled(this); mPhone.getServiceStateTracker().unregisterForDataRegStateOrRatChanged(mTransportType, this); mPhone.unregisterForServiceStateChanged(this); mPhone.getServiceStateTracker().unregisterForDataRegStateOrRatChanged(mTransportType, this); } private void registerForAllEvents() { Loading @@ -814,6 +792,8 @@ public class DcTracker extends Handler { DctConstants.EVENT_VOICE_CALL_ENDED, null); mPhone.getCallTracker().registerForVoiceCallStarted(this, DctConstants.EVENT_VOICE_CALL_STARTED, null); mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged(this, DctConstants.EVENT_TELEPHONY_DISPLAY_INFO_CHANGED, null); registerServiceStateTrackerEvents(); mDataServiceManager.registerForServiceBindingChanged(this, DctConstants.EVENT_DATA_SERVICE_BINDING_CHANGED, null); Loading Loading @@ -860,9 +840,9 @@ public class DcTracker extends Handler { mPhone.getCallTracker().unregisterForVoiceCallEnded(this); mPhone.getCallTracker().unregisterForVoiceCallStarted(this); mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged(this); unregisterServiceStateTrackerEvents(); mDataServiceManager.unregisterForServiceBindingChanged(this); mDataEnabledSettings.unregisterForDataEnabledChanged(this); mDataEnabledSettings.unregisterForDataEnabledOverrideChanged(this); } Loading Loading @@ -897,7 +877,6 @@ public class DcTracker extends Handler { log("setActivity = " + activity); mActivity = activity; mPhone.notifyDataActivity(); updateDisplayInfo(); } public void requestNetwork(NetworkRequest networkRequest, @RequestNetworkType int type, Loading Loading @@ -3880,19 +3859,11 @@ public class DcTracker extends Handler { case DctConstants.EVENT_DATA_ENABLED_OVERRIDE_RULES_CHANGED: onDataEnabledOverrideRulesChanged(); break; case DctConstants.EVENT_SERVICE_STATE_CHANGED: if (!reevaluateUnmeteredConnections()) { // always update on ServiceState changed so MobileSignalController gets // accurate display info mPhone.notifyDisplayInfoChanged(mTelephonyDisplayInfo); } break; case DctConstants.EVENT_5G_TIMER_HYSTERESIS: case DctConstants.EVENT_NR_TIMER_WATCHDOG: mWatchdog = false; reevaluateUnmeteredConnections(); mHysteresis = false; break; case DctConstants.EVENT_5G_TIMER_WATCHDOG: mWatchdog = false; case DctConstants.EVENT_TELEPHONY_DISPLAY_INFO_CHANGED: reevaluateUnmeteredConnections(); break; case DctConstants.EVENT_CARRIER_CONFIG_CHANGED: Loading Loading @@ -3990,26 +3961,6 @@ public class DcTracker extends Handler { return mBandwidths.get(ratName); } private void update5GIconMapping(String config) { synchronized (m5GIconMapping) { m5GIconMapping.clear(); for (String pair : config.trim().split(",")) { String[] kv = (pair.trim().toLowerCase()).split(":"); if (kv.length != 2) { if (DBG) log("Invalid 5G icon configuration, config = " + pair); continue; } int value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; if (kv[1].equals("5g")) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA; } else if (kv[1].equals("5g_plus")) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE; } m5GIconMapping.put(kv[0], value); } } } @VisibleForTesting public boolean shouldAutoAttach() { if (mAutoAttachEnabled.get()) return true; Loading Loading @@ -4084,49 +4035,25 @@ public class DcTracker extends Handler { } } private boolean reevaluateUnmeteredConnections() { private void reevaluateUnmeteredConnections() { log("reevaluateUnmeteredConnections"); int networkType = ServiceState.rilRadioTechnologyToNetworkType(getDataRat()); boolean nrUnmetered = isNetworkTypeUnmetered(NETWORK_TYPE_NR); boolean nrNsaUnmetered = isNrNsaFrequencyRangeUnmetered(); boolean nrSaUnmetered = isNrSaFrequencyRangeUnmetered(); if ((nrUnmetered || nrNsaUnmetered || nrSaUnmetered) int rat = mPhone.getDisplayInfoController().getTelephonyDisplayInfo().getNetworkType(); int override = mPhone.getDisplayInfoController().getTelephonyDisplayInfo() .getOverrideNetworkType(); boolean nrPlanUnmetered = isNetworkTypeUnmetered(NETWORK_TYPE_NR) && (rat == NETWORK_TYPE_NR || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE); if ((nrPlanUnmetered || isNrNsaFrequencyRangeUnmetered() || isNrSaFrequencyRangeUnmetered()) && !mPhone.getServiceState().getRoaming() || mRoamingUnmetered) { if (DBG) log("NR is unmetered"); if ((nrUnmetered || nrNsaUnmetered) && mPhone.getServiceState().getNrState() == NetworkRegistrationInfo.NR_STATE_CONNECTED || (nrUnmetered || nrSaUnmetered) && networkType == NETWORK_TYPE_NR) { if (!m5GWasConnected) { // 4G -> 5G stopHysteresisAlarm(); setDataConnectionUnmetered(true); } if (!mWatchdog) { startWatchdogAlarm(); } m5GWasConnected = true; } else { if (m5GWasConnected) { // 5G -> 4G if (!mHysteresis && !startHysteresisAlarm()) { // hysteresis is not active but carrier does not support hysteresis stopWatchdogAlarm(); setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType)); } m5GWasConnected = false; } else { // 4G -> 4G if (!hasMessages(DctConstants.EVENT_5G_TIMER_HYSTERESIS)) { stopWatchdogAlarm(); setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType)); setDataConnectionUnmetered(isNetworkTypeUnmetered(rat)); } // do nothing if waiting for hysteresis alarm to go off } } } else { stopWatchdogAlarm(); stopHysteresisAlarm(); setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType)); m5GWasConnected = false; } return updateDisplayInfo(); } private void setDataConnectionUnmetered(boolean isUnmetered) { Loading Loading @@ -4173,18 +4100,24 @@ public class DcTracker extends Handler { } private boolean isNrNsaFrequencyRangeUnmetered() { int override = mPhone.getDisplayInfoController().getTelephonyDisplayInfo() .getOverrideNetworkType(); if (mNrNsaMmwaveUnmetered || mNrNsaSub6Unmetered) { int frequencyRange = mPhone.getServiceState().getNrFrequencyRange(); boolean mmwave = frequencyRange == ServiceState.FREQUENCY_RANGE_MMWAVE; // frequency range LOW, MID, or HIGH boolean sub6 = frequencyRange != ServiceState.FREQUENCY_RANGE_UNKNOWN && !mmwave; return mNrNsaMmwaveUnmetered && mmwave || mNrNsaSub6Unmetered && sub6; return (mNrNsaMmwaveUnmetered && override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE) || (mNrNsaSub6Unmetered && override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA); } else { return mNrNsaAllUnmetered; return mNrNsaAllUnmetered && (override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE || override == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA); } } private boolean isNrSaFrequencyRangeUnmetered() { if (ServiceState.rilRadioTechnologyToNetworkType(getDataRat()) != NETWORK_TYPE_NR) { return false; } if (mNrSaMmwaveUnmetered || mNrSaSub6Unmetered) { int frequencyRange = mPhone.getServiceState().getNrFrequencyRange(); boolean mmwave = frequencyRange == ServiceState.FREQUENCY_RANGE_MMWAVE; Loading @@ -4196,94 +4129,6 @@ public class DcTracker extends Handler { } } private boolean updateDisplayInfo() { int displayNetworkType = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; int dataNetworkType = mPhone.getServiceState().getDataNetworkType(); if (mPhone.getServiceState().getNrState() != NetworkRegistrationInfo.NR_STATE_NONE || dataNetworkType == TelephonyManager.NETWORK_TYPE_NR || mHysteresis) { // process NR display network type displayNetworkType = getNrDisplayType(); if (displayNetworkType == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) { // use LTE values if 5G values aren't defined displayNetworkType = getLteDisplayType(); } } else if (dataNetworkType == TelephonyManager.NETWORK_TYPE_LTE || dataNetworkType == TelephonyManager.NETWORK_TYPE_LTE_CA) { // process LTE display network type displayNetworkType = getLteDisplayType(); } TelephonyDisplayInfo telephonyDisplayInfo = new TelephonyDisplayInfo(dataNetworkType, displayNetworkType); if (!telephonyDisplayInfo.equals(mTelephonyDisplayInfo)) { log("Display info changed: " + telephonyDisplayInfo); mTelephonyDisplayInfo = telephonyDisplayInfo; mPhone.notifyDisplayInfoChanged(telephonyDisplayInfo); return true; } return false; } private int getNrDisplayType() { // icon display keys in order of priority List<String> keys = new ArrayList<>(); switch (mPhone.getServiceState().getNrState()) { case NetworkRegistrationInfo.NR_STATE_CONNECTED: if (mPhone.getServiceState().getNrFrequencyRange() == ServiceState.FREQUENCY_RANGE_MMWAVE) { keys.add("connected_mmwave"); } keys.add("connected"); break; case NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED: if (mActivity == DctConstants.Activity.DORMANT) { keys.add("not_restricted_rrc_idle"); } else { keys.add("not_restricted_rrc_con"); } break; case NetworkRegistrationInfo.NR_STATE_RESTRICTED: keys.add("restricted"); break; } for (String key : keys) { if (m5GIconMapping.containsKey(key) && m5GIconMapping.get(key) != TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) { return m5GIconMapping.get(key); } } return TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; } private int getLteDisplayType() { int value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE; if (mPhone.getServiceState().getDataNetworkType() == TelephonyManager.NETWORK_TYPE_LTE_CA || mPhone.getServiceState().isUsingCarrierAggregation()) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA; } if (isLteEnhancedAvailable()) { value = TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO; } return value; } private boolean isLteEnhancedAvailable() { if (TextUtils.isEmpty(mDataIconPattern)) { return false; } Pattern stringPattern = Pattern.compile(mDataIconPattern); for (String opName : new String[] {mPhone.getServiceState().getOperatorAlphaLongRaw(), mPhone.getServiceState().getOperatorAlphaShortRaw()}) { if (!TextUtils.isEmpty(opName)) { Matcher matcher = stringPattern.matcher(opName); if (matcher.find()) { return true; } } } return false; } protected void log(String s) { Rlog.d(mLogTag, s); } Loading Loading @@ -4696,7 +4541,6 @@ public class DcTracker extends Handler { log("updateDataActivity: newActivity=" + newActivity); mActivity = newActivity; mPhone.notifyDataActivity(); updateDisplayInfo(); } } } Loading Loading @@ -5141,32 +4985,15 @@ public class DcTracker extends Handler { } /** * 5G connection reevaluation alarms * 5G connection reevaluation alarm */ private boolean startHysteresisAlarm() { if (mHysteresisTimeSec > 0) { // only create hysteresis alarm if CarrierConfig allows it sendMessageDelayed(obtainMessage(DctConstants.EVENT_5G_TIMER_HYSTERESIS), mHysteresisTimeSec * 1000); mHysteresis = true; return true; } else { return false; } } private void stopHysteresisAlarm() { removeMessages(DctConstants.EVENT_5G_TIMER_HYSTERESIS); mHysteresis = false; } private void startWatchdogAlarm() { sendMessageDelayed(obtainMessage(DctConstants.EVENT_5G_TIMER_WATCHDOG), mWatchdogTimeMs); sendMessageDelayed(obtainMessage(DctConstants.EVENT_NR_TIMER_WATCHDOG), mWatchdogTimeMs); mWatchdog = true; } private void stopWatchdogAlarm() { removeMessages(DctConstants.EVENT_5G_TIMER_WATCHDOG); removeMessages(DctConstants.EVENT_NR_TIMER_WATCHDOG); mWatchdog = false; } Loading Loading @@ -5258,50 +5085,28 @@ public class DcTracker extends Handler { return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; } // TODO: Move icon related to display info controller. private void read5GConfiguration() { if (DBG) log("read5GConfiguration"); String nr5GIconConfiguration = CarrierConfigManager.getDefaultConfig().getString( CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING); String[] bandwidths = CarrierConfigManager.getDefaultConfig().getStringArray( CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY); boolean useLte = false; mDataIconPattern = CarrierConfigManager.getDefaultConfig().getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext() .getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager != null) { PersistableBundle b = configManager.getConfigForSubId(mPhone.getSubId()); if (b != null) { if (b.getString(CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING) != null) { nr5GIconConfiguration = b.getString( CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING); } if (b.getString(CarrierConfigManager .KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING) != null) { mDataIconPattern = b.getString( CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING); } if (b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY) != null) { bandwidths = b.getStringArray( CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY); if (b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY) != null) { bandwidths = b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY); } useLte = b.getBoolean(CarrierConfigManager .KEY_BANDWIDTH_NR_NSA_USE_LTE_VALUE_FOR_UPSTREAM_BOOL); mHysteresisTimeSec = b.getInt( CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT); mWatchdogTimeMs = b.getLong( CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG); mNrNsaAllUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL); mWatchdogTimeMs = b.getLong(CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG); mNrNsaAllUnmetered = b.getBoolean(CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL); mNrNsaMmwaveUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_NSA_MMWAVE_BOOL); mNrNsaSub6Unmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_NSA_SUB6_BOOL); mNrSaAllUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_SA_BOOL); mNrSaAllUnmetered = b.getBoolean(CarrierConfigManager.KEY_UNMETERED_NR_SA_BOOL); mNrSaMmwaveUnmetered = b.getBoolean( CarrierConfigManager.KEY_UNMETERED_NR_SA_MMWAVE_BOOL); mNrSaSub6Unmetered = b.getBoolean( Loading @@ -5310,8 +5115,6 @@ public class DcTracker extends Handler { CarrierConfigManager.KEY_UNMETERED_NR_NSA_WHEN_ROAMING_BOOL); } } updateLinkBandwidths(bandwidths, useLte); update5GIconMapping(nr5GIconConfiguration); } }