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 mQsCustomizing;
|
||||||
private boolean mQsExpanded;
|
private boolean mQsExpanded;
|
||||||
|
private boolean mBouncerVisible;
|
||||||
private boolean mGlobalActionsVisible;
|
private boolean mGlobalActionsVisible;
|
||||||
|
|
||||||
private boolean mDirectReplying;
|
private boolean mDirectReplying;
|
||||||
@@ -188,9 +189,10 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
|||||||
final boolean ignoreScrimForce = mDirectReplying && mNavbarColorManagedByIme;
|
final boolean ignoreScrimForce = mDirectReplying && mNavbarColorManagedByIme;
|
||||||
final boolean darkForScrim = mForceDarkForScrim && !ignoreScrimForce;
|
final boolean darkForScrim = mForceDarkForScrim && !ignoreScrimForce;
|
||||||
final boolean lightForScrim = mForceLightForScrim && !ignoreScrimForce;
|
final boolean lightForScrim = mForceLightForScrim && !ignoreScrimForce;
|
||||||
final boolean darkForQs = mQsCustomizing || mQsExpanded || mGlobalActionsVisible;
|
final boolean darkForQs = (mQsCustomizing || mQsExpanded) && !mBouncerVisible;
|
||||||
|
final boolean darkForTop = darkForQs || mGlobalActionsVisible;
|
||||||
mNavigationLight =
|
mNavigationLight =
|
||||||
((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForQs;
|
((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForTop;
|
||||||
mLastNavigationBarAppearanceChangedLog = "onNavigationBarAppearanceChanged()"
|
mLastNavigationBarAppearanceChangedLog = "onNavigationBarAppearanceChanged()"
|
||||||
+ " appearance=" + appearance
|
+ " appearance=" + appearance
|
||||||
+ " nbModeChanged=" + nbModeChanged
|
+ " nbModeChanged=" + nbModeChanged
|
||||||
@@ -201,6 +203,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
|||||||
+ " darkForScrim=" + darkForScrim
|
+ " darkForScrim=" + darkForScrim
|
||||||
+ " lightForScrim=" + lightForScrim
|
+ " lightForScrim=" + lightForScrim
|
||||||
+ " darkForQs=" + darkForQs
|
+ " darkForQs=" + darkForQs
|
||||||
|
+ " darkForTop=" + darkForTop
|
||||||
+ " mNavigationLight=" + mNavigationLight
|
+ " mNavigationLight=" + mNavigationLight
|
||||||
+ " last=" + last
|
+ " last=" + last
|
||||||
+ " timestamp=" + new Date();
|
+ " timestamp=" + new Date();
|
||||||
@@ -298,15 +301,20 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
|||||||
public void setScrimState(ScrimState scrimState, float scrimBehindAlpha,
|
public void setScrimState(ScrimState scrimState, float scrimBehindAlpha,
|
||||||
GradientColors scrimInFrontColor) {
|
GradientColors scrimInFrontColor) {
|
||||||
if (mUseNewLightBarLogic) {
|
if (mUseNewLightBarLogic) {
|
||||||
|
boolean bouncerVisibleLast = mBouncerVisible;
|
||||||
boolean forceDarkForScrimLast = mForceDarkForScrim;
|
boolean forceDarkForScrimLast = mForceDarkForScrim;
|
||||||
boolean forceLightForScrimLast = mForceLightForScrim;
|
boolean forceLightForScrimLast = mForceLightForScrim;
|
||||||
final boolean forceForScrim =
|
mBouncerVisible =
|
||||||
scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
|
scrimState == ScrimState.BOUNCER || scrimState == ScrimState.BOUNCER_SCRIMMED;
|
||||||
|
final boolean forceForScrim = mBouncerVisible
|
||||||
|
|| scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
|
||||||
final boolean scrimColorIsLight = scrimInFrontColor.supportsDarkText();
|
final boolean scrimColorIsLight = scrimInFrontColor.supportsDarkText();
|
||||||
|
|
||||||
mForceDarkForScrim = forceForScrim && !scrimColorIsLight;
|
mForceDarkForScrim = forceForScrim && !scrimColorIsLight;
|
||||||
mForceLightForScrim = forceForScrim && scrimColorIsLight;
|
mForceLightForScrim = forceForScrim && scrimColorIsLight;
|
||||||
if (mHasLightNavigationBar) {
|
if (mBouncerVisible != bouncerVisibleLast) {
|
||||||
|
reevaluate();
|
||||||
|
} else if (mHasLightNavigationBar) {
|
||||||
if (mForceDarkForScrim != forceDarkForScrimLast) reevaluate();
|
if (mForceDarkForScrim != forceDarkForScrimLast) reevaluate();
|
||||||
} else {
|
} else {
|
||||||
if (mForceLightForScrim != forceLightForScrimLast) reevaluate();
|
if (mForceLightForScrim != forceLightForScrimLast) reevaluate();
|
||||||
@@ -318,6 +326,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
|||||||
+ " forceForScrim=" + forceForScrim
|
+ " forceForScrim=" + forceForScrim
|
||||||
+ " scrimColorIsLight=" + scrimColorIsLight
|
+ " scrimColorIsLight=" + scrimColorIsLight
|
||||||
+ " mHasLightNavigationBar=" + mHasLightNavigationBar
|
+ " mHasLightNavigationBar=" + mHasLightNavigationBar
|
||||||
|
+ " mBouncerVisible=" + mBouncerVisible
|
||||||
+ " mForceDarkForScrim=" + mForceDarkForScrim
|
+ " mForceDarkForScrim=" + mForceDarkForScrim
|
||||||
+ " mForceLightForScrim=" + mForceLightForScrim
|
+ " mForceLightForScrim=" + mForceLightForScrim
|
||||||
+ " timestamp=" + new Date();
|
+ " timestamp=" + new Date();
|
||||||
@@ -428,6 +437,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
|||||||
pw.println();
|
pw.println();
|
||||||
pw.print(" mQsCustomizing="); pw.println(mQsCustomizing);
|
pw.print(" mQsCustomizing="); pw.println(mQsCustomizing);
|
||||||
pw.print(" mQsExpanded="); pw.println(mQsExpanded);
|
pw.print(" mQsExpanded="); pw.println(mQsExpanded);
|
||||||
|
pw.print(" mBouncerVisible="); pw.println(mBouncerVisible);
|
||||||
pw.print(" mGlobalActionsVisible="); pw.println(mGlobalActionsVisible);
|
pw.print(" mGlobalActionsVisible="); pw.println(mGlobalActionsVisible);
|
||||||
pw.print(" mDirectReplying="); pw.println(mDirectReplying);
|
pw.print(" mDirectReplying="); pw.println(mDirectReplying);
|
||||||
pw.print(" mNavbarColorManagedByIme="); pw.println(mNavbarColorManagedByIme);
|
pw.print(" mNavbarColorManagedByIme="); pw.println(mNavbarColorManagedByIme);
|
||||||
|
|||||||
@@ -222,31 +222,103 @@ public class LightBarControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
// Initial state is set when controller is set
|
// Initial state is set when controller is set
|
||||||
mLightBarController.setNavigationBar(mNavBarController);
|
mLightBarController.setNavigationBar(mNavBarController);
|
||||||
verifyNavBarIconsDarkSetTo(false);
|
verifyNavBarIconsDark(false, /* didFireEvent= */ true);
|
||||||
|
|
||||||
// Changing the color of the transparent scrim has no effect
|
// Changing the color of the transparent scrim has no effect
|
||||||
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_LIGHT);
|
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_LIGHT);
|
||||||
verifyNavBarIconsUnchanged(); // still light
|
verifyNavBarIconsDark(false, /* didFireEvent= */ false);
|
||||||
|
|
||||||
// Showing the notification shade with white scrim requires dark icons
|
// Showing the notification shade with white scrim requires dark icons
|
||||||
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_LIGHT);
|
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
|
// Expanded QS always provides a black background, so icons become light again
|
||||||
mLightBarController.setQsExpanded(true);
|
mLightBarController.setQsExpanded(true);
|
||||||
verifyNavBarIconsDarkSetTo(false);
|
verifyNavBarIconsDark(false, /* didFireEvent= */ true);
|
||||||
|
|
||||||
// Tapping the QS tile to change to dark theme has no effect in this state
|
// Tapping the QS tile to change to dark theme has no effect in this state
|
||||||
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_DARK);
|
mLightBarController.setScrimState(ScrimState.UNLOCKED, 1f, COLORS_DARK);
|
||||||
verifyNavBarIconsUnchanged(); // still light
|
verifyNavBarIconsDark(false, /* didFireEvent= */ false);
|
||||||
|
|
||||||
// collapsing QS in dark mode doesn't affect button color
|
// collapsing QS in dark mode doesn't affect button color
|
||||||
mLightBarController.setQsExpanded(false);
|
mLightBarController.setQsExpanded(false);
|
||||||
verifyNavBarIconsUnchanged(); // still light
|
verifyNavBarIconsDark(false, /* didFireEvent= */ false);
|
||||||
|
|
||||||
// Closing the shade has no affect
|
// Closing the shade has no affect
|
||||||
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_DARK);
|
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() {
|
private void verifyNavBarIconsUnchanged() {
|
||||||
@@ -258,4 +330,14 @@ public class LightBarControllerTest extends SysuiTestCase {
|
|||||||
verify(mNavBarController, never()).setIconsDark(eq(!iconsDark), anyBoolean());
|
verify(mNavBarController, never()).setIconsDark(eq(!iconsDark), anyBoolean());
|
||||||
clearInvocations(mNavBarController);
|
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