Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +15 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading Loading @@ -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); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java +89 −7 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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); } } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +15 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading Loading @@ -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); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarControllerTest.java +89 −7 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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); } } }