Merge "Don't blend front scrim on AOD" into tm-dev

This commit is contained in:
Matt Pietal
2022-05-13 18:05:43 +00:00
committed by Android (Google) Code Review
4 changed files with 41 additions and 3 deletions

View File

@@ -58,6 +58,7 @@ public class ScrimView extends View {
private Drawable mDrawable;
private PorterDuffColorFilter mColorFilter;
private int mTintColor;
private boolean mBlendWithMainColor = true;
private Runnable mChangeRunnable;
private Executor mChangeRunnableExecutor;
private Executor mExecutor;
@@ -191,6 +192,19 @@ public class ScrimView extends View {
setTint(color, false);
}
/**
* The call to {@link #setTint} will blend with the main color, with the amount
* determined by the alpha of the tint. Set to false to avoid this blend.
*/
public void setBlendWithMainColor(boolean blend) {
mBlendWithMainColor = blend;
}
/** @return true if blending tint color with main color */
public boolean shouldBlendWithMainColor() {
return mBlendWithMainColor;
}
/**
* Tints this view, optionally animating it.
* @param color The color.
@@ -211,8 +225,11 @@ public class ScrimView extends View {
// Optimization to blend colors and avoid a color filter
ScrimDrawable drawable = (ScrimDrawable) mDrawable;
float tintAmount = Color.alpha(mTintColor) / 255f;
int mainTinted = ColorUtils.blendARGB(mColors.getMainColor(), mTintColor,
tintAmount);
int mainTinted = mTintColor;
if (mBlendWithMainColor) {
mainTinted = ColorUtils.blendARGB(mColors.getMainColor(), mTintColor, tintAmount);
}
drawable.setColor(mainTinted, animated);
} else {
boolean hasAlpha = Color.alpha(mTintColor) != 0;

View File

@@ -402,6 +402,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
mScrimBehind.setFocusable(!state.isLowPowerState());
mNotificationsScrim.setFocusable(!state.isLowPowerState());
mScrimInFront.setBlendWithMainColor(state.shouldBlendWithMainColor());
// Cancel blanking transitions that were pending before we requested a new state
if (mPendingFrameCallback != null) {
mScrimBehind.removeCallbacks(mPendingFrameCallback);

View File

@@ -203,6 +203,11 @@ public enum ScrimState {
public boolean isLowPowerState() {
return true;
}
@Override
public boolean shouldBlendWithMainColor() {
return false;
}
},
/**
@@ -325,6 +330,13 @@ public enum ScrimState {
public void prepare(ScrimState previousState) {
}
/**
* Whether a particular state should enable blending with extracted theme colors.
*/
public boolean shouldBlendWithMainColor() {
return true;
}
public float getFrontAlpha() {
return mFrontAlpha;
}
@@ -422,4 +434,4 @@ public enum ScrimState {
public void setClipQsScrim(boolean clipsQsScrim) {
mClipQsScrim = clipsQsScrim;
}
}
}

View File

@@ -1490,6 +1490,13 @@ public class ScrimControllerTest extends SysuiTestCase {
assertAlphaAfterExpansion(mNotificationsScrim, 0f, expansion);
}
@Test
public void aodStateSetsFrontScrimToNotBlend() {
mScrimController.transitionTo(ScrimState.AOD);
Assert.assertFalse("Front scrim should not blend with main color",
mScrimInFront.shouldBlendWithMainColor());
}
private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
mScrimController.setRawPanelExpansionFraction(expansion);
finishAnimationsImmediately();