多项目共享一份代码,如何控制项目是否显示settings里的preferceItem

应用场景:

公司有十几个项目,但源代码只有一份,最近公司要求我在某个项目的(这里用s123代替项目)Settings下加入以太网UI设置,代码写完了,如何智能的控制在哪个项目上显示呢?

难点一:

如何关闭及代开settings里面的以太网接口。

解决:参照settings源代码,在updateHeaderList(updateHeaderList)加载header的时候,会根据Header header = target.get(i); 获取到显示的header (我们可以理解为item),那么int id = (int) header.id; 将获得对应header的ID, 下面就很简单了,贴上以wifi为例的判断是否显示的代码吧。

else if (id == R.id.wifi_settings) {
                // Remove WiFi Settings if WiFi service is not available.
                if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)
                        || !getResources().getBoolean(R.bool.config_wifi_enable)) {
                    target.remove(i);
                }
            } 
我们可以看到当header.id==wifi.id时,将判断hasSystemFeature()这个函数,查看源代码后,翻译过来就是在 /system/etc/permissions 下是否有“android.hardware.wifi”这个配置项,删除就不显示! 然后还会判断config_wifi_enable 这个boolean值,这个就是我们需要定义的开关了,定义在values下的config里,所以参照wifi ,我写的代码如下:

else if (id == R.id.ethernet_settings) {
                if (!getResources().getBoolean(R.bool.config_show_ethernet)) {
                    target.remove(i);
                }
            }
难点二:

如何项目控制我们定义的boolean值呢,这个是问的我们经理。每个项目的UI界面分别有对应的lunch控制的,在目录devices下,项目文件夹下,有个overlay 文件夹,这个文件夹起到的作用就是如果里面有对应程序的配置值,那么这个值将生效,同时对应的app下的值将不生效,而别的项目则还是app下的值生效,这样就有效的分开了不同的UI显示了,如我们公司定义的文件路径。

M:\android-4.4.4_r2\device\leadcore\s123\overlay\leadcore\third-packages\apps\Settings\res\values


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值