Loading flags/data.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -181,4 +181,14 @@ flag { bug:"353723350" } # OWNER=jackyu TARGET=25Q1 flag { name: "support_network_provider" namespace: "telephony" description: "Deprecate network factory and adapt the new network provider model from connectivity service" bug: "343370895" metadata { purpose: PURPOSE_BUGFIX } } src/java/com/android/internal/telephony/PhoneFactory.java +34 −7 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.data.CellularNetworkValidator; import com.android.internal.telephony.data.PhoneSwitcher; import com.android.internal.telephony.data.TelephonyNetworkFactory; import com.android.internal.telephony.data.TelephonyNetworkProvider; import com.android.internal.telephony.euicc.EuiccCardController; import com.android.internal.telephony.euicc.EuiccController; import com.android.internal.telephony.flags.FeatureFlags; Loading Loading @@ -101,6 +102,7 @@ public class PhoneFactory { static private SimultaneousCallingTracker sSimultaneousCallingTracker; static private PhoneSwitcher sPhoneSwitcher; static private TelephonyNetworkFactory[] sTelephonyNetworkFactories; private static TelephonyNetworkProvider sTelephonyNetworkProvider; static private NotificationChannelController sNotificationChannelController; static private CellularNetworkValidator sCellularNetworkValidator; Loading Loading @@ -285,6 +287,11 @@ public class PhoneFactory { sNotificationChannelController = new NotificationChannelController(context); if (featureFlags.supportNetworkProvider()) { // Create the TelephonyNetworkProvider instance, which is a singleton. sTelephonyNetworkProvider = new TelephonyNetworkProvider(Looper.myLooper(), context, featureFlags); } else { for (int i = 0; i < numPhones; i++) { sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( Looper.myLooper(), sPhones[i], featureFlags); Loading @@ -292,6 +299,7 @@ public class PhoneFactory { } } } } /** * Upon single SIM to dual SIM switch or vice versa, we dynamically allocate or de-allocate Loading @@ -312,7 +320,10 @@ public class PhoneFactory { sPhones = copyOf(sPhones, activeModemCount); sCommandsInterfaces = copyOf(sCommandsInterfaces, activeModemCount); if (!sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkFactories = copyOf(sTelephonyNetworkFactories, activeModemCount); } int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context); for (int i = prevActiveModemCount; i < activeModemCount; i++) { Loading @@ -324,11 +335,14 @@ public class PhoneFactory { PackageManager.FEATURE_TELEPHONY_IMS)) { sPhones[i].createImsPhone(); } if (!sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( Looper.myLooper(), sPhones[i], sFeatureFlags); } } } } private static Phone createPhone(Context context, int phoneId) { int phoneType = TelephonyManager.getPhoneType(RILConstants.PREFERRED_NETWORK_MODE); Loading Loading @@ -393,6 +407,10 @@ public class PhoneFactory { } } public static TelephonyNetworkProvider getNetworkProvider() { return sTelephonyNetworkProvider; } /** * Get the network factory associated with a given phone ID. * @param phoneId the phone id Loading Loading @@ -579,13 +597,22 @@ public class PhoneFactory { pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); if (!sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkFactories[i].dump(fd, pw, args); } pw.flush(); pw.decreaseIndent(); pw.println("++++++++++++++++++++++++++++++++"); } pw.increaseIndent(); if (sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkProvider.dump(fd, pw, args); } pw.decreaseIndent(); pw.println("++++++++++++++++++++++++++++++++"); pw.println("UiccController:"); pw.increaseIndent(); try { Loading src/java/com/android/internal/telephony/RadioConfig.java +1 −1 Original line number Diff line number Diff line Loading @@ -466,7 +466,7 @@ public class RadioConfig extends Handler { RILRequest rr = obtainRequest(RIL_REQUEST_SET_PREFERRED_DATA_MODEM, result, mDefaultWorkSource); if (DBG) { logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)); logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " " + modemId); } try { proxy.setPreferredDataModem(rr.mSerial, modemId); Loading src/java/com/android/internal/telephony/data/DataNetwork.java +80 −11 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEnt import com.android.internal.telephony.data.DataRetryManager.DataRetryEntry; import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback; import com.android.internal.telephony.data.LinkBandwidthEstimator.LinkBandwidthEstimatorCallback; import com.android.internal.telephony.data.PhoneSwitcher.PhoneSwitcherCallback; import com.android.internal.telephony.data.TelephonyNetworkAgent.TelephonyNetworkAgentCallback; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.metrics.DataCallSessionStats; Loading Loading @@ -271,6 +272,9 @@ public class DataNetwork extends StateMachine { /** Event for response to data network validation request. */ private static final int EVENT_DATA_NETWORK_VALIDATION_RESPONSE = 29; /** Event for preferred data subscription changed. */ private static final int EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED = 30; /** Invalid context id. */ private static final int INVALID_CID = -1; Loading Loading @@ -591,6 +595,10 @@ public class DataNetwork extends StateMachine { @NonNull private final DataNetworkController mDataNetworkController; /** Phone switcher which is responsible to determine which phone to route network request. */ @NonNull private final PhoneSwitcher mPhoneSwitcher; /** Data network controller callback. */ @NonNull private final DataNetworkController.DataNetworkControllerCallback Loading Loading @@ -676,6 +684,13 @@ public class DataNetwork extends StateMachine { /** Whether the current data network is congested. */ private boolean mCongested = false; /** * Whether the current data network is on preferred data modem. * * @see PhoneSwitcher#getPreferredDataPhoneId() */ private boolean mOnPreferredDataPhone; /** The network requests associated with this data network */ @NonNull private final NetworkRequestList mAttachedNetworkRequestList = Loading Loading @@ -814,6 +829,12 @@ public class DataNetwork extends StateMachine { @Nullable private PreciseDataConnectionState mPreciseDataConnectionState; /** * Callback to listen event from {@link PhoneSwitcher}. */ @NonNull private PhoneSwitcherCallback mPhoneSwitcherCallback; /** * The network bandwidth. */ Loading Loading @@ -1027,6 +1048,8 @@ public class DataNetwork extends StateMachine { mAccessNetworksManager = phone.getAccessNetworksManager(); mVcnManager = mPhone.getContext().getSystemService(VcnManager.class); mDataNetworkController = phone.getDataNetworkController(); mPhoneSwitcher = PhoneSwitcher.getInstance(); mOnPreferredDataPhone = phone.getPhoneId() == mPhoneSwitcher.getPreferredDataPhoneId(); mDataNetworkControllerCallback = new DataNetworkController.DataNetworkControllerCallback( getHandler()::post) { @Override Loading Loading @@ -1156,14 +1179,25 @@ public class DataNetwork extends StateMachine { configBuilder.setNat64DetectionEnabled(false); } NetworkProvider provider; if (mFlags.supportNetworkProvider()) { provider = PhoneFactory.getNetworkProvider(); } else { final NetworkFactory factory = PhoneFactory.getNetworkFactory( mPhone.getPhoneId()); final NetworkProvider provider = (null == factory) ? null : factory.getProvider(); provider = (null == factory) ? null : factory.getProvider(); } mNetworkScore = new NetworkScore.Builder() NetworkScore.Builder builder = new NetworkScore.Builder() .setKeepConnectedReason(isHandoverInProgress() ? NetworkScore.KEEP_CONNECTED_FOR_HANDOVER : NetworkScore.KEEP_CONNECTED_NONE).build(); : NetworkScore.KEEP_CONNECTED_NONE); if (mFlags.supportNetworkProvider()) { builder.setTransportPrimary(mOnPreferredDataPhone); } mNetworkScore = builder.build(); logl("mNetworkScore: isPrimary=" + mNetworkScore.isTransportPrimary() + ", keepConnectedReason=" + mNetworkScore.getKeepConnectedReason()); return new TelephonyNetworkAgent(mPhone, getHandler().getLooper(), this, mNetworkScore, configBuilder.build(), provider, Loading Loading @@ -1225,6 +1259,16 @@ public class DataNetwork extends StateMachine { mDataNetworkController.getDataSettingsManager() .registerCallback(mDataSettingsManagerCallback); if (mFlags.supportNetworkProvider()) { mPhoneSwitcherCallback = new PhoneSwitcherCallback(Runnable::run) { @Override public void onPreferredDataPhoneIdChanged(int phoneId) { sendMessage(EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED, phoneId, 0); } }; mPhoneSwitcher.registerCallback(mPhoneSwitcherCallback); } mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged( getHandler(), EVENT_DISPLAY_INFO_CHANGED, null); mPhone.getServiceStateTracker().registerForServiceStateChanged(getHandler(), Loading Loading @@ -1318,6 +1362,9 @@ public class DataNetwork extends StateMachine { mPhone.getServiceStateTracker().unregisterForServiceStateChanged(getHandler()); mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged( getHandler()); if (mFlags.supportNetworkProvider()) { mPhoneSwitcher.unregisterCallback(mPhoneSwitcherCallback); } mDataNetworkController.getDataSettingsManager() .unregisterCallback(mDataSettingsManagerCallback); mRil.unregisterForPcoData(getHandler()); Loading Loading @@ -1351,13 +1398,13 @@ public class DataNetwork extends StateMachine { } case EVENT_ATTACH_NETWORK_REQUEST: { onAttachNetworkRequests((NetworkRequestList) msg.obj); updateNetworkScore(isHandoverInProgress()); updateNetworkScore(); break; } case EVENT_DETACH_NETWORK_REQUEST: { onDetachNetworkRequest((TelephonyNetworkRequest) msg.obj, msg.arg1 != 0 /* shouldRetry */); updateNetworkScore(isHandoverInProgress()); updateNetworkScore(); break; } case EVENT_DETACH_ALL_NETWORK_REQUESTS: { Loading Loading @@ -1428,6 +1475,12 @@ public class DataNetwork extends StateMachine { // handle the resultCode in response for the request. handleDataNetworkValidationRequestResultCode(msg.arg1 /* resultCode */); break; case EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED: mOnPreferredDataPhone = mPhone.getPhoneId() == msg.arg1; logl("Preferred data phone id changed to " + msg.arg1 + ", mOnPreferredDataPhone=" + mOnPreferredDataPhone); updateNetworkScore(); break; default: loge("Unhandled event " + eventToString(msg.what)); break; Loading Loading @@ -3314,6 +3367,12 @@ public class DataNetwork extends StateMachine { return mLinkStatus; } /** * Update the network score and report to connectivity service if necessary. */ private void updateNetworkScore() { updateNetworkScore(isHandoverInProgress()); } /** * Update the network score and report to connectivity service if necessary. Loading @@ -3323,10 +3382,18 @@ public class DataNetwork extends StateMachine { private void updateNetworkScore(boolean keepConnectedForHandover) { int connectedReason = keepConnectedForHandover ? NetworkScore.KEEP_CONNECTED_FOR_HANDOVER : NetworkScore.KEEP_CONNECTED_NONE; if (mNetworkScore.getKeepConnectedReason() != connectedReason) { mNetworkScore = new NetworkScore.Builder() .setKeepConnectedReason(connectedReason).build(); if (mNetworkScore.getKeepConnectedReason() != connectedReason || (mFlags.supportNetworkProvider() && mNetworkScore.isTransportPrimary() != mOnPreferredDataPhone)) { NetworkScore.Builder builder = new NetworkScore.Builder() .setKeepConnectedReason(connectedReason); if (mFlags.supportNetworkProvider()) { builder.setTransportPrimary(mOnPreferredDataPhone); } mNetworkScore = builder.build(); mNetworkAgent.sendNetworkScore(mNetworkScore); logl("updateNetworkScore: isPrimary=" + mNetworkScore.isTransportPrimary() + ", keepConnectedForHandover=" + keepConnectedForHandover); } } Loading Loading @@ -4055,12 +4122,14 @@ public class DataNetwork extends StateMachine { pw.println("Tag: " + name()); pw.increaseIndent(); pw.println("mSubId=" + mSubId); pw.println("mOnPreferredDataPhone=" + mOnPreferredDataPhone); pw.println("mTransport=" + AccessNetworkConstants.transportTypeToString(mTransport)); pw.println("mLastKnownDataNetworkType=" + TelephonyManager .getNetworkTypeName(mLastKnownDataNetworkType)); pw.println("WWAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)); pw.println("WLAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)); pw.println("mNetworkScore=" + mNetworkScore); pw.println("keepConnectedReason=" + mNetworkScore.getKeepConnectedReason()); pw.println("mDataAllowedReason=" + mDataAllowedReason); pw.println("mPduSessionId=" + mPduSessionId); pw.println("mDataProfile=" + mDataProfile); Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +25 −1 Original line number Diff line number Diff line Loading @@ -2516,6 +2516,30 @@ public class DataNetworkController extends Handler { } private void onRemoveNetworkRequest(@NonNull TelephonyNetworkRequest request) { if (mFeatureFlags.supportNetworkProvider()) { if (!mAllNetworkRequestList.remove(request)) { loge("onRemoveNetworkRequest: Network request does not exist. " + request); return; } if (request.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) { mImsThrottleCounter.addOccurrence(); mLastReleasedImsRequestCapabilities = request.getCapabilities(); mLastImsOperationIsRelease = true; } if (request.getAttachedNetwork() != null) { request.getAttachedNetwork().detachNetworkRequest( request, false /* shouldRetry */); } request.setState(TelephonyNetworkRequest.REQUEST_STATE_UNSATISFIED); request.setEvaluation(null); log("onRemoveNetworkRequest: Removed " + request); return; } // The request generated from telephony network factory does not contain the information // the original request has, for example, attached data network. We need to find the // original one. Loading Loading
flags/data.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -181,4 +181,14 @@ flag { bug:"353723350" } # OWNER=jackyu TARGET=25Q1 flag { name: "support_network_provider" namespace: "telephony" description: "Deprecate network factory and adapt the new network provider model from connectivity service" bug: "343370895" metadata { purpose: PURPOSE_BUGFIX } }
src/java/com/android/internal/telephony/PhoneFactory.java +34 −7 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.data.CellularNetworkValidator; import com.android.internal.telephony.data.PhoneSwitcher; import com.android.internal.telephony.data.TelephonyNetworkFactory; import com.android.internal.telephony.data.TelephonyNetworkProvider; import com.android.internal.telephony.euicc.EuiccCardController; import com.android.internal.telephony.euicc.EuiccController; import com.android.internal.telephony.flags.FeatureFlags; Loading Loading @@ -101,6 +102,7 @@ public class PhoneFactory { static private SimultaneousCallingTracker sSimultaneousCallingTracker; static private PhoneSwitcher sPhoneSwitcher; static private TelephonyNetworkFactory[] sTelephonyNetworkFactories; private static TelephonyNetworkProvider sTelephonyNetworkProvider; static private NotificationChannelController sNotificationChannelController; static private CellularNetworkValidator sCellularNetworkValidator; Loading Loading @@ -285,6 +287,11 @@ public class PhoneFactory { sNotificationChannelController = new NotificationChannelController(context); if (featureFlags.supportNetworkProvider()) { // Create the TelephonyNetworkProvider instance, which is a singleton. sTelephonyNetworkProvider = new TelephonyNetworkProvider(Looper.myLooper(), context, featureFlags); } else { for (int i = 0; i < numPhones; i++) { sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( Looper.myLooper(), sPhones[i], featureFlags); Loading @@ -292,6 +299,7 @@ public class PhoneFactory { } } } } /** * Upon single SIM to dual SIM switch or vice versa, we dynamically allocate or de-allocate Loading @@ -312,7 +320,10 @@ public class PhoneFactory { sPhones = copyOf(sPhones, activeModemCount); sCommandsInterfaces = copyOf(sCommandsInterfaces, activeModemCount); if (!sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkFactories = copyOf(sTelephonyNetworkFactories, activeModemCount); } int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context); for (int i = prevActiveModemCount; i < activeModemCount; i++) { Loading @@ -324,11 +335,14 @@ public class PhoneFactory { PackageManager.FEATURE_TELEPHONY_IMS)) { sPhones[i].createImsPhone(); } if (!sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( Looper.myLooper(), sPhones[i], sFeatureFlags); } } } } private static Phone createPhone(Context context, int phoneId) { int phoneType = TelephonyManager.getPhoneType(RILConstants.PREFERRED_NETWORK_MODE); Loading Loading @@ -393,6 +407,10 @@ public class PhoneFactory { } } public static TelephonyNetworkProvider getNetworkProvider() { return sTelephonyNetworkProvider; } /** * Get the network factory associated with a given phone ID. * @param phoneId the phone id Loading Loading @@ -579,13 +597,22 @@ public class PhoneFactory { pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); if (!sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkFactories[i].dump(fd, pw, args); } pw.flush(); pw.decreaseIndent(); pw.println("++++++++++++++++++++++++++++++++"); } pw.increaseIndent(); if (sFeatureFlags.supportNetworkProvider()) { sTelephonyNetworkProvider.dump(fd, pw, args); } pw.decreaseIndent(); pw.println("++++++++++++++++++++++++++++++++"); pw.println("UiccController:"); pw.increaseIndent(); try { Loading
src/java/com/android/internal/telephony/RadioConfig.java +1 −1 Original line number Diff line number Diff line Loading @@ -466,7 +466,7 @@ public class RadioConfig extends Handler { RILRequest rr = obtainRequest(RIL_REQUEST_SET_PREFERRED_DATA_MODEM, result, mDefaultWorkSource); if (DBG) { logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)); logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " " + modemId); } try { proxy.setPreferredDataModem(rr.mSerial, modemId); Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +80 −11 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEnt import com.android.internal.telephony.data.DataRetryManager.DataRetryEntry; import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback; import com.android.internal.telephony.data.LinkBandwidthEstimator.LinkBandwidthEstimatorCallback; import com.android.internal.telephony.data.PhoneSwitcher.PhoneSwitcherCallback; import com.android.internal.telephony.data.TelephonyNetworkAgent.TelephonyNetworkAgentCallback; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.metrics.DataCallSessionStats; Loading Loading @@ -271,6 +272,9 @@ public class DataNetwork extends StateMachine { /** Event for response to data network validation request. */ private static final int EVENT_DATA_NETWORK_VALIDATION_RESPONSE = 29; /** Event for preferred data subscription changed. */ private static final int EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED = 30; /** Invalid context id. */ private static final int INVALID_CID = -1; Loading Loading @@ -591,6 +595,10 @@ public class DataNetwork extends StateMachine { @NonNull private final DataNetworkController mDataNetworkController; /** Phone switcher which is responsible to determine which phone to route network request. */ @NonNull private final PhoneSwitcher mPhoneSwitcher; /** Data network controller callback. */ @NonNull private final DataNetworkController.DataNetworkControllerCallback Loading Loading @@ -676,6 +684,13 @@ public class DataNetwork extends StateMachine { /** Whether the current data network is congested. */ private boolean mCongested = false; /** * Whether the current data network is on preferred data modem. * * @see PhoneSwitcher#getPreferredDataPhoneId() */ private boolean mOnPreferredDataPhone; /** The network requests associated with this data network */ @NonNull private final NetworkRequestList mAttachedNetworkRequestList = Loading Loading @@ -814,6 +829,12 @@ public class DataNetwork extends StateMachine { @Nullable private PreciseDataConnectionState mPreciseDataConnectionState; /** * Callback to listen event from {@link PhoneSwitcher}. */ @NonNull private PhoneSwitcherCallback mPhoneSwitcherCallback; /** * The network bandwidth. */ Loading Loading @@ -1027,6 +1048,8 @@ public class DataNetwork extends StateMachine { mAccessNetworksManager = phone.getAccessNetworksManager(); mVcnManager = mPhone.getContext().getSystemService(VcnManager.class); mDataNetworkController = phone.getDataNetworkController(); mPhoneSwitcher = PhoneSwitcher.getInstance(); mOnPreferredDataPhone = phone.getPhoneId() == mPhoneSwitcher.getPreferredDataPhoneId(); mDataNetworkControllerCallback = new DataNetworkController.DataNetworkControllerCallback( getHandler()::post) { @Override Loading Loading @@ -1156,14 +1179,25 @@ public class DataNetwork extends StateMachine { configBuilder.setNat64DetectionEnabled(false); } NetworkProvider provider; if (mFlags.supportNetworkProvider()) { provider = PhoneFactory.getNetworkProvider(); } else { final NetworkFactory factory = PhoneFactory.getNetworkFactory( mPhone.getPhoneId()); final NetworkProvider provider = (null == factory) ? null : factory.getProvider(); provider = (null == factory) ? null : factory.getProvider(); } mNetworkScore = new NetworkScore.Builder() NetworkScore.Builder builder = new NetworkScore.Builder() .setKeepConnectedReason(isHandoverInProgress() ? NetworkScore.KEEP_CONNECTED_FOR_HANDOVER : NetworkScore.KEEP_CONNECTED_NONE).build(); : NetworkScore.KEEP_CONNECTED_NONE); if (mFlags.supportNetworkProvider()) { builder.setTransportPrimary(mOnPreferredDataPhone); } mNetworkScore = builder.build(); logl("mNetworkScore: isPrimary=" + mNetworkScore.isTransportPrimary() + ", keepConnectedReason=" + mNetworkScore.getKeepConnectedReason()); return new TelephonyNetworkAgent(mPhone, getHandler().getLooper(), this, mNetworkScore, configBuilder.build(), provider, Loading Loading @@ -1225,6 +1259,16 @@ public class DataNetwork extends StateMachine { mDataNetworkController.getDataSettingsManager() .registerCallback(mDataSettingsManagerCallback); if (mFlags.supportNetworkProvider()) { mPhoneSwitcherCallback = new PhoneSwitcherCallback(Runnable::run) { @Override public void onPreferredDataPhoneIdChanged(int phoneId) { sendMessage(EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED, phoneId, 0); } }; mPhoneSwitcher.registerCallback(mPhoneSwitcherCallback); } mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged( getHandler(), EVENT_DISPLAY_INFO_CHANGED, null); mPhone.getServiceStateTracker().registerForServiceStateChanged(getHandler(), Loading Loading @@ -1318,6 +1362,9 @@ public class DataNetwork extends StateMachine { mPhone.getServiceStateTracker().unregisterForServiceStateChanged(getHandler()); mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged( getHandler()); if (mFlags.supportNetworkProvider()) { mPhoneSwitcher.unregisterCallback(mPhoneSwitcherCallback); } mDataNetworkController.getDataSettingsManager() .unregisterCallback(mDataSettingsManagerCallback); mRil.unregisterForPcoData(getHandler()); Loading Loading @@ -1351,13 +1398,13 @@ public class DataNetwork extends StateMachine { } case EVENT_ATTACH_NETWORK_REQUEST: { onAttachNetworkRequests((NetworkRequestList) msg.obj); updateNetworkScore(isHandoverInProgress()); updateNetworkScore(); break; } case EVENT_DETACH_NETWORK_REQUEST: { onDetachNetworkRequest((TelephonyNetworkRequest) msg.obj, msg.arg1 != 0 /* shouldRetry */); updateNetworkScore(isHandoverInProgress()); updateNetworkScore(); break; } case EVENT_DETACH_ALL_NETWORK_REQUESTS: { Loading Loading @@ -1428,6 +1475,12 @@ public class DataNetwork extends StateMachine { // handle the resultCode in response for the request. handleDataNetworkValidationRequestResultCode(msg.arg1 /* resultCode */); break; case EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED: mOnPreferredDataPhone = mPhone.getPhoneId() == msg.arg1; logl("Preferred data phone id changed to " + msg.arg1 + ", mOnPreferredDataPhone=" + mOnPreferredDataPhone); updateNetworkScore(); break; default: loge("Unhandled event " + eventToString(msg.what)); break; Loading Loading @@ -3314,6 +3367,12 @@ public class DataNetwork extends StateMachine { return mLinkStatus; } /** * Update the network score and report to connectivity service if necessary. */ private void updateNetworkScore() { updateNetworkScore(isHandoverInProgress()); } /** * Update the network score and report to connectivity service if necessary. Loading @@ -3323,10 +3382,18 @@ public class DataNetwork extends StateMachine { private void updateNetworkScore(boolean keepConnectedForHandover) { int connectedReason = keepConnectedForHandover ? NetworkScore.KEEP_CONNECTED_FOR_HANDOVER : NetworkScore.KEEP_CONNECTED_NONE; if (mNetworkScore.getKeepConnectedReason() != connectedReason) { mNetworkScore = new NetworkScore.Builder() .setKeepConnectedReason(connectedReason).build(); if (mNetworkScore.getKeepConnectedReason() != connectedReason || (mFlags.supportNetworkProvider() && mNetworkScore.isTransportPrimary() != mOnPreferredDataPhone)) { NetworkScore.Builder builder = new NetworkScore.Builder() .setKeepConnectedReason(connectedReason); if (mFlags.supportNetworkProvider()) { builder.setTransportPrimary(mOnPreferredDataPhone); } mNetworkScore = builder.build(); mNetworkAgent.sendNetworkScore(mNetworkScore); logl("updateNetworkScore: isPrimary=" + mNetworkScore.isTransportPrimary() + ", keepConnectedForHandover=" + keepConnectedForHandover); } } Loading Loading @@ -4055,12 +4122,14 @@ public class DataNetwork extends StateMachine { pw.println("Tag: " + name()); pw.increaseIndent(); pw.println("mSubId=" + mSubId); pw.println("mOnPreferredDataPhone=" + mOnPreferredDataPhone); pw.println("mTransport=" + AccessNetworkConstants.transportTypeToString(mTransport)); pw.println("mLastKnownDataNetworkType=" + TelephonyManager .getNetworkTypeName(mLastKnownDataNetworkType)); pw.println("WWAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)); pw.println("WLAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)); pw.println("mNetworkScore=" + mNetworkScore); pw.println("keepConnectedReason=" + mNetworkScore.getKeepConnectedReason()); pw.println("mDataAllowedReason=" + mDataAllowedReason); pw.println("mPduSessionId=" + mPduSessionId); pw.println("mDataProfile=" + mDataProfile); Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +25 −1 Original line number Diff line number Diff line Loading @@ -2516,6 +2516,30 @@ public class DataNetworkController extends Handler { } private void onRemoveNetworkRequest(@NonNull TelephonyNetworkRequest request) { if (mFeatureFlags.supportNetworkProvider()) { if (!mAllNetworkRequestList.remove(request)) { loge("onRemoveNetworkRequest: Network request does not exist. " + request); return; } if (request.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) { mImsThrottleCounter.addOccurrence(); mLastReleasedImsRequestCapabilities = request.getCapabilities(); mLastImsOperationIsRelease = true; } if (request.getAttachedNetwork() != null) { request.getAttachedNetwork().detachNetworkRequest( request, false /* shouldRetry */); } request.setState(TelephonyNetworkRequest.REQUEST_STATE_UNSATISFIED); request.setEvaluation(null); log("onRemoveNetworkRequest: Removed " + request); return; } // The request generated from telephony network factory does not contain the information // the original request has, for example, attached data network. We need to find the // original one. Loading