Android 4.4Phone的变化(二)
概述
InCallActivity布局分析
在InCallActivity.java中,实现了对界面的初始化,在4.4中界面的布局是通过fragment来完成的,即incall_screen.xml,代码如下:
- <FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/main">
- <!-- MTK VideoCall fragment -->
- <FrameLayout
- android:id="@+id/vtCallFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- <LinearLayout
- android:id="@+id/in_call_and_button_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <RelativeLayout
- android:id="@+id/in_call_card_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_weight="1">
- <!-- CallCard fragment 用于显示联系人信息 -->
- <fragment
- android:name="com.android.incallui.CallCardFragment"
- android:id="@+id/callCardFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true" />
- <!-- 拨号盘 独立出来易于复用 -->
- <fragment
- android:name="com.android.incallui.DialpadFragment"
- android:id="@+id/dialpadFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true" />
- </RelativeLayout>
- <!-- 控制按钮 也就是原来的InCallTouchUi -->
- <fragment android:name="com.android.incallui.CallButtonFragment"
- android:id="@+id/callButtonFragment"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- <!-- 来电接听/挂断控件 原始使用的系统的GlowpadView -->
- <fragment android:name="com.android.incallui.AnswerFragment"
- android:id="@+id/answerFragment"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:gravity="top"
- android:layout_gravity="bottom|center_horizontal"
- android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
- android:visibility="gone" />
- <!-- 会议电话管理界面 -->
- <fragment android:name="com.android.incallui.ConferenceManagerFragment"
- android:id="@+id/conferenceManagerFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- android:layout_alignParentEnd="true" />
- </FrameLayout>
从整个布局来看,4.4使用fragment代替了原来写死的布局。一方面更能体现出模块化设计,另一方面对于不同屏幕尺寸的适配也更为容易。根据布局文件,InCallActivity主要包括以下几个部分:
- callCardFragment:用于显示联系人信息及通话时间等;
- callButtonFragment:通话界面下方的控制按钮,之前叫做InCallTouchUi;
- conferenceManagerFragment:会议电话的界面;
- vtCallFragment:视屏通话控件;
- dialpadFragment:拨号盘显示控件。
- answerFragment:来电控制控件,用于操作接听/拒接/短信快捷回复。
callCardFragment通话信息展示
callButtonFragment通话控制界面
answerFragment来电控制界面
InCallActivity初始化流程
在InCallActivity的onCreate方法中,完成了各个组件(fragment)的初始化,主要在方法initializeInCall中,代码如下:
- private void initializeInCall() {
- if (mCallButtonFragment == null) {
- mCallButtonFragment = (CallButtonFragment) getFragmentManager()
- .findFragmentById(R.id.callButtonFragment);
- mCallButtonFragment.getView().setVisibility(View.INVISIBLE);
- }
- if (mCallCardFragment == null) {
- mCallCardFragment = (CallCardFragment) getFragmentManager()
- .findFragmentById(R.id.callCardFragment);
- }
- //... ...省略
- }
然后更新了状态栏以及近距离感应器的状态,另外MTK对AOSP多了一些定制加入了一些自己的东西,比如SIMInfoWrapperr就是用于显示保存SIM卡信息用的。相对于4.4之前的代码来说,InCallActivity实际上取代了InCallScreen的功能,初始化流程详细请查看代码。这里得提一下InCallUI中的presenter,它相当于是状态机,保存各种状态,而fragment用于承载显示。
InCallActivity初始化时序图如下:
CallButtonFragment控制流程
- answerFragment:接通/挂断/短信回复时需要使用;
- dialpadButton:也就是显示或隐藏拨号盘(DTMF);
- audioButton:开启/关闭扬声器;
- muteButton:开启/关闭麦克风静音,开启之后对方无法听到你的声音;
- holdButton:开启/关闭呼叫保持;
- addButton:增加多路通话;也就是在通话的过程中可以暂停当前通话,拨打另一路通话并接通;
answerFragment滑动控件
answerFragment就是原来的MultiWaveView,现在作为一个独立的fragment存在。控制流程时序图如下:
图 6 anserFragment显示/控制时序图
dialpadButton显示/隐藏拨号盘
时序图如下:
图 7 接通后显示拨号盘时序图
audioButton开启/关闭扬声器
muteButton开启/关闭麦克风静音
holdButton开启/关闭呼叫保持
addButton添加一路通话
endButton挂断当前通话
CallCardFragment通话信息显示
CallCardFragment的更新相对于4.4以前来说,更为独立,代码更为清晰(只不过被MTK这么一改,哎……),整个界面更新时序图如下:
小结
Android 4.4 Phone在UI上并没有大的改动,但是代码的实现方法却发生了很大的变化,通过分析可以基本理清UI界面的更新流程。
最后附上文中涉及时序图的原图下载链接,原图无失真便于查看,下载地址点这里。
Android 4.4Phone的变化(二)相关推荐
- 【朝花夕拾】Android性能篇之(二)Java内存分配
前言 原文:[朝花夕拾]Android性能篇之(二)Java内存分配 在内存方面,相比于C/C++程序员,咱们java系程序员算是比较幸运的,因为对于内存的分配和回收,都交给 ...
- Android系列之Fragment(二)----Fragment的生命周期和返回栈
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android开发笔记(一百二十二)循环器视图RecyclerView
RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...
- Android MVVM框架搭建(二)OKHttp + Retrofit + RxJava
Android MVVM框架搭建(二)Retrofit + RxJava 前言 正文 一.引入依赖 二.工具类 三.构建网络框架 1. Base 2. 异常处理 3. 拦截器 4. 网络请求服务 四. ...
- Android AR开发实践之二: Google ARCore介绍
Android AR开发实践之二: Google ARCore介绍 一.ARCore介绍 二.ARCore工作原理 三.ARCore基本概念 四.ARCore渲染技术 使用OpenGL渲染 使用Sce ...
- Android 10.0 PackageManagerService(二)权限扫描-[Android取经之路]
摘要:PackageManagerService在systemReady()后,进行了/system/etc/permissions中的各种xml进行扫描,进行相应的权限存储,供以后使用 阅读本文大约 ...
- Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现...
Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...
- Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...
Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...
- Android开发笔记(一百二十六)自定义音乐播放器
MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...
最新文章
- 广播风暴系列专题(一)广播风暴:发现-端口
- 128G小米CC9e手机,免费送!真事!
- Linux系统查看各种信息
- ERROR 1064 (42000): ; check the manual that corresponds to y
- 将自己的dcm数据制作成LUNA16数据集提供数据样式之代码整理
- 【译文 Part 1】NEO vs. ETH--为什么NEO可能是2018最强数字货币?
- 无法添加外键约束的原因(cannot add foreign key constraint)
- 梯度离散_使用策略梯度同时进行连续/离散超参数调整
- linux 信号阻塞和信号未决
- C语言猜拳游戏完整代码
- 用计算机处理文字,计算机文字 计算机文字与信息处理
- windows部署django项目
- ipad上html语言编辑,Html编辑器iPad版
- 51单片机之TMOD寄存器
- 常用浏览器User-Agent列表
- linux cp omitting 复制,Linux中复制目录报错cp:omitting directory的解决办法
- 打开模拟器上app的文件位置方法
- 获取网页链接里的视频原件
- Facebook和Heroku结成伙伴关系
- Capture One 21 Pro v14.3.0.185 飞思顶级图像后期处理编辑软件