SystemServer.main->run->startOtherServices
->connectivity = new ConnectivityService
->ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity)
PhoneApp.onCreate->PhoneGlobals.onCreate->PhoneFactory.makeDefaultPhones->makeDefaultPhone
->new DefaultPhoneNotifier
->new RIL
->UiccController.make
->new GsmCdmaPhone->TelephonyComponentFactory.makeDcTracker->new DcTracker
->new SubscriptionInfoUpdater
->new PhoneSwitcher
->sProxyController = ProxyController.getInstance
->new TelephonyNetworkFactory
一、setDataProfile(apn.modemCognitive->??aosp apn not invoke setDataProfilesAsNeeded??):
DcTracker.onApnChanged/onRecordsLoadedOrSubIdChanged->createAllApnList
DcTracker.createAllApnList/onDataRoamingOff->setDataProfilesAsNeeded
->for (ApnSetting apn : mAllApnSettings) {
->if (apn.modemCognitive) {
->DataServiceManager.setDataProfile->...->RIL.setDataProfile->RIL_REQUEST_SET_DATA_PROFILE->...->ril_service.cpp
->RadioImpl::setDataProfile->RIL_REQUEST_SET_DATA_PROFILE->...->reference-ril.c.onRequest->??
Telephony.Carriers.MODEM_COGNITIVE:
/**
* Is the apn setting to be set in modem
* <P>Type: INTEGER (boolean)</P>
*@hide
*/
public static final String MODEM_COGNITIVE = "modem_cognitive";
(setModemCognitive:
DevicePolicyManager.getOverrideApns->DevicePolicyManagerService.getOverrideApns
->getOverrideApnsUnchecked->ApnSetting.makeApnSetting->setModemCognitive)
setInitialAttachApn:
DcTracker.onApnChanged/onRecordsLoadedOrSubIdChanged/onDataRoamingOff->setInitialAttachApn
DcTracker.setInitialAttachApn->...->RIL.setInitialAttachApn->RIL_REQUEST_SET_INITIAL_ATTACH_APN->...->ril_service.cpp->RadioImpl::setInitialAttachApn->RIL_REQUEST_SET_INITIAL_ATTACH_APN
->...->reference-ril.c.onRequest->RIL_REQUEST_SET_INITIAL_ATTACH_APN->RIL_onRequestComplete
二、requestNetwork set mApnSetting(from APN_TYPE_DUN/mAllApnSettings):
ConnectivityManager.requestNetwork->sendRequestForNetwork->ConnectivityService.requestNetwork->EVENT_REGISTER_NETWORK_REQUEST->handleRegisterNetworkRequest->sendUpdatedScoreToFactories->NetworkFactory.CMD_REQUEST_NETWORK
->handleAddRequest->evalRequest->TelephonyNetworkFactory.needNetworkFor->EVENT_NETWORK_REQUEST->onNeedNetworkFor->DcTracker.requestNetwork->ApnContext.requestNetwork->DcTracker.setEnabled->EVENT_ENABLE_NEW_APN->onEnableApn
->setupDataOnConnectableApns->trySetupData
->int radioTech = mPhone.getServiceState().getRilDataRadioTechnology();
->ArrayList<ApnSetting> waitingApns =
buildWaitingApns(apnContext.getApnType(), radioTech);
->...(APN_TYPE_DUN/mPreferredApn/mAllApnSettings(
->for (ApnSetting apn : mAllApnSettings) {
->if (apn.canHandleType(requestedApnType)) {
->ServiceState.bitmaskHasTech(apn.networkTypeBitmask,
ServiceState.rilRadioTechnologyToNetworkType(radioTech))))
->apnContext.setWaitingApns(waitingApns);->RetryManager.setWaitingApns->mWaitingApns
->setupData
->apnSetting = apnContext.getNextApnSetting();->RetryManager.getNextApnSetting->mWaitingApns.get
->apnContext.setApnSetting(apnSetting);->apnContext.mApnSetting
->DcAsyncChannel.bringUp(EVENT_DATA_SETUP_COMPLETE)->DataConnection.EVENT_CO