Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +46 −2 Original line number Diff line number Diff line Loading @@ -117,9 +117,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; Loading Loading @@ -216,6 +218,7 @@ public class ServiceStateTracker extends Handler { private RegistrantList mPsRestrictEnabledRegistrants = new RegistrantList(); private RegistrantList mPsRestrictDisabledRegistrants = new RegistrantList(); private RegistrantList mImsCapabilityChangedRegistrants = new RegistrantList(); private RegistrantList mNrStateChangedRegistrants = new RegistrantList(); /* Radio power off pending flag and tag counter */ private boolean mPendingRadioPowerOffAfterDataOff = false; Loading Loading @@ -1553,8 +1556,10 @@ public class ServiceStateTracker extends Handler { mLastPhysicalChannelConfigList = list; boolean hasChanged = updateNrFrequencyRangeFromPhysicalChannelConfigs(list, mSS); hasChanged |= updateNrStateFromPhysicalChannelConfigs( list, mSS); if (updateNrStateFromPhysicalChannelConfigs(list, mSS)) { mNrStateChangedRegistrants.notifyRegistrants(); hasChanged = true; } // Notify NR frequency, NR connection status or bandwidths changed. if (hasChanged Loading Loading @@ -5504,4 +5509,43 @@ public class ServiceStateTracker extends Handler { } return ServiceState.networkTypeToRilRadioTechnology(networkType); } /** * Registers for 5G NR state changed. * @param h handler to notify * @param what what code of message when delivered * @param obj placed in Message.obj */ public void registerForNrStateChanged(Handler h, int what, Object obj) { Registrant r = new Registrant(h, what, obj); mNrStateChangedRegistrants.add(r); } /** * Unregisters for 5G NR state changed. * @param h handler to notify */ public void unregisterForNrStateChanged(Handler h) { mNrStateChangedRegistrants.remove(h); } /** * Get the NR data connection context ids. * * @return data connection context ids. */ @NonNull public Set<Integer> getNrContextIds() { Set<Integer> idSet = new HashSet<>(); for (PhysicalChannelConfig config : mLastPhysicalChannelConfigList) { if (isNrPhysicalChannelConfig(config)) { for (int id : config.getContextIds()) { idSet.add(id); } } } return idSet; } } src/java/com/android/internal/telephony/dataconnection/DataConnection.java +28 −7 Original line number Diff line number Diff line Loading @@ -265,7 +265,7 @@ public class DataConnection extends StateMachine { private static final String NULL_IP = "0.0.0.0"; private Object mUserData; private int mSubscriptionOverride; private int mRilRat = Integer.MAX_VALUE; private int mRilRat = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; private int mDataRegState = Integer.MAX_VALUE; private NetworkInfo mNetworkInfo; Loading @@ -281,6 +281,8 @@ public class DataConnection extends StateMachine { private int mDisabledApnTypeBitMask = 0; int mTag; /** Data connection id assigned by the modem. This is unique across transports */ public int mCid; @HandoverState Loading Loading @@ -316,9 +318,10 @@ public class DataConnection extends StateMachine { static final int EVENT_RESET = BASE + 24; static final int EVENT_REEVALUATE_RESTRICTED_STATE = BASE + 25; static final int EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES = BASE + 26; static final int EVENT_NR_STATE_CHANGED = BASE + 27; private static final int CMD_TO_STRING_COUNT = EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES - BASE + 1; EVENT_NR_STATE_CHANGED - BASE + 1; private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT]; static { Loading Loading @@ -354,6 +357,8 @@ public class DataConnection extends StateMachine { "EVENT_REEVALUATE_RESTRICTED_STATE"; sCmdToString[EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES - BASE] = "EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES"; sCmdToString[EVENT_NR_STATE_CHANGED - BASE] = "EVENT_NR_STATE_CHANGED"; } // Convert cmd to string or null if unknown static String cmdToString(int cmd) { Loading Loading @@ -584,7 +589,6 @@ public class DataConnection extends StateMachine { mId = id; mCid = -1; ServiceState ss = mPhone.getServiceState(); mRilRat = ss.getRilDataRadioTechnology(); mDataRegState = mPhone.getServiceState().getDataRegState(); int networkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; Loading @@ -592,6 +596,7 @@ public class DataConnection extends StateMachine { NetworkRegistrationInfo.DOMAIN_PS, mTransportType); if (nri != null) { networkType = nri.getAccessNetworkTechnology(); mRilRat = ServiceState.networkTypeToRilRadioTechnology(networkType); } mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_MOBILE, Loading Loading @@ -1006,10 +1011,14 @@ public class DataConnection extends StateMachine { // NR 5G Non-Standalone use LTE cell as the primary cell, the ril technology is LTE in this // case. We use NR 5G TCP buffer size when connected to NR 5G Non-Standalone network. if (rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected()) { if (mTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN && rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected() && mPhone.getServiceStateTracker().getNrContextIds().contains(mCid)) { ratName = RAT_NAME_5G; } log("updateTcpBufferSizes: " + ratName); // in the form: "ratname:rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max" String[] configOverride = mPhone.getContext().getResources().getStringArray( com.android.internal.R.array.config_mobile_tcp_buffers); Loading Loading @@ -1056,7 +1065,7 @@ public class DataConnection extends StateMachine { case ServiceState.RIL_RADIO_TECHNOLOGY_LTE: case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA: // Use NR 5G TCP buffer size when connected to NR 5G Non-Standalone network. if (isNRConnected()) { if (RAT_NAME_5G.equals(ratName)) { sizes = TCP_BUFFER_SIZES_NR; } else { sizes = TCP_BUFFER_SIZES_LTE; Loading @@ -1065,6 +1074,9 @@ public class DataConnection extends StateMachine { case ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP: sizes = TCP_BUFFER_SIZES_HSPAP; break; case ServiceState.RIL_RADIO_TECHNOLOGY_NR: sizes = TCP_BUFFER_SIZES_NR; break; default: // Leave empty - this will let ConnectivityService use the system default. break; Loading Loading @@ -1501,6 +1513,8 @@ public class DataConnection extends StateMachine { DataConnection.EVENT_DATA_CONNECTION_ROAM_ON, null); mPhone.getServiceStateTracker().registerForDataRoamingOff(getHandler(), DataConnection.EVENT_DATA_CONNECTION_ROAM_OFF, null, true); mPhone.getServiceStateTracker().registerForNrStateChanged(getHandler(), DataConnection.EVENT_NR_STATE_CHANGED, null); // Add ourselves to the list of data connections mDcController.addDc(DataConnection.this); Loading Loading @@ -1617,8 +1631,7 @@ public class DataConnection extends StateMachine { break; default: if (DBG) { log("DcDefaultState: shouldn't happen but ignore msg.what=" + getWhatToString(msg.what)); log("DcDefaultState: ignore msg.what=" + getWhatToString(msg.what)); } break; } Loading Loading @@ -2381,6 +2394,14 @@ public class DataConnection extends StateMachine { retVal = HANDLED; break; } case EVENT_NR_STATE_CHANGED: { updateTcpBufferSizes(mRilRat); if (mNetworkAgent != null) { mNetworkAgent.sendLinkProperties(mLinkProperties, DataConnection.this); } retVal = HANDLED; break; } default: if (VDBG) { log("DcActiveState not handled msg.what=" + getWhatToString(msg.what)); Loading Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +46 −2 Original line number Diff line number Diff line Loading @@ -117,9 +117,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; Loading Loading @@ -216,6 +218,7 @@ public class ServiceStateTracker extends Handler { private RegistrantList mPsRestrictEnabledRegistrants = new RegistrantList(); private RegistrantList mPsRestrictDisabledRegistrants = new RegistrantList(); private RegistrantList mImsCapabilityChangedRegistrants = new RegistrantList(); private RegistrantList mNrStateChangedRegistrants = new RegistrantList(); /* Radio power off pending flag and tag counter */ private boolean mPendingRadioPowerOffAfterDataOff = false; Loading Loading @@ -1553,8 +1556,10 @@ public class ServiceStateTracker extends Handler { mLastPhysicalChannelConfigList = list; boolean hasChanged = updateNrFrequencyRangeFromPhysicalChannelConfigs(list, mSS); hasChanged |= updateNrStateFromPhysicalChannelConfigs( list, mSS); if (updateNrStateFromPhysicalChannelConfigs(list, mSS)) { mNrStateChangedRegistrants.notifyRegistrants(); hasChanged = true; } // Notify NR frequency, NR connection status or bandwidths changed. if (hasChanged Loading Loading @@ -5504,4 +5509,43 @@ public class ServiceStateTracker extends Handler { } return ServiceState.networkTypeToRilRadioTechnology(networkType); } /** * Registers for 5G NR state changed. * @param h handler to notify * @param what what code of message when delivered * @param obj placed in Message.obj */ public void registerForNrStateChanged(Handler h, int what, Object obj) { Registrant r = new Registrant(h, what, obj); mNrStateChangedRegistrants.add(r); } /** * Unregisters for 5G NR state changed. * @param h handler to notify */ public void unregisterForNrStateChanged(Handler h) { mNrStateChangedRegistrants.remove(h); } /** * Get the NR data connection context ids. * * @return data connection context ids. */ @NonNull public Set<Integer> getNrContextIds() { Set<Integer> idSet = new HashSet<>(); for (PhysicalChannelConfig config : mLastPhysicalChannelConfigList) { if (isNrPhysicalChannelConfig(config)) { for (int id : config.getContextIds()) { idSet.add(id); } } } return idSet; } }
src/java/com/android/internal/telephony/dataconnection/DataConnection.java +28 −7 Original line number Diff line number Diff line Loading @@ -265,7 +265,7 @@ public class DataConnection extends StateMachine { private static final String NULL_IP = "0.0.0.0"; private Object mUserData; private int mSubscriptionOverride; private int mRilRat = Integer.MAX_VALUE; private int mRilRat = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; private int mDataRegState = Integer.MAX_VALUE; private NetworkInfo mNetworkInfo; Loading @@ -281,6 +281,8 @@ public class DataConnection extends StateMachine { private int mDisabledApnTypeBitMask = 0; int mTag; /** Data connection id assigned by the modem. This is unique across transports */ public int mCid; @HandoverState Loading Loading @@ -316,9 +318,10 @@ public class DataConnection extends StateMachine { static final int EVENT_RESET = BASE + 24; static final int EVENT_REEVALUATE_RESTRICTED_STATE = BASE + 25; static final int EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES = BASE + 26; static final int EVENT_NR_STATE_CHANGED = BASE + 27; private static final int CMD_TO_STRING_COUNT = EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES - BASE + 1; EVENT_NR_STATE_CHANGED - BASE + 1; private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT]; static { Loading Loading @@ -354,6 +357,8 @@ public class DataConnection extends StateMachine { "EVENT_REEVALUATE_RESTRICTED_STATE"; sCmdToString[EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES - BASE] = "EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES"; sCmdToString[EVENT_NR_STATE_CHANGED - BASE] = "EVENT_NR_STATE_CHANGED"; } // Convert cmd to string or null if unknown static String cmdToString(int cmd) { Loading Loading @@ -584,7 +589,6 @@ public class DataConnection extends StateMachine { mId = id; mCid = -1; ServiceState ss = mPhone.getServiceState(); mRilRat = ss.getRilDataRadioTechnology(); mDataRegState = mPhone.getServiceState().getDataRegState(); int networkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; Loading @@ -592,6 +596,7 @@ public class DataConnection extends StateMachine { NetworkRegistrationInfo.DOMAIN_PS, mTransportType); if (nri != null) { networkType = nri.getAccessNetworkTechnology(); mRilRat = ServiceState.networkTypeToRilRadioTechnology(networkType); } mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_MOBILE, Loading Loading @@ -1006,10 +1011,14 @@ public class DataConnection extends StateMachine { // NR 5G Non-Standalone use LTE cell as the primary cell, the ril technology is LTE in this // case. We use NR 5G TCP buffer size when connected to NR 5G Non-Standalone network. if (rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected()) { if (mTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN && rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected() && mPhone.getServiceStateTracker().getNrContextIds().contains(mCid)) { ratName = RAT_NAME_5G; } log("updateTcpBufferSizes: " + ratName); // in the form: "ratname:rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max" String[] configOverride = mPhone.getContext().getResources().getStringArray( com.android.internal.R.array.config_mobile_tcp_buffers); Loading Loading @@ -1056,7 +1065,7 @@ public class DataConnection extends StateMachine { case ServiceState.RIL_RADIO_TECHNOLOGY_LTE: case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA: // Use NR 5G TCP buffer size when connected to NR 5G Non-Standalone network. if (isNRConnected()) { if (RAT_NAME_5G.equals(ratName)) { sizes = TCP_BUFFER_SIZES_NR; } else { sizes = TCP_BUFFER_SIZES_LTE; Loading @@ -1065,6 +1074,9 @@ public class DataConnection extends StateMachine { case ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP: sizes = TCP_BUFFER_SIZES_HSPAP; break; case ServiceState.RIL_RADIO_TECHNOLOGY_NR: sizes = TCP_BUFFER_SIZES_NR; break; default: // Leave empty - this will let ConnectivityService use the system default. break; Loading Loading @@ -1501,6 +1513,8 @@ public class DataConnection extends StateMachine { DataConnection.EVENT_DATA_CONNECTION_ROAM_ON, null); mPhone.getServiceStateTracker().registerForDataRoamingOff(getHandler(), DataConnection.EVENT_DATA_CONNECTION_ROAM_OFF, null, true); mPhone.getServiceStateTracker().registerForNrStateChanged(getHandler(), DataConnection.EVENT_NR_STATE_CHANGED, null); // Add ourselves to the list of data connections mDcController.addDc(DataConnection.this); Loading Loading @@ -1617,8 +1631,7 @@ public class DataConnection extends StateMachine { break; default: if (DBG) { log("DcDefaultState: shouldn't happen but ignore msg.what=" + getWhatToString(msg.what)); log("DcDefaultState: ignore msg.what=" + getWhatToString(msg.what)); } break; } Loading Loading @@ -2381,6 +2394,14 @@ public class DataConnection extends StateMachine { retVal = HANDLED; break; } case EVENT_NR_STATE_CHANGED: { updateTcpBufferSizes(mRilRat); if (mNetworkAgent != null) { mNetworkAgent.sendLinkProperties(mLinkProperties, DataConnection.this); } retVal = HANDLED; break; } default: if (VDBG) { log("DcActiveState not handled msg.what=" + getWhatToString(msg.what)); Loading