SystemUI启动流程及主体布局介绍

Gree Statusbar构成:

Statusbar.png

状态栏加载流程
SystemUIService ->BaseStatusBar.statr()->PhoneStatusBar.start()-->PhoneStatusBar.makeStatusBar();

状态各部件
SignalClusterView:信号塔,包括wifi,数据流量,VPN等有关信号的布局,最复杂的一个;
NotificationOverflowContainer:通知区域,显示通知的地方;
SystemIconAera:系统图标,负责蓝牙,耳机,闹钟,GPS等系统图标的显示地点;
BatteryLevelTextView:电量百分比
Clock:时钟

各部件原理及流程:

Clock:
对应文件:E:\SystemUI\src\com\android\systemui\statusbar\policy\Clock.java
原理:自定义TextVIew,依靠接收系统广播Intent.ACTION_TIME_TICK实现时间变化。

BatteryLevelTextView:
对应文件:E:\SystemUI\src\com\android\systemui\BatteryLevelTextView.java
原理:实现接口BatteryController.BatteryStateChangeCallback来改变电量,BatteryControllerImpl实现该接口,原理世界收系统时间变化广播Intent.ACTION_BATTERY_CHANGED来监听电量变化;

SystemIconAera
StatusBarIconController:负责状态栏区域的显示与隐藏:E:\SystemUI\src\com\android\systemui\statusbar\phone\StatusBarIconController.java

PhoneStatusBarPolicy:负责此部分的绝大多数图标的逻辑
E:\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBarPolicy.java
在注册函数中会监听各种广播:
包括:
TTY status;TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED
Alarm clock:闹钟 AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED
zen:勿扰模式/volume:音量AudioManager.RINGER_MODE_CHANGED_ACTION``AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION
hotspot:热点;HotspotController.Callback()实现在HotspotControllerImpl
nfc:NFC NfcAdapter.ACTION_ADAPTER_STATE_CHANGED
earphone:AudioManager.ACTION_HEADSET_PLUG
dateSaver: 实现接口DataSaverController.Listener来改变状态
bluetooth:蓝牙,同时实现接口BluetoothController.Callback()来改变状态,监听蓝牙变化实现在BluetoothControllerImpl

NotificationOverflowContainer:
NotificationIconAreaController:通知区域控制;
E:\SystemUI\src\com\android\systemui\statusbar\phone\NotificationIconAreaController.java
通知来自于NotificationData,然后会排序再查重后显示出来;
IconMerger:当图标大于一定数量和会显示省略号的地方
E:\SystemUI\src\com\android\systemui\statusbar\phone\IconMerger.java

SignalClusterView:

NetworkControllerImpl.png

 

NetworkControllerImpl:
E:\SystemUI\src\com\android\systemui\statusbar\policy\NetworkControllerImpl.java
实现信号变化监听的地方,主要数据来自于系统广播;流程复杂;

SignalClusterView:
信号塔部分;E:\SystemUI\src\com\android\systemui\statusbar\SignalClusterView.java
状态栏信号布局,通过各种回调然后apply到phoneStates中改变,主要的修改点都在此处;
WifiIcons/TelephonyIcons 替换状态信号图标的位置
signal_cluster_view.xml/mobile_signal_group.xml 图标布局文件,修改此处修改图标显示
status_bar.xml 总布局位置,HD图标在此处添加还有通话状态等;

其他部分修改:
BatteryMeterDrawable:充电图标的drawable,重写onDraw实现充电效果;
TrafficStatsView:移动入库网速显示的实现;
StatusbarCarrierText:联通入库双行运营商实现
StorageNotification: OTG连接通知改变;

NavigationBar:导航栏的显示与隐藏流程:
显示是由外部调用到内部

导航栏的显示与隐藏.png

隐藏是内部 removeNavigationBar() ->mWindowManager.removeView(mNavigationBarView);实现


原文链接:https://www.jianshu.com/p/3a9abfa2ed35

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值