1.
packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
public void onNavigationVisibilityChanged(int vis, int mask, boolean nbModeChanged, int navigationBarMode) { int oldVis = mSystemUiVisibility; int newVis = (oldVis & ~mask) | (vis & mask); int diffVis = newVis ^ oldVis; if ((diffVis & View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR) != 0 || nbModeChanged) { boolean last = mNavigationLight; mHasLightNavigationBar = isLight(vis, navigationBarMode, View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); mNavigationLight = mHasLightNavigationBar && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim) && !mQsCustomizing; if (mNavigationLight != last) { updateNavigation(); } } mSystemUiVisibility = newVis; mLastNavigationBarMode = navigationBarMode; }
其中决定了背景色是否为亮色或者为暗色,通过此处的设置系统回去自动的决定icon的颜色。
bug原因:
a. app 设置了View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR 属性,导致系统把背景色的标志为了亮色,但此处的设置并不本质决定背景色。由于标志为了亮色所以图标icon为黑色。
b. 没有实际修改背景色,还是使用的是系统主题里面的颜色,黑色。
所以看不到图表了,本身是app的问题呢。
2.在不修改app 的前提下的修改测试方法。
a.为单独的app重新设置一遍。
int oldVis = mSystemUiVisibility; int newVis = (oldVis & ~mask) | (vis & mask); int diffVis = newVis ^ oldVis; + boolean isBlack = false; if ((diffVis & View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR) != 0 || nbModeChanged) { boolean last = mNavigationLight; mHasLightNavigationBar = isLight(vis, navigationBarMode, View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); + String packageName = "xxxx"; + String className = "xxxxxxxxxx"; + ActivityManager activityManager = (ActivityManager) mContext.getSystemService(mContext.ACTIVITY_SERVICE); + List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1); + if (tasksInfo.size() > 0) { + ComponentName topConponent = tasksInfo.get(0).topActivity; + if (packageName.equals(topConponent.getPackageName()) && className.equals(topConponent.getClassName())) { + isBlack = true; + } + } mNavigationLight = mHasLightNavigationBar && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim) - && !mQsCustomizing; + && !mQsCustomizing + && !isBlack; if (mNavigationLight != last) { updateNavigation(); }