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);实现