需求
顶部下拉框中的护眼模式去掉
参考知识点
我们在博客中已经分析了QS、QQS 相关的流程,实践过项目需求
Android12 SystemUI QS面板新增截屏功能
Android12_SystemUI下拉框新增音量控制条
Android系统去掉WIFI模块
修改QS/QQS 必须具备一些SystemUI 基本知识,了解了基本知识修改对应内容很简单了
功能实现
参考 上面参考知识点,只需要在SystemUI 的配置文件values/config.xml 中实现
路径:
xref: /frameworks/base/packages/SystemUI/res/values/config.xml
在线源码位置:
http://xrefandroid.com/android-12.0.0_r34/xref/frameworks/base/packages/SystemUI/res/values/config.xml
修改具体源码如下,去掉配置中的night 即可:
<!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" -->
109 <string name="quick_settings_tiles_stock" translatable="false">
110 internet,bt,flashlight,dnd,alarm,airplane,controls,wallet,rotation,battery,cast,screenrecord,mictoggle,cameratoggle,location,hotspot,inversion,saver,dark,work,night,reverse,reduce_brightness
111 </string>
116 <!-- The tiles to display in QuickSettings in retail mode -->
117 <string name="quick_settings_tiles_retail_mode" translatable="false">
118 night,dark,dnd,flashlight,rotation,location
119 </string>
问题点
理论上经过上面的功能实现,我们已经完成了需求。但是实际会遇到问题了。
遇到问题点
顶部下拉框中的护眼模式已经去掉了,但是去设置打开了护眼模式或者用代码打开了护眼模式后,顶部下拉框的护眼模式重新显示出来了,关闭护眼模式后 顶部下拉框中的护眼模式模块依然显示
问题点修改文件
packages/apps/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
具体修改点
QS快捷面板创建工厂类中,去掉护眼模式的创建
QSFactoryImpl 类,createTileInternal 方法中,屏蔽代码:
/*case "night":
return mNightDisplayTileProvider.get();*/
我们在创建QSTitle 地方,不去创建就完成了需求,甚至我们根本不需要去掉配置文件中的具体配置。
疑问:去掉配置中的配置,为啥硬编码打开了护眼模式还是会显示,这个代码逻辑自行查阅,暂不分析。
总结
- 如果去掉某个QSTitle:去掉配置文件选项、去掉QSTitle 工厂QSFactoryImpl里面创建QSTitle 的地方
- 如果创建某个QSTitle:配置文件里面添加,QSTitle 工厂QSFactoryImpl 里面新增创建
- 疑难杂症,当前护眼模式地方,明明配置文件已经去掉了,为啥打开后还会在QS面板中显示,所以在QSTitle 里面创建的地方同步去掉。