Merge "Account for the bouncer's scrim in LightBarController" into udc-dev

This commit is contained in:
Jeff DeCew
2023-05-09 17:37:01 +00:00
committed by Android (Google) Code Review
2 changed files with 104 additions and 12 deletions

View File

@@ -103,6 +103,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
private boolean mQsCustomizing;
private boolean mQsExpanded;
private boolean mBouncerVisible;
private boolean mGlobalActionsVisible;
private boolean mDirectReplying;
@@ -188,9 +189,10 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
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 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
+ " darkForScrim=" + darkForScrim
+ " lightForScrim=" + lightForScrim
+ " darkForQs=" + darkForQs
+ " darkForTop=" + darkForTop
+ " mNavigationLight=" + mNavigationLight
+ " last=" + last
+ " timestamp=" + new Date();
@@ -298,15 +301,20 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
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 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
+ " forceForScrim=" + forceForScrim
+ " scrimColorIsLight=" + scrimColorIsLight
+ " mHasLightNavigationBar=" + mHasLightNavigationBar
+ " mBouncerVisible=" + mBouncerVisible
+ " mForceDarkForScrim=" + mForceDarkForScrim
+ " mForceLightForScrim=" + mForceLightForScrim
+ " timestamp=" + new Date();
@@ -428,6 +437,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
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);

View File

@@ -222,31 +222,103 @@ public class LightBarControllerTest extends SysuiTestCase {
// 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 @@ public class LightBarControllerTest extends SysuiTestCase {
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);
}
}
}