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));
    }

猜你喜欢

转载自blog.csdn.net/u012932409/article/details/126308523
今日推荐