Remove NEW_LIGHT_BAR_LOGIC flag

Flag: NEW_LIGHT_BAR_LOGIC
Fixes: 279735475
Test: atest LightBarControllerTest
Change-Id: Ia3e92ebf145cf447e92305436db3f12b9ee88014
This commit is contained in:
Jeff DeCew
2023-07-05 09:14:27 -04:00
parent b42e3150bb
commit 29659a4ae4
6 changed files with 63 additions and 191 deletions

View File

@@ -61,10 +61,6 @@ object Flags {
// TODO(b/254512538): Tracking Bug
val INSTANT_VOICE_REPLY = unreleasedFlag(111, "instant_voice_reply")
// TODO(b/279735475): Tracking Bug
@JvmField
val NEW_LIGHT_BAR_LOGIC = releasedFlag(279735475, "new_light_bar_logic")
/**
* This flag is server-controlled and should stay as [unreleasedFlag] since we never want to
* enable it on release builds.

View File

@@ -38,8 +38,6 @@ import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.settings.DisplayTracker;
@@ -65,7 +63,6 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
private final SysuiDarkIconDispatcher mStatusBarIconController;
private final BatteryController mBatteryController;
private final boolean mUseNewLightBarLogic;
private BiometricUnlockController mBiometricUnlockController;
private LightBarTransitionsController mNavigationBarController;
@@ -123,10 +120,8 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
DarkIconDispatcher darkIconDispatcher,
BatteryController batteryController,
NavigationModeController navModeController,
FeatureFlags featureFlags,
DumpManager dumpManager,
DisplayTracker displayTracker) {
mUseNewLightBarLogic = featureFlags.isEnabled(Flags.NEW_LIGHT_BAR_LOGIC);
mDarkIconColor = ctx.getColor(R.color.dark_mode_icon_color_single_tone);
mLightIconColor = ctx.getColor(R.color.light_mode_icon_color_single_tone);
mStatusBarIconController = (SysuiDarkIconDispatcher) darkIconDispatcher;
@@ -188,51 +183,31 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
final boolean last = mNavigationLight;
mHasLightNavigationBar = isLight(appearance, navigationBarMode,
APPEARANCE_LIGHT_NAVIGATION_BARS);
if (mUseNewLightBarLogic) {
final boolean ignoreScrimForce = mDirectReplying && mNavbarColorManagedByIme;
final boolean darkForScrim = mForceDarkForScrim && !ignoreScrimForce;
final boolean lightForScrim = mForceLightForScrim && !ignoreScrimForce;
final boolean darkForQs = (mQsCustomizing || mQsExpanded) && !mBouncerVisible;
final boolean darkForTop = darkForQs || mGlobalActionsVisible;
mNavigationLight =
((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForTop;
if (DEBUG_NAVBAR) {
mLastNavigationBarAppearanceChangedLog = getLogStringBuilder()
.append("onNavigationBarAppearanceChanged()")
.append(" appearance=").append(appearance)
.append(" nbModeChanged=").append(nbModeChanged)
.append(" navigationBarMode=").append(navigationBarMode)
.append(" navbarColorManagedByIme=").append(navbarColorManagedByIme)
.append(" mHasLightNavigationBar=").append(mHasLightNavigationBar)
.append(" ignoreScrimForce=").append(ignoreScrimForce)
.append(" darkForScrim=").append(darkForScrim)
.append(" lightForScrim=").append(lightForScrim)
.append(" darkForQs=").append(darkForQs)
.append(" darkForTop=").append(darkForTop)
.append(" mNavigationLight=").append(mNavigationLight)
.append(" last=").append(last)
.append(" timestamp=").append(System.currentTimeMillis())
.toString();
if (DEBUG_LOGS) Log.d(TAG, mLastNavigationBarAppearanceChangedLog);
}
} else {
mNavigationLight = mHasLightNavigationBar
&& (mDirectReplying && mNavbarColorManagedByIme || !mForceDarkForScrim)
&& !mQsCustomizing;
if (DEBUG_NAVBAR) {
mLastNavigationBarAppearanceChangedLog = getLogStringBuilder()
.append("onNavigationBarAppearanceChanged()")
.append(" appearance=").append(appearance)
.append(" nbModeChanged=").append(nbModeChanged)
.append(" navigationBarMode=").append(navigationBarMode)
.append(" navbarColorManagedByIme=").append(navbarColorManagedByIme)
.append(" mHasLightNavigationBar=").append(mHasLightNavigationBar)
.append(" mNavigationLight=").append(mNavigationLight)
.append(" last=").append(last)
.append(" timestamp=").append(System.currentTimeMillis())
.toString();
if (DEBUG_LOGS) Log.d(TAG, mLastNavigationBarAppearanceChangedLog);
}
final boolean ignoreScrimForce = mDirectReplying && mNavbarColorManagedByIme;
final boolean darkForScrim = mForceDarkForScrim && !ignoreScrimForce;
final boolean lightForScrim = mForceLightForScrim && !ignoreScrimForce;
final boolean darkForQs = (mQsCustomizing || mQsExpanded) && !mBouncerVisible;
final boolean darkForTop = darkForQs || mGlobalActionsVisible;
mNavigationLight =
((mHasLightNavigationBar && !darkForScrim) || lightForScrim) && !darkForTop;
if (DEBUG_NAVBAR) {
mLastNavigationBarAppearanceChangedLog = getLogStringBuilder()
.append("onNavigationBarAppearanceChanged()")
.append(" appearance=").append(appearance)
.append(" nbModeChanged=").append(nbModeChanged)
.append(" navigationBarMode=").append(navigationBarMode)
.append(" navbarColorManagedByIme=").append(navbarColorManagedByIme)
.append(" mHasLightNavigationBar=").append(mHasLightNavigationBar)
.append(" ignoreScrimForce=").append(ignoreScrimForce)
.append(" darkForScrim=").append(darkForScrim)
.append(" lightForScrim=").append(lightForScrim)
.append(" darkForQs=").append(darkForQs)
.append(" darkForTop=").append(darkForTop)
.append(" mNavigationLight=").append(mNavigationLight)
.append(" last=").append(last)
.append(" timestamp=").append(System.currentTimeMillis())
.toString();
if (DEBUG_LOGS) Log.d(TAG, mLastNavigationBarAppearanceChangedLog);
}
if (mNavigationLight != last) {
updateNavigation();
@@ -311,66 +286,39 @@ 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;
mBouncerVisible =
scrimState == ScrimState.BOUNCER || scrimState == ScrimState.BOUNCER_SCRIMMED;
final boolean forceForScrim = mBouncerVisible
|| scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD;
final boolean scrimColorIsLight = scrimInFrontColor.supportsDarkText();
boolean bouncerVisibleLast = mBouncerVisible;
boolean forceDarkForScrimLast = mForceDarkForScrim;
boolean forceLightForScrimLast = mForceLightForScrim;
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 (mBouncerVisible != bouncerVisibleLast) {
reevaluate();
} else if (mHasLightNavigationBar) {
if (mForceDarkForScrim != forceDarkForScrimLast) reevaluate();
} else {
if (mForceLightForScrim != forceLightForScrimLast) reevaluate();
}
if (DEBUG_NAVBAR) {
mLastSetScrimStateLog = getLogStringBuilder()
.append("setScrimState()")
.append(" scrimState=").append(scrimState)
.append(" scrimBehindAlpha=").append(scrimBehindAlpha)
.append(" scrimInFrontColor=").append(scrimInFrontColor)
.append(" forceForScrim=").append(forceForScrim)
.append(" scrimColorIsLight=").append(scrimColorIsLight)
.append(" mHasLightNavigationBar=").append(mHasLightNavigationBar)
.append(" mBouncerVisible=").append(mBouncerVisible)
.append(" mForceDarkForScrim=").append(mForceDarkForScrim)
.append(" mForceLightForScrim=").append(mForceLightForScrim)
.append(" timestamp=").append(System.currentTimeMillis())
.toString();
if (DEBUG_LOGS) Log.d(TAG, mLastSetScrimStateLog);
}
mForceDarkForScrim = forceForScrim && !scrimColorIsLight;
mForceLightForScrim = forceForScrim && scrimColorIsLight;
if (mBouncerVisible != bouncerVisibleLast) {
reevaluate();
} else if (mHasLightNavigationBar) {
if (mForceDarkForScrim != forceDarkForScrimLast) reevaluate();
} else {
boolean forceDarkForScrimLast = mForceDarkForScrim;
// For BOUNCER/BOUNCER_SCRIMMED cases, we assume that alpha is always below threshold.
// This enables IMEs to control the navigation bar color.
// For other cases, scrim should be able to veto the light navigation bar.
// NOTE: this was also wrong for S and has been removed in the new logic.
mForceDarkForScrim = scrimState != ScrimState.BOUNCER
&& scrimState != ScrimState.BOUNCER_SCRIMMED
&& scrimBehindAlpha >= NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD
&& !scrimInFrontColor.supportsDarkText();
if (mHasLightNavigationBar && (mForceDarkForScrim != forceDarkForScrimLast)) {
reevaluate();
}
if (DEBUG_NAVBAR) {
mLastSetScrimStateLog = getLogStringBuilder()
.append("setScrimState()")
.append(" scrimState=").append(scrimState)
.append(" scrimBehindAlpha=").append(scrimBehindAlpha)
.append(" scrimInFrontColor=").append(scrimInFrontColor)
.append(" mHasLightNavigationBar=").append(mHasLightNavigationBar)
.append(" mForceDarkForScrim=").append(mForceDarkForScrim)
.append(" timestamp=").append(System.currentTimeMillis())
.toString();
if (DEBUG_LOGS) Log.d(TAG, mLastSetScrimStateLog);
}
if (mForceLightForScrim != forceLightForScrimLast) reevaluate();
}
if (DEBUG_NAVBAR) {
mLastSetScrimStateLog = getLogStringBuilder()
.append("setScrimState()")
.append(" scrimState=").append(scrimState)
.append(" scrimBehindAlpha=").append(scrimBehindAlpha)
.append(" scrimInFrontColor=").append(scrimInFrontColor)
.append(" forceForScrim=").append(forceForScrim)
.append(" scrimColorIsLight=").append(scrimColorIsLight)
.append(" mHasLightNavigationBar=").append(mHasLightNavigationBar)
.append(" mBouncerVisible=").append(mBouncerVisible)
.append(" mForceDarkForScrim=").append(mForceDarkForScrim)
.append(" mForceLightForScrim=").append(mForceLightForScrim)
.append(" timestamp=").append(System.currentTimeMillis())
.toString();
if (DEBUG_LOGS) Log.d(TAG, mLastSetScrimStateLog);
}
}
@@ -498,7 +446,6 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
private final DarkIconDispatcher mDarkIconDispatcher;
private final BatteryController mBatteryController;
private final NavigationModeController mNavModeController;
private final FeatureFlags mFeatureFlags;
private final DumpManager mDumpManager;
private final DisplayTracker mDisplayTracker;
@@ -507,14 +454,12 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
DarkIconDispatcher darkIconDispatcher,
BatteryController batteryController,
NavigationModeController navModeController,
FeatureFlags featureFlags,
DumpManager dumpManager,
DisplayTracker displayTracker) {
mDarkIconDispatcher = darkIconDispatcher;
mBatteryController = batteryController;
mNavModeController = navModeController;
mFeatureFlags = featureFlags;
mDumpManager = dumpManager;
mDisplayTracker = displayTracker;
}
@@ -522,7 +467,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
/** Create an {@link LightBarController} */
public LightBarController create(Context context) {
return new LightBarController(context, mDarkIconDispatcher, mBatteryController,
mNavModeController, mFeatureFlags, mDumpManager, mDisplayTracker);
mNavModeController, mDumpManager, mDisplayTracker);
}
}
}

View File

@@ -56,8 +56,6 @@ import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.keyguard.shared.model.ScrimAlpha;
@@ -249,8 +247,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
private int mScrimsVisibility;
private final TriConsumer<ScrimState, Float, GradientColors> mScrimStateListener;
private final LargeScreenShadeInterpolator mLargeScreenShadeInterpolator;
private final FeatureFlags mFeatureFlags;
private final boolean mUseNewLightBarLogic;
private Consumer<Integer> mScrimVisibleListener;
private boolean mBlankScreen;
private boolean mScreenBlankingCallbackCalled;
@@ -303,12 +299,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
PrimaryBouncerToGoneTransitionViewModel primaryBouncerToGoneTransitionViewModel,
KeyguardTransitionInteractor keyguardTransitionInteractor,
@Main CoroutineDispatcher mainDispatcher,
LargeScreenShadeInterpolator largeScreenShadeInterpolator,
FeatureFlags featureFlags) {
LargeScreenShadeInterpolator largeScreenShadeInterpolator) {
mScrimStateListener = lightBarController::setScrimState;
mLargeScreenShadeInterpolator = largeScreenShadeInterpolator;
mFeatureFlags = featureFlags;
mUseNewLightBarLogic = featureFlags.isEnabled(Flags.NEW_LIGHT_BAR_LOGIC);
mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
mKeyguardStateController = keyguardStateController;
@@ -1153,13 +1146,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
if (mClipsQsScrim && mQsBottomVisible) {
alpha = mNotificationsAlpha;
}
if (mUseNewLightBarLogic) {
mScrimStateListener.accept(mState, alpha, mColors);
} else {
// NOTE: This wasn't wrong, but it implied that each scrim might have different colors,
// when in fact they all share the same GradientColors instance, which we own.
mScrimStateListener.accept(mState, alpha, mScrimInFront.getColors());
}
mScrimStateListener.accept(mState, alpha, mColors);
}
private void dispatchScrimsVisible() {
@@ -1483,15 +1470,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
int accent = Utils.getColorAccent(mScrimBehind.getContext()).getDefaultColor();
mColors.setMainColor(background);
mColors.setSecondaryColor(accent);
if (mUseNewLightBarLogic) {
final boolean isBackgroundLight = !ContrastColorUtil.isColorDark(background);
mColors.setSupportsDarkText(isBackgroundLight);
} else {
// NOTE: This was totally backward, but LightBarController was flipping it back.
// There may be other consumers of this which would struggle though
mColors.setSupportsDarkText(
ColorUtils.calculateContrast(mColors.getMainColor(), Color.WHITE) > 4.5);
}
final boolean isBackgroundLight = !ContrastColorUtil.isColorDark(background);
mColors.setSupportsDarkText(isBackgroundLight);
int surface = Utils.getColorAttr(mScrimBehind.getContext(),
com.android.internal.R.attr.materialColorSurface).getDefaultColor();

View File

@@ -22,7 +22,6 @@ import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARE
import static junit.framework.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -45,8 +44,6 @@ import com.android.internal.util.ContrastColorUtil;
import com.android.internal.view.AppearanceRegion;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.FakeDisplayTracker;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -65,20 +62,13 @@ public class LightBarControllerTest extends SysuiTestCase {
private static final GradientColors COLORS_LIGHT = makeColors(Color.WHITE);
private static final GradientColors COLORS_DARK = makeColors(Color.BLACK);
private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();
private LightBarTransitionsController mLightBarTransitionsController;
private LightBarTransitionsController mNavBarController;
private SysuiDarkIconDispatcher mStatusBarIconController;
private LightBarController mLightBarController;
/** Allow testing with NEW_LIGHT_BAR_LOGIC flag in different states */
protected boolean testNewLightBarLogic() {
return false;
}
@Before
public void setup() {
mFeatureFlags.set(Flags.NEW_LIGHT_BAR_LOGIC, testNewLightBarLogic());
mStatusBarIconController = mock(SysuiDarkIconDispatcher.class);
mNavBarController = mock(LightBarTransitionsController.class);
when(mNavBarController.supportsIconTintForNavMode(anyInt())).thenReturn(true);
@@ -90,7 +80,6 @@ public class LightBarControllerTest extends SysuiTestCase {
mStatusBarIconController,
mock(BatteryController.class),
mock(NavigationModeController.class),
mFeatureFlags,
mock(DumpManager.class),
new FakeDisplayTracker(mContext));
}
@@ -211,8 +200,6 @@ public class LightBarControllerTest extends SysuiTestCase {
@Test
public void validateNavBarChangesUpdateIcons() {
assumeTrue(testNewLightBarLogic()); // Only run in the new suite
// On the launcher in dark mode buttons are light
mLightBarController.setScrimState(ScrimState.UNLOCKED, 0f, COLORS_DARK);
mLightBarController.onNavigationBarAppearanceChanged(
@@ -251,8 +238,6 @@ public class LightBarControllerTest extends SysuiTestCase {
@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(
@@ -287,8 +272,6 @@ public class LightBarControllerTest extends SysuiTestCase {
@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(

View File

@@ -1,28 +0,0 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar.phone
import androidx.test.filters.SmallTest
import com.android.systemui.flags.Flags.NEW_LIGHT_BAR_LOGIC
/**
* This file only needs to live as long as [NEW_LIGHT_BAR_LOGIC] does. When we delete that flag, we
* can roll this back into the old test.
*/
@SmallTest
class LightBarControllerWithNewLogicTest : LightBarControllerTest() {
override fun testNewLightBarLogic(): Boolean = true
}

View File

@@ -64,7 +64,6 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.keyguard.shared.model.KeyguardState;
@@ -142,7 +141,6 @@ public class ScrimControllerTest extends SysuiTestCase {
// TODO(b/204991468): Use a real PanelExpansionStateManager object once this bug is fixed. (The
// event-dispatch-on-registration pattern caused some of these unit tests to fail.)
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@Mock private FeatureFlags mFeatureFlags;
private static class AnimatorListener implements Animator.AnimatorListener {
private int mNumStarts;
@@ -280,8 +278,7 @@ public class ScrimControllerTest extends SysuiTestCase {
mPrimaryBouncerToGoneTransitionViewModel,
mKeyguardTransitionInteractor,
mMainDispatcher,
mLinearLargeScreenShadeInterpolator,
mFeatureFlags);
mLinearLargeScreenShadeInterpolator);
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
mScrimController.setAnimatorListener(mAnimatorListener);
@@ -974,8 +971,7 @@ public class ScrimControllerTest extends SysuiTestCase {
mPrimaryBouncerToGoneTransitionViewModel,
mKeyguardTransitionInteractor,
mMainDispatcher,
mLinearLargeScreenShadeInterpolator,
mFeatureFlags);
mLinearLargeScreenShadeInterpolator);
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
mScrimController.setAnimatorListener(mAnimatorListener);