需求

顶部下拉框中的护眼模式去掉

参考知识点

我们在博客中已经分析了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 即可:
去掉顶部下拉框中的护眼模式-LMLPHP

 <!-- 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 里面创建的地方同步去掉。
09-30 05:05