拨打流程
EXTRA_CALL_ORIGIN
ACTION_NEW_OUTGOING_CALL
→startSipCallOptionHandler
→Intent.ACTION_CALL
→PhoneUtils.java
app.mCM.dial(phone, numberToDial, callDetails);
->callmanager.java
public Connection dial(Phone phone, String dialString, CallDetails callDetails)
→basePhone.dial(dialString, callDetails);
->phone.java->gsmphone.java
public Connection dial(String dialString, UUSInfo uusInfo, CallDetails calldetails)
→CallTracker.java
public Connection dial(String dialString, UUSInfo uusInfo)
->GSMcalltracker.java
public Connection
dial(String dialString, UUSInfo uusInfo)
->CommandsInterface.java
void dial(String address, int clirMode, UUSInfo uusInfo, Message result);
->ril.java
public void dial(String address, int clirMode, UUSInfo uusInfo, Message result)
->RIL_REQUEST_DIAL
电话状态状态变化上报,界面显示处理:
incallscreen.java
->registerForPhoneStates
->mCM.registerForPreciseCallStateChanged(mHandler, PHONE_STATE_CHANGED, null);
当mhandle的handleMessage收到PHONE_STATE_CHANGED消息后
调用 onPhoneStateChanged((AsyncResult) msg.obj);
->requestUpdateScreen();
-> requestUpdateScreen(false);
->void requestUpdateScreen(boolean ignoreReAction)
->mHandler.obtainMessage(REQUEST_UPDATE_SCREEN, ignoreReAction).sendToTarget();
当mhandle的handleMessage收到 REQUEST_UPDATE_SCREEN消息后
调用 updateScreen(param);
->mCallCard.updateState(mCM);
->callcard.java
void updateState(CallManager cm)
-> updateRingingCall(cm);/updateForegroundCall(cm);/updateNoCall(cm);
->displayMainCallStatus(cm, fgCall);
->updateDisplayForPerson(info, Connection.PRESENTATION_ALLOWED, false, call, conn);