android4.2 telephone应用层分析

InCallScreen.java

 复制通话界面的显示和提供人机交互的接口,进入该界面第一个调用ONCreate,否则进入OnNewIntent,该配置文件是incall_screen.xml,其中incallPanel为通话联系人的信息和状态显示,配置文件为call_card.xml,包含两路通话的view定义;InCallTouchUi显示通过管理的控制UI,对应配置文件为incall_touch_ui.xml;

 mhandle的handleMessage方法接收到framework的CallManager发出的不同Phone状态的变化,更新UI。消息类型如下:

SUPP_SERVICE_FAILED:弹出mSuppServiceFailureDialog

PHONE_STATE_CHANGED:调用requestUpdateScreen方法请求更新通话界面,发送 REQUEST_UPDATE_SCREEN消息

REQUEST_UPDATE_SCREEN:内部调用UpdateScreen

PHONE_DISCONNECT:通话连接失败时调用,在delayedCleanupAfterDisconnect中退出通话界面

handleOnscreenButtonClick响应通话控制的点击按钮,涉及通话能力控制的相关处理逻辑

PhoneUtils类中的静态方法,如接听电话、挂断电话、恢复、保持通话等通话控制的操作。

联系人信息:CallCard

通话联系人信息的显示和更新实在InCallScreen的updateScreen中完成的,调用Callcard的updateState方法,displayMaincallStatus显示更新第一路通话的信息,displayOnHoldCallStatus显示hold通话保持的第二路通话信息。通过PhoneUtils.getCallerInfo获取CallerInfo对象,保存了通话联系人的基本信息。

IncallTouchUI 通话控制:

incomingCallWidget:接通/挂断/短信回复时需要使用;

manageConferenceButton:多方通话的界面跳转控制按钮,只有在多方通话时才显示。

dialpadButton:也就是显示或隐藏拨号盘(DTMF);

audioButton:开启/关闭扬声器;

muteButton:开启/关闭麦克风静音,开启之后对方无法听到你的声音;

holdButton:开启/关闭呼叫保持;

addButton:增加多路通话;也就是在通话的过程中可以暂停当前通话,拨打另一路通话并接通;

通话控制相关的控件在IncallTouchUI 的updateState中更新,实现OnTriggerListener接口,该接口为锁屏控制的接口,这里4.2做了个修改,在OnTrigger函数中,区分向上、向左和向右三个方向直接定义0,1,2,而不使SlidingTab的类。在InCallScreen的OnResume和OnPause中注册ACTION_HEADSET_PLUG接收耳机免提事件的广播,发送EVENT_HEADSET_PLUG_STATE_CHANGED消息,调用showAudioModePopup显示出菜单,进入InCallTouchUI的onMenuItemClick切换音频输出的策略。

DTMFTwelveKeyDialer

布局文件为dtmf_twelve_key_dialer_view.xml,由输入框dtmfDialerField和12按键dialpad.xml组成。

PhoneGlobals:

4.2中将4.0中的PhoneApp中的内容移到了PhoneGlobals中。

OnCreate中创建mWakeLock和mPartialWakeLock进行Phone应用的电源管理。获取了mWakeLock后,设置中的休眠时间不起作用,屏幕一直高亮,直到锁释放或者手动按power键。获取了mPartialWakeLock后,此时可以关闭屏幕和键盘灯,但不是立马关闭,直到设置的休眠时间到了,关屏。

Sensor感应器获取手机当前的方位,判断手机是否靠近脸部。

mProximityWakeLock电源唤醒锁,获取之后,关闭屏幕。

MediaButtonBoardcastReceive接收耳机HOOK的广播事件,调用PhoneUtils的 handleHeadsetHook响应耳机的HOOK事件。

PhoneAppBoardcastReceive处理Phone应用中杂项的广播事件,像飞行模式、数 据连接、SIM卡状态等变化。

CallNotify:

onNewRingingConnect接收到来电后的处理,调用startIncommingCallQuery查询 联系人信息。通过PhoneUtils的startGetCallerInfo获取GSMConnection的 userData查询 到CallerInfo中。
onPhoneStatechanged通话状态变化的处理。
onDisconnect通话连接断开的处理。连接断开有三种类型callLogType:
INCOMMING_TYPE(来电)
OUTGOING_TYPE(呼叫)
MISSED_TYPE(未接来电)

你可能感兴趣的:(android4.2 telephone应用层分析)