Merge "Account for the bouncer's scrim in LightBarController" into udc-dev
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 a058bf8..a6b2bd8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -103,6 +103,7 @@
private boolean mQsCustomizing;
private boolean mQsExpanded;
+ private boolean mBouncerVisible;
private boolean mGlobalActionsVisible;
private boolean mDirectReplying;
@@ -188,9 +189,10 @@
final boolean ignoreScrimForce = mDirectReplying && mNavbarColorManagedByIme;
final boolean darkForScrim = mForceDarkForScrim && !ignoreScrimForce;
final boolean lightForScrim = mForceLightForScrim && !ignoreScrimForce;
- final boolean darkForQs = mQsCustomizing || mQsExpanded || mGlobalActionsVisible;
+ final boolean darkForQs = (mQsCustomizing || mQsExpanded) && !mBouncerVisible;
+ final boolean darkForTop = darkForQs || mGlobalActionsVisible;
mNavigationLight =
- ((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForQs;
+ ((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForTop;
mLastNavigationBarAppearanceChangedLog = "onNavigationBarAppearanceChanged()"
+ " appearance=" + appearance
+ " nbModeChanged=" + nbModeChanged
@@ -201,6 +203,7 @@
+ " darkForScrim=" + darkForScrim
+ " lightForScrim=" + lightForScrim
+ " darkForQs=" + darkForQs
+ + " darkForTop=" + darkForTop
+ " mNavigationLight=" + mNavigationLight
+ " last=" + last
+ " timestamp=" + new Date();
@@ -298,15 +301,20 @@
public void setScrimState(ScrimState scrimState, float scrimBehindAlpha,
GradientColors scrimInFrontColor) {
if (mUseNewLightBarLogic) {
+ boolean bouncerVisibleLast = mBouncerVisible;
boolean forceDarkForScrimLast = mForceDarkForScrim;
boolean forceLightForScrimLast = mForceLightForScrim;
- final boolean forceForScrim =
- scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
+ mBouncerVisible =
+ scrimState == ScrimState.BOUNCER || scrimState == ScrimState.BOUNCER_SCRIMMED;
+ final boolean forceForScrim = mBouncerVisible
+ || scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
final boolean scrimColorIsLight = scrimInFrontColor.supportsDarkText();
mForceDarkForScrim = forceForScrim && !scrimColorIsLight;
mForceLightForScrim = forceForScrim && scrimColorIsLight;
- if (mHasLightNavigationBar) {
+ if (mBouncerVisible != bouncerVisibleLast) {
+ reevaluate();
+ } else if (mHasLightNavigationBar) {
if (mForceDarkForScrim != forceDarkForScrimLast) reevaluate();
} else {
if (mForceLightForScrim != forceLightForScrimLast) reevaluate();
@@ -318,6 +326,7 @@
+ " forceForScrim=" + forceForScrim
+ " scrimColorIsLight=" + scrimColorIsLight
+ " mHasLightNavigationBar=" + mHasLightNavigationBar
+ + " mBouncerVisible=" + mBouncerVisible
+ " mForceDarkForScrim=" + mForceDarkForScrim
+ " mForceLightForScrim=" + mForceLightForScrim
+ " timestamp=" + new Date();
@@ -428,6 +437,7 @@
pw.println();
pw.print(" mQsCustomizing="); pw.println(mQsCustomizing);
pw.print(" mQsExpanded="); pw.println(mQsExpanded);
+ pw.print(" mBouncerVisible="); pw.println(mBouncerVisible);
pw.print(" mGlobalActionsVisible="); pw.println(mGlobalActionsVisible);
pw.print(" mDirectReplying="); pw.println(mDirectReplying);
pw.print(" mNavbarColorManagedByIme="); pw.println(mNavbarColorManagedByIme);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java
index a501556..6a4b3c5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java
@@ -222,31 +222,103 @@
// Initial state is set when controller is set
mLightBarController.setNavigationBar(mNavBarController);
- verifyNavBarIconsDarkSetTo(false);
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
// Changing the color of the transparent scrim has no effect
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_LIGHT);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
// Showing the notification shade with white scrim requires dark icons
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_LIGHT);
- verifyNavBarIconsDarkSetTo(true);
+ verifyNavBarIconsDark(true, /* didFireEvent= */ true);
// Expanded QS always provides a black background, so icons become light again
mLightBarController.setQsExpanded(true);
- verifyNavBarIconsDarkSetTo(false);
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
// Tapping the QS tile to change to dark theme has no effect in this state
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_DARK);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
// collapsing QS in dark mode doesn't affect button color
mLightBarController.setQsExpanded(false);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
// Closing the shade has no affect
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_DARK);
- verifyNavBarIconsUnchanged(); // still light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
+ }
+
+ @Test
+ public void navBarHasDarkIconsInLockedShade_lightMode() {
+ assumeTrue(testNewLightBarLogic()); // Only run in the new suite
+
+ // On the locked shade QS in light mode buttons are light
+ mLightBarController.setScrimState(ScrimState.SHADE_LOCKED, 1f, COLORS_LIGHT);
+ mLightBarController.onNavigationBarAppearanceChanged(
+ 0, /* nbModeChanged = */ true,
+ MODE_TRANSPARENT, /* navbarColorManagedByIme = */ false);
+ verifyNavBarIconsUnchanged(); // no changes yet; not attached
+
+ // Initial state is set when controller is set
+ mLightBarController.setNavigationBar(mNavBarController);
+ verifyNavBarIconsDark(true, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasLightIconsInLockedQs_lightMode() {
+ // GIVEN dark icons in locked shade in light mdoe
+ navBarHasDarkIconsInLockedShade_lightMode();
+ // WHEN expanding QS
+ mLightBarController.setQsExpanded(true);
+ // THEN icons become light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasDarkIconsInBouncerOverQs_lightMode() {
+ // GIVEN that light icons in locked expanded QS
+ navBarHasLightIconsInLockedQs_lightMode();
+ // WHEN device changes to bouncer
+ mLightBarController.setScrimState(ScrimState.BOUNCER, 1f, COLORS_LIGHT);
+ // THEN icons change to dark
+ verifyNavBarIconsDark(true, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasLightIconsInLockedShade_darkMode() {
+ assumeTrue(testNewLightBarLogic()); // Only run in the new suite
+
+ // On the locked shade QS in light mode buttons are light
+ mLightBarController.setScrimState(ScrimState.SHADE_LOCKED, 1f, COLORS_DARK);
+ mLightBarController.onNavigationBarAppearanceChanged(
+ 0, /* nbModeChanged = */ true,
+ MODE_TRANSPARENT, /* navbarColorManagedByIme = */ false);
+ verifyNavBarIconsUnchanged(); // no changes yet; not attached
+
+ // Initial state is set when controller is set
+ mLightBarController.setNavigationBar(mNavBarController);
+ verifyNavBarIconsDark(false, /* didFireEvent= */ true);
+ }
+
+ @Test
+ public void navBarHasLightIconsInLockedQs_darkMode() {
+ // GIVEN light icons in the locked shade
+ navBarHasLightIconsInLockedShade_darkMode();
+ // WHEN QS expands
+ mLightBarController.setQsExpanded(true);
+ // THEN icons stay light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
+ }
+
+ @Test
+ public void navBarHasLightIconsInBouncerOverQs_darkMode() {
+ // GIVEN that light icons in locked expanded QS
+ navBarHasLightIconsInLockedQs_darkMode();
+ // WHEN device changes to bouncer
+ mLightBarController.setScrimState(ScrimState.BOUNCER, 1f, COLORS_DARK);
+ // THEN icons stay light
+ verifyNavBarIconsDark(false, /* didFireEvent= */ false);
}
private void verifyNavBarIconsUnchanged() {
@@ -258,4 +330,14 @@
verify(mNavBarController, never()).setIconsDark(eq(!iconsDark), anyBoolean());
clearInvocations(mNavBarController);
}
+
+ private void verifyNavBarIconsDark(boolean iconsDark, boolean didFireEvent) {
+ if (didFireEvent) {
+ verifyNavBarIconsDarkSetTo(iconsDark);
+ } else {
+ verifyNavBarIconsUnchanged();
+ mLightBarController.setNavigationBar(mNavBarController);
+ verifyNavBarIconsDarkSetTo(iconsDark);
+ }
+ }
}