Merge "Account for the bouncer's scrim in LightBarController" into udc-dev
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user