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)。
