Dialer_InCallUi啓動流程and數據更新流程

 

 

 

1, InCallActivity   界面信息的顯示

2, NotificationBroadcastReceiver這個類是廣播接收器,一般沒有用到。主要作用是第三方app可以發送廣播的方式進行通話的相關操作,例如,掛斷/接聽等等。接收廣播後,都是調用InCallPresenter的相關方法完成的,部分代碼如下,

InCallPresenter.getInstance().declineIncomingCall(context);

3, InCallServiceImpl這個類在前面論述過,實際上是services telecom進程和dialer進程的一個橋樑,通過binder跨進程調用實現。InCallUI 的架構是一個典型的MVP模式。

InCallPresenter.java直接控制着InCallActivity,與此同時,通過一些監聽器,例如IncomingCallListener/ CanAddCallListener/ InCallDetailsListener等 控制着AnswerPresenter等等。

AnswerPresenter控制着AnswerFragment的顯示,是InCallActivity界面的一部分;

VideoCallPresenter控制着VideoCallFragment的顯示,是InCallActivity界面的一部分;

CallCardPresenter控制着CallCardFragment的顯示,是InCallActivity界面的一部分;

CallButtonPresenter控制着CallButtonFragment的顯示,是InCallActivity界面的一部分;

這些Presenter一般會實現InCallPresenter的監聽器對應的方法。

九種狀態
 

    public static final int PRECISE_CALL_STATE_IDLE =           0; //通話空閒
    public static final int PRECISE_CALL_STATE_ACTIVE =         1; //正在通話(活動中)
    public static final int PRECISE_CALL_STATE_HOLDING =        2; //通話掛起(例如我和多個人通話,其中一個通話在活動,而其它通話就會進入掛起狀態)
    public static final int PRECISE_CALL_STATE_DIALING =        3; //撥號開始
    public static final int PRECISE_CALL_STATE_ALERTING =       4; //正在呼出(提醒對方接電話)
    public static final int PRECISE_CALL_STATE_INCOMING =       5; //對方來電
    public static final int PRECISE_CALL_STATE_WAITING =        6; //第三方來電等待(例如我正在和某人通話,而其他人打入時就會就進入等待狀態)
    public static final int PRECISE_CALL_STATE_DISCONNECTED =   7; //掛斷完成
    public static final int PRECISE_CALL_STATE_DISCONNECTING =  8; //正在掛斷

 

CallCardFragment:用於顯示聯繫人信息及通話時間等;
CallButtonFragment:通話界面下方的控制按鈕。
DialpadFragment:撥號盤顯示控件。
AnswerFragment:來電控制控件,用於操作接聽/拒接/短信快捷回覆。
ConferenceManagerFragment:會議電話的界面。
VideoCallFragment:視屏通話控件,在CallCardFragment中調用。

 

流程圖:

啓動InCallActivity流程,其實很簡單就三個類(不包括framework和system_service)。

 

數據更新流程圖

InCallActivity數據更新,(不包括framework和system_service)。

發佈了245 篇原創文章 · 獲贊 645 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章