//StatusBar.java
public void start() {
.............
onSystemBarAppearanceChanged(mDisplayId, result.mAppearance, result.mAppearanceRegions,
result.mNavbarColorManagedByIme);
mAppFullscreen = result.mAppFullscreen;
mAppImmersive = result.mAppImmersive;
............
}
@Override
public void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
if (displayId != mDisplayId) {
return;
}
........
//状态栏图标跟随barMode改变
mLightBarController.onStatusBarAppearanceChanged(appearanceRegions, barModeChanged,
mStatusBarMode, navbarColorManagedByIme);
updateBubblesVisibility();
}
//LightBarController.java
private void updateStatus() {
final int numStacks = mAppearanceRegions.length;
int numLightStacks = 0;
// We can only have maximum one light stack.
int indexLightStack = -1;
for (int i = 0; i < numStacks; i++) {
if (isLight(mAppearanceRegions[i].getAppearance(), mStatusBarMode,
APPEARANCE_LIGHT_STATUS_BARS)) {
numLightStacks++;
indexLightStack = i;
}
}
// If all stacks are light, all icons get dark.
if (numLightStacks == numStacks) {
mStatusBarIconController.setIconsDarkArea(null);
mStatusBarIconController.getTransitionsController().setIconsDark(true, animateChange());
}
// If no one is light, all icons become white.
else if (numLightStacks == 0) {
mStatusBarIconController.getTransitionsController().setIconsDark(
false, animateChange());
}
// Not the same for every stack, magic!
else {
mStatusBarIconController.setIconsDarkArea(
mAppearanceRegions[indexLightStack].getBounds());
mStatusBarIconController.getTransitionsController().setIconsDark(true, animateChange());
}
}
参考_1
参考_2