1.去除暗黑反色问题
方法:DarkIconDispatcherImpl(applyDarkIntensity)
StatusBarIconView(onDarkChanged)
类:NotificationIconContainer(通知的管理类)
statusbar\phone\StatusBarIconController.java(TintedIconManager/onIconAdded)
(1)frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
PWM开始更新SystemUI的状态,此处我们重点关注updateLightStatusBarLw函数
updateLightStatusBarLw根据最上层的窗口确认是否为Light SystemUI的,接下来看下PolicyControl.getSystemUiVisibility
(2)frameworks/base/services/core/java/com/android/server/policy/PolicyControl.java
在getSystemUiVisibility中又没有相关LIGHT的操作,那么有跑到了WindowState.getSystemUiVisibility中
(3)frameworks/base/services/core/java/com/android/server/wm/WindowState.java
此处很简单的就是获取mSystemUiVisibility,而mSystemUiVisibility最终是从哪里来的呢,那就要跳到PhoneWindow.java。
(此处跳动有点大,主要是从ViewRootImpl的relayout界面时携带的WindowManager.LayoutParams决定的)
(4)frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java
phonewindow是作为view与activity之间的一个管理工具,创建是在activity的attach方法中,作为window的一个实现类
2.SystemUI状态栏的更新
Systemui接收到StatusBarManagerService对状态栏的状态的update,以及对状态栏的更新。
android:windowLightStatusBar 是否改变状态栏颜色属性
PhoneStatusBarPolicy.java这个类在初始化的时候注册了大量的监听
设置界面切换颜色
QuickStatusBarHeader:
mBatteryRemainingIcon.onDarkChanged(tintArea, intensity, fillColor);
DecorView View的底层类,涉及到statusbar calculateStatusBarColor winowLightStatusbar SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
<style name="Theme.Settings" parent="Theme.SettingsBase">
<style name="Theme.Settings.Home" parent="Theme.Settings.HomeBase">
左上角icon图标优化
时钟图标status_bar_battery_icon_height 时钟文字status_bar_clock_size
icon图标大小:status_bar_icon_size status_bar_system_icon_size
status_bar_icon_drawing_size_dark status_bar_icon_drawing_size
文件位置:src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java res/layout/system_icons.xml