桌面三键导航图标颜色
1、更新图标颜色
private void updateNavButtonColor() {
final ArgbEvaluator argbEvaluator = ArgbEvaluator.getInstance();
final int sysUiNavButtonIconColorOnHome = (int) argbEvaluator.evaluate(
mTaskbarNavButtonDarkIntensity.value,
mLightIconColorOnHome,
mDarkIconColorOnHome);
// Override the color from framework if nav buttons are over an opaque Taskbar surface.
final int iconColor = (int) argbEvaluator.evaluate(
mOnBackgroundNavButtonColorOverrideMultiplier.value
* Math.max(
mOnTaskbarBackgroundNavButtonColorOverride.value,
mSlideInViewVisibleNavButtonColorOverride.value),
sysUiNavButtonIconColorOnHome,
mOnBackgroundIconColor);
for (ImageView button : mAllButtons) {
button.setImageTintList(ColorStateList.valueOf(iconColor));
Drawable background = button.getBackground();
if (background instanceof KeyButtonRipple) {
((KeyButtonRipple) background).setDarkIntensity(mTaskbarNavButtonDarkIntensity.value);
}
}
}
com/android/systemui/shared/navigationbar/KeyButtonRipple.java
public void setDarkIntensity(float darkIntensity) { //按键颜色取决于darkIntensity的值,如果大于0.5则显示黑色图标,如果小于0.5则显示白色轨迹的图标
mDark = darkIntensity >= 0.5f;
}
2、设置图标darkIntensity颜色的值
按键颜色取决于darkIntensity的值,如果大于0.5则显示黑色图标,如果小于0.5则显示白色轨迹的图标,darkIntensity的值来源于SystemUI,通过IOverviewProxy服务 aidl 传给桌面的,具体流程见下面:
com/android/systemui/shared/recents/IOverviewProxy.java#onNavButtonsDarkIntensityChanged(float darkIntensity)
com/android/quickstep/TouchInteractionService.java
public void onNavButtonsDarkIntensityChanged(float darkIntensity) {
executeForTaskbarManager(taskbarManager ->
taskbarManager.onNavButtonsDarkIntensityChanged(darkIntensity));
}
com/android/launcher3/taskbar/TaskbarManager.java
public void onNavButtonsDarkIntensityChanged(float darkIntensity) {
mSharedState.navButtonsDarkIntensity = darkIntensity;
if (mTaskbarActivityContext != null) {
mTaskbarActivityContext.onNavButtonsDarkIntensityChanged(darkIntensity);
}
}
com/android/launcher3/taskbar/TaskbarActivityContext.java
public void onNavButtonsDarkIntensityChanged(float darkIntensity) {
mControllers.navbarButtonsViewController.getTaskbarNavButtonDarkIntensity().updateValue(darkIntensity);
}