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