android12.0(S) 通知栏不显示闹钟和静音图标 bug

简介: android12.0(S) 通知栏不显示闹钟和静音图标 bug

bug 现象:设置闹钟或静音模式后,状态栏不显示图标,但下拉状态栏中有显示


在网上搜索了下没人报这个问题,大家是都默认了???


找到一篇报道有写,bug 相关


关于 Bug 修复方面,Android 12 Beta 4 修复了部分未接来电通知无法关闭的问题,


修复了系统主题颜色不适用某些快速设置图块的问题,


修复了快速设置图块在拖动或重新排列时,未与网格对齐的问题。修复了通知栏不显示闹钟和静音图标的问题。


patch


frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java

@@ -203,8 +203,9 @@ public class KeyguardStatusBarView extends RelativeLayout implements
     // Set hidden status bar items
     private void loadBlockList() {
         Resources r = getResources();
-        mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_volume));
-        mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_alarm_clock));
+        //aosp bug block alarm and mute icon
+        // mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_volume));
+        // mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_alarm_clock));
         mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_call_strength));
     }

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java

@@ -158,8 +158,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
         }
         mDarkIconManager = new DarkIconManager(view.findViewById(R.id.statusIcons), mFeatureFlags);
         mDarkIconManager.setShouldLog(true);
-        mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_volume));
-        mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_alarm_clock));
+        //aosp bug block alarm and mute icon
+        // mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_volume));
+        // mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_alarm_clock));
         mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_call_strength));
         mDarkIconManager.setBlockList(mBlockedIcons);

分析思路:


状态栏icon对应 StatusBarIconView,找到其中


setVisibility(icon.visible && !mBlocked ? VISIBLE : GONE); 可以看到有个 mBlocked,有的显示有的不显示,那应该就是被黑了。


StatusBarIconControllerImpl.java

onTuningChanged(String key, String newValue) {

mIconHideList.addAll(StatusBarIconController.getIconHideList(mContext, newValue));

addSystemIcon(int index, StatusBarIconHolder holder) {
  boolean hidden = mIconHideList.contains(slot);
  l.onIconAdded(viewIndex, slot, hidden, holder));


StatusBarIconController.java

addHolder(int index, String slot, boolean blocked, StatusBarIconHolder holder) {

if (mBlockList.contains(slot)) {

blocked = true;

}

switch (holder.getType()) {

case TYPE_ICON:

return addIcon(index, slot, blocked, holder.getIcon());


被黑有两种方式,均在 StatusBarIconController 中过滤


第一种看到上面直接传递的 blocked,通过 config.xml 中配置


frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\StatusBarIconController.java

    static ArraySet<String> getIconHideList(Context context, String hideListStr) {
        ArraySet<String> ret = new ArraySet<>();
        String[] hideList = hideListStr == null
            ? context.getResources().getStringArray(R.array.config_statusBarIconsToExclude)
            : hideListStr.split(",");
        for (String slot : hideList) {
            if (!TextUtils.isEmpty(slot)) {
                ret.add(slot);
            }
        }
        return ret;
    }

frameworks\base\packages\SystemUI\res\values\config.xml

    <string-array name="config_statusBarIconsToExclude" translatable="false">
        <item>@*android:string/status_bar_rotate</item>
        <item>@*android:string/status_bar_headset</item>
    </string-array>

可以看到耳机(headset)和旋转(rotate)被黑了


第二种,通过 mBlockList 进行添加,静音(volume)和闹钟(alarm_clock)和call_strength被黑了


frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\StatusBarIconController.java

  public void setBlockList(@Nullable List<String> blockList) {
    mBlockList.clear();
    if (blockList == null || blockList.isEmpty()) {
      return;
    }
    mBlockList.addAll(blockList);
  }

KeyguardStatusBarView.java CollapsedStatusBarFragment.java

    private void loadBlockList() {
        Resources r = getResources();
        mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_volume));
        mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_alarm_clock));
        mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_call_strength));
    }


目录
相关文章
|
3月前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
36 0
|
3月前
|
Java Android开发
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
405 0
|
3月前
|
Android开发
Android 状态栏WiFi图标的显示逻辑
Android 状态栏WiFi图标的显示逻辑
80 0
|
8天前
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
48 2
|
18天前
|
XML Android开发 数据格式
Android实战经验之Kotlin中快速实现动态更改应用图标和名称
本文介绍在Android中通过设置多个活动别名动态更改应用图标和名称的方法,涉及XML配置及Kotlin代码示例。
58 10
|
2月前
|
存储 Android开发
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
25 0
|
3月前
|
Java Android开发
Android桌面快捷方式图标生成与删除 使用Intent与launcher交互
Android桌面快捷方式图标生成与删除 使用Intent与launcher交互
57 1
|
3月前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
74 0
|
3月前
|
机器人 Android开发 数据安全/隐私保护
Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)
Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)
628 0
|
8月前
|
编解码 Android开发
用PS为网迅安卓公司设计基于安卓平台的手机应用图标
用PS为网迅安卓公司设计基于安卓平台的手机应用图标