diff options
6 files changed, 41 insertions, 26 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java index cb2aa947ac5e..a53e348fd16c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java @@ -202,8 +202,7 @@ public class ScrimView extends View implements ConfigurationController.Configura return mDrawable; } - @VisibleForTesting - ColorExtractor.GradientColors getColors() { + public ColorExtractor.GradientColors getColors() { return mColors; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java index 9d699cfba53b..917a56fbc99d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java @@ -16,11 +16,16 @@ package com.android.systemui.statusbar.phone; +import android.app.WallpaperColors; +import android.content.Context; +import android.graphics.Color; import android.graphics.Rect; import android.view.View; +import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; +import com.android.systemui.R; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.DarkIconDispatcher; @@ -49,6 +54,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC private boolean mDockedLight; private int mLastStatusBarMode; private int mLastNavigationBarMode; + private final Color mDarkModeColor; /** * Whether the navigation bar should be light factoring in already how much alpha the scrim has @@ -61,12 +67,14 @@ public class LightBarController implements BatteryController.BatteryStateChangeC */ private boolean mHasLightNavigationBar; private boolean mScrimAlphaBelowThreshold; + private boolean mInvertLightNavBarWithScrim; private float mScrimAlpha; private final Rect mLastFullscreenBounds = new Rect(); private final Rect mLastDockedBounds = new Rect(); - public LightBarController() { + public LightBarController(Context ctx) { + mDarkModeColor = Color.valueOf(ctx.getColor(R.color.dark_mode_icon_color_single_tone)); mStatusBarIconController = Dependency.get(DarkIconDispatcher.class); mBatteryController = Dependency.get(BatteryController.class); mBatteryController.addCallback(this); @@ -74,6 +82,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC public void setNavigationBar(LightBarTransitionsController navigationBar) { mNavigationBarController = navigationBar; + updateNavigation(); } public void setFingerprintUnlockController( @@ -119,7 +128,8 @@ public class LightBarController implements BatteryController.BatteryStateChangeC boolean last = mNavigationLight; mHasLightNavigationBar = isLight(vis, navigationBarMode, View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); - mNavigationLight = mHasLightNavigationBar && mScrimAlphaBelowThreshold; + mNavigationLight = mHasLightNavigationBar + && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim); if (mNavigationLight != last) { updateNavigation(); } @@ -145,6 +155,15 @@ public class LightBarController implements BatteryController.BatteryStateChangeC } } + public void setScrimColor(GradientColors colors) { + boolean invertLightNavBarWithScrimBefore = mInvertLightNavBarWithScrim; + mInvertLightNavBarWithScrim = !colors.supportsDarkText(); + if (mHasLightNavigationBar + && invertLightNavBarWithScrimBefore != mInvertLightNavBarWithScrim) { + reevaluate(); + } + } + private boolean isLight(int vis, int barMode, int flag) { boolean isTransparentBar = (barMode == MODE_TRANSPARENT || barMode == MODE_LIGHTS_OUT_TRANSPARENT); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java index 6bd959fe2a54..417bef8575cb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java @@ -23,8 +23,8 @@ import android.os.Handler; import android.os.SystemClock; import android.util.TimeUtils; -import com.android.systemui.Dumpable; import com.android.systemui.Dependency; +import com.android.systemui.Dumpable; import com.android.systemui.Interpolators; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.statusbar.CommandQueue; @@ -55,7 +55,6 @@ public class LightBarTransitionsController implements Dumpable, Callbacks { private ValueAnimator mTintAnimator; private float mDarkIntensity; private float mNextDarkIntensity; - private final Runnable mTransitionDeferringDoneRunnable = new Runnable() { @Override public void run() { @@ -130,6 +129,7 @@ public class LightBarTransitionsController implements Dumpable, Callbacks { public void setIconsDark(boolean dark, boolean animate) { if (!animate) { setIconTintInternal(dark ? 1.0f : 0.0f); + mNextDarkIntensity = dark ? 1.0f : 0.0f; } else if (mTransitionPending) { deferIconTintChange(dark ? 1.0f : 0.0f); } else if (mTransitionDeferring) { @@ -155,12 +155,12 @@ public class LightBarTransitionsController implements Dumpable, Callbacks { private void animateIconTint(float targetDarkIntensity, long delay, long duration) { + if (mNextDarkIntensity == targetDarkIntensity) { + return; + } if (mTintAnimator != null) { mTintAnimator.cancel(); } - if (mDarkIntensity == targetDarkIntensity) { - return; - } mNextDarkIntensity = targetDarkIntensity; mTintAnimator = ValueAnimator.ofFloat(mDarkIntensity, targetDarkIntensity); mTintAnimator.addUpdateListener( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 6672f5e89414..a8b1c91fc235 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -315,6 +315,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mScrimInFront.setColors(mSystemColors, animateScrimInFront); mScrimBehind.setColors(mSystemColors, animateScrimBehind); } + mLightBarController.setScrimColor(mScrimInFront.getColors()); } if (mAnimateKeyguardFadingOut || mForceHideScrims) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index a11af51cc6bd..4d3395d8e322 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1108,7 +1108,7 @@ public class StatusBar extends SystemUI implements DemoMode, } }); - mLightBarController = new LightBarController(); + mLightBarController = new LightBarController(context); if (mNavigationBar != null) { mNavigationBar.setLightBarController(mLightBarController); } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 75fc25aaec77..7e0b950f268e 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -7832,21 +7832,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private int updateLightStatusBarLw(int vis, WindowState opaque, WindowState opaqueOrDimming) { - WindowState statusColorWin = isStatusBarKeyguard() && !mKeyguardOccluded - ? mStatusBar - : opaqueOrDimming; - - if (statusColorWin != null) { - if (statusColorWin == opaque) { - // If the top fullscreen-or-dimming window is also the top fullscreen, respect - // its light flag. - vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - vis |= PolicyControl.getSystemUiVisibility(statusColorWin, null) - & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - } else if (statusColorWin != null && statusColorWin.isDimming()) { - // Otherwise if it's dimming, clear the light flag. - vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - } + final boolean onKeyguard = isStatusBarKeyguard() && !mKeyguardOccluded; + final WindowState statusColorWin = onKeyguard ? mStatusBar : opaqueOrDimming; + if (statusColorWin != null && (statusColorWin == opaque || onKeyguard)) { + // If the top fullscreen-or-dimming window is also the top fullscreen, respect + // its light flag. + vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + vis |= PolicyControl.getSystemUiVisibility(statusColorWin, null) + & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } else if (statusColorWin != null && statusColorWin.isDimming()) { + // Otherwise if it's dimming, clear the light flag. + vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } return vis; } @@ -7856,7 +7852,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { final WindowState imeWin = mWindowManagerFuncs.getInputMethodWindowLw(); final WindowState navColorWin; - if (imeWin != null && imeWin.isVisibleLw()) { + if (imeWin != null && imeWin.isVisibleLw() && mNavigationBarPosition == NAV_BAR_BOTTOM) { navColorWin = imeWin; } else { navColorWin = opaqueOrDimming; |