Merge "Dual tone shade implementation" into sc-dev

This commit is contained in:
Lucas Dupin
2021-04-07 20:07:41 +00:00
committed by Android (Google) Code Review
9 changed files with 206 additions and 52 deletions

View File

@@ -24,7 +24,9 @@ import android.annotation.Nullable;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Xfermode;
import android.graphics.drawable.Drawable;
import android.view.animation.DecelerateInterpolator;
@@ -44,6 +46,9 @@ public class ScrimDrawable extends Drawable {
private int mMainColor;
private ValueAnimator mColorAnimation;
private int mMainColorTo;
private float mCornerRadius;
private Rect mBounds;
private ConcaveInfo mConcaveInfo;
public ScrimDrawable() {
mPaint = new Paint();
@@ -127,15 +132,67 @@ public class ScrimDrawable extends Drawable {
return PixelFormat.TRANSLUCENT;
}
/**
* Enable drawable shape to have rounded corners with provided radius
*/
public void setRoundedCorners(float radius) {
mCornerRadius = radius;
}
/**
* Make bottom edge concave with provided corner radius
*/
public void setBottomEdgeConcave(float radius) {
// only rounding top corners for clip out path
float[] cornerRadii = new float[]{radius, radius, radius, radius, 0, 0, 0, 0};
mConcaveInfo = new ConcaveInfo(radius, cornerRadii);
}
@Override
public void draw(@NonNull Canvas canvas) {
mPaint.setColor(mMainColor);
mPaint.setAlpha(mAlpha);
canvas.drawRect(getBounds(), mPaint);
if (mConcaveInfo != null) {
drawConcave(canvas);
}
canvas.drawRoundRect(getBounds().left, getBounds().top, getBounds().right,
getBounds().bottom + mCornerRadius,
/* x radius*/ mCornerRadius, /* y radius*/ mCornerRadius, mPaint);
}
private void drawConcave(Canvas canvas) {
// checking if width of clip out path needs to change
if (mBounds == null
|| getBounds().right != mBounds.right
|| getBounds().left != mBounds.left) {
mConcaveInfo.mPath.reset();
float left = getBounds().left;
float right = getBounds().right;
float top = 0f;
float bottom = mConcaveInfo.mPathOverlap;
mConcaveInfo.mPath.addRoundRect(left, top, right, bottom,
mConcaveInfo.mCornerRadii, Path.Direction.CW);
}
mBounds = getBounds();
int translation = (int) (mBounds.bottom - mConcaveInfo.mPathOverlap);
canvas.translate(0, translation);
canvas.clipOutPath(mConcaveInfo.mPath);
canvas.translate(0, -translation);
}
@VisibleForTesting
public int getMainColor() {
return mMainColor;
}
private static class ConcaveInfo {
private final float mPathOverlap;
private final float[] mCornerRadii;
private final Path mPath = new Path();
ConcaveInfo(float pathOverlap, float[] cornerRadii) {
mPathOverlap = pathOverlap;
mCornerRadii = cornerRadii;
}
}
}

View File

@@ -51,6 +51,14 @@
sysui:ignoreRightInset="true"
/>
<com.android.systemui.statusbar.ScrimView
android:id="@+id/scrim_notifications"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:importantForAccessibility="no"
sysui:ignoreRightInset="true"
/>
<com.android.systemui.statusbar.LightRevealScrim
android:id="@+id/light_reveal_scrim"
android:layout_width="match_parent"

View File

@@ -718,6 +718,7 @@
<item name="keyguard_clock_line_spacing_scale_burmese" type="dimen" format="float">1</item>
<item name="scrim_behind_alpha" format="float" type="dimen">0.62</item>
<dimen name="notification_scrim_corner_radius">32dp</dimen>
<!-- The minimum amount the user needs to swipe to go to the camera / phone. -->
<dimen name="keyguard_min_swipe_amount">110dp</dimen>

View File

@@ -26,17 +26,18 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.DimenRes;
import androidx.core.graphics.ColorUtils;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.colorextraction.drawable.ScrimDrawable;
import com.android.systemui.R;
import java.util.concurrent.Executor;
@@ -47,6 +48,10 @@ import java.util.concurrent.Executor;
* need to be careful to synchronize when necessary.
*/
public class ScrimView extends View {
@DimenRes
private static final int CORNER_RADIUS = R.dimen.notification_scrim_corner_radius;
private final Object mColorLock = new Object();
@GuardedBy("mColorLock")
@@ -260,4 +265,27 @@ public class ScrimView extends View {
mExecutor.execute(r);
}
}
/**
* Make bottom edge concave so overlap between layers is not visible for alphas between 0 and 1
* @return height of concavity
*/
public float enableBottomEdgeConcave() {
if (mDrawable instanceof ScrimDrawable) {
float radius = getResources().getDimensionPixelSize(CORNER_RADIUS);
((ScrimDrawable) mDrawable).setBottomEdgeConcave(radius);
return radius;
}
return 0;
}
/**
* Enable view to have rounded corners with radius of {@link #CORNER_RADIUS}
*/
public void enableRoundedCorners() {
if (mDrawable instanceof ScrimDrawable) {
int radius = getResources().getDimensionPixelSize(CORNER_RADIUS);
((ScrimDrawable) mDrawable).setRoundedCorners(radius);
}
}
}

View File

@@ -2002,11 +2002,23 @@ public class NotificationPanelViewController extends PanelViewController {
float qsExpansionFraction = getQsExpansionFraction();
mQs.setQsExpansion(qsExpansionFraction, getHeaderTranslation());
mMediaHierarchyManager.setQsExpansion(qsExpansionFraction);
mScrimController.setQsExpansion(qsExpansionFraction);
mScrimController.setQsPosition(qsExpansionFraction,
calculateQsBottomPosition(qsExpansionFraction));
mNotificationStackScrollLayoutController.setQsExpansionFraction(qsExpansionFraction);
mDepthController.setQsPanelExpansion(qsExpansionFraction);
}
private int calculateQsBottomPosition(float qsExpansionFraction) {
int qsBottomY = (int) getHeaderTranslation() + mQs.getQsMinExpansionHeight();
if (qsExpansionFraction != 0.0) {
qsBottomY = (int) MathUtils.lerp(
qsBottomY, mQs.getDesiredHeight(), qsExpansionFraction);
}
// to account for shade overshooting animation, see setSectionPadding method
if (mSectionPadding > 0) qsBottomY += mSectionPadding;
return qsBottomY;
}
private String determineAccessibilityPaneTitle() {
if (mQs != null && mQs.isCustomizing()) {
return mResources.getString(R.string.accessibility_desc_quick_settings_edit);

View File

@@ -24,7 +24,6 @@ import android.animation.ValueAnimator;
import android.annotation.IntDef;
import android.app.AlarmManager;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Trace;
import android.util.Log;
@@ -49,7 +48,6 @@ import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.BlurUtils;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.notification.stack.ViewState;
@@ -142,6 +140,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
private ScrimState mState = ScrimState.UNINITIALIZED;
private ScrimView mScrimInFront;
private ScrimView mNotificationsScrim;
private ScrimView mScrimBehind;
@Nullable
private ScrimView mScrimForBubble;
@@ -156,7 +155,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
private final KeyguardVisibilityCallback mKeyguardVisibilityCallback;
private final Handler mHandler;
private final Executor mMainExecutor;
private final BlurUtils mBlurUtils;
private GradientColors mColors;
private boolean mNeedsDrawableColorUpdate;
@@ -180,6 +178,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
private float mInFrontAlpha = NOT_INITIALIZED;
private float mBehindAlpha = NOT_INITIALIZED;
private float mNotificationsAlpha = NOT_INITIALIZED;
private float mBubbleAlpha = NOT_INITIALIZED;
private int mInFrontTint;
@@ -209,12 +208,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
AlarmManager alarmManager, KeyguardStateController keyguardStateController,
DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler,
KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager,
BlurUtils blurUtils, ConfigurationController configurationController,
ConfigurationController configurationController,
FeatureFlags featureFlags, @Main Executor mainExecutor) {
mScrimStateListener = lightBarController::setScrimState;
mDefaultScrimAlpha = featureFlags.isShadeOpaque() ? BUSY_SCRIM_ALPHA : GAR_SCRIM_ALPHA;
ScrimState.BUBBLE_EXPANDED.setBubbleAlpha(BUBBLE_SCRIM_ALPHA);
mBlurUtils = blurUtils;
mKeyguardStateController = keyguardStateController;
mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen();
@@ -259,13 +257,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
/**
* Attach the controller to the supplied views.
*/
public void attachViews(
ScrimView scrimBehind, ScrimView scrimInFront, @Nullable ScrimView scrimForBubble) {
mScrimBehind = scrimBehind;
public void attachViews(ScrimView behindScrim, ScrimView notificationsScrim,
ScrimView scrimInFront, @Nullable ScrimView scrimForBubble) {
mNotificationsScrim = notificationsScrim;
mScrimBehind = behindScrim;
mScrimInFront = scrimInFront;
mScrimForBubble = scrimForBubble;
updateThemeColors();
mNotificationsScrim.enableRoundedCorners();
if (mScrimBehindChangeRunnable != null) {
mScrimBehind.setChangeRunnable(mScrimBehindChangeRunnable, mMainExecutor);
mScrimBehindChangeRunnable = null;
@@ -280,6 +281,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
mScrimBehind.setDefaultFocusHighlightEnabled(false);
mNotificationsScrim.setDefaultFocusHighlightEnabled(false);
mScrimInFront.setDefaultFocusHighlightEnabled(false);
if (mScrimForBubble != null) {
mScrimForBubble.setDefaultFocusHighlightEnabled(false);
@@ -344,6 +346,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
// We need to disable focus otherwise AOD would end up with a gray overlay.
mScrimInFront.setFocusable(!state.isLowPowerState());
mScrimBehind.setFocusable(!state.isLowPowerState());
mNotificationsScrim.setFocusable(!state.isLowPowerState());
// Cancel blanking transitions that were pending before we requested a new state
if (mPendingFrameCallback != null) {
@@ -484,18 +487,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
/**
* Current state of the QuickSettings expansion when pulling it from the top.
* Current state of the QuickSettings when pulling it from the top.
*
* @param fraction From 0 to 1 where 0 means collapsed and 1 expanded.
* @param expansionFraction From 0 to 1 where 0 means collapsed and 1 expanded.
* @param qsPanelBottomY absolute Y position of qs panel bottom
*/
public void setQsExpansion(float fraction) {
if (isNaN(fraction)) {
public void setQsPosition(float expansionFraction, int qsPanelBottomY) {
if (isNaN(expansionFraction)) {
return;
}
if (mQsExpansion != fraction) {
mQsExpansion = fraction;
shiftNotificationsScrim(qsPanelBottomY);
updateNotificationsScrimAlpha(qsPanelBottomY);
if (mQsExpansion != expansionFraction) {
mQsExpansion = expansionFraction;
Log.d(TAG, "set qs fraction");
boolean relevantState = (mState == ScrimState.SHADE_LOCKED
|| mState == ScrimState.KEYGUARD
|| mState == ScrimState.PULSING
@@ -507,6 +512,32 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
}
private void shiftNotificationsScrim(int qsPanelBottomY) {
if (qsPanelBottomY > 0) {
mNotificationsScrim.setTranslationY(qsPanelBottomY);
} else {
mNotificationsScrim.setTranslationY(0);
}
}
private void updateNotificationsScrimAlpha(int qsPanelBottomY) {
float newAlpha = 0;
if (qsPanelBottomY > 0) {
float interpolator = 0;
if (mState == ScrimState.UNLOCKED || mState == ScrimState.SHADE_LOCKED) {
interpolator = getInterpolatedFraction();
} else {
interpolator = mQsExpansion;
}
newAlpha = MathUtils.lerp(0, 1, interpolator);
}
if (newAlpha != mNotificationsAlpha) {
mNotificationsAlpha = newAlpha;
// update alpha without animating
mNotificationsScrim.setViewAlpha(newAlpha);
}
}
private void setOrAdaptCurrentAnimation(@Nullable View scrim) {
if (scrim == null) {
return;
@@ -575,6 +606,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
return;
}
setOrAdaptCurrentAnimation(mScrimBehind);
setOrAdaptCurrentAnimation(mNotificationsScrim);
setOrAdaptCurrentAnimation(mScrimInFront);
setOrAdaptCurrentAnimation(mScrimForBubble);
dispatchScrimState(mScrimBehind.getViewAlpha());
@@ -590,14 +622,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
}
/**
* Sets the given drawable as the background of the scrim that shows up behind the
* notifications.
*/
public void setScrimBehindDrawable(Drawable drawable) {
mScrimBehind.setDrawable(drawable);
}
/**
* Sets the front scrim opacity in AOD so it's not as bright.
* <p>
@@ -667,10 +691,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
mNeedsDrawableColorUpdate = false;
// Only animate scrim color if the scrim view is actually visible
boolean animateScrimInFront = mScrimInFront.getViewAlpha() != 0 && !mBlankScreen;
boolean animateScrimBehind = mScrimBehind.getViewAlpha() != 0 && !mBlankScreen;
boolean animateBehindScrim = mScrimBehind.getViewAlpha() != 0 && !mBlankScreen;
boolean animateScrimNotifications = mNotificationsScrim.getViewAlpha() != 0
&& !mBlankScreen;
mScrimInFront.setColors(mColors, animateScrimInFront);
mScrimBehind.setColors(mColors, animateScrimBehind);
mScrimBehind.setColors(mColors, animateScrimNotifications);
mNotificationsScrim.setColors(mColors, animateScrimNotifications);
dispatchScrimState(mScrimBehind.getViewAlpha());
}
@@ -687,6 +714,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
setScrimAlpha(mScrimInFront, mInFrontAlpha);
setScrimAlpha(mScrimBehind, mBehindAlpha);
setScrimAlpha(mNotificationsScrim, mNotificationsAlpha);
if (mScrimForBubble != null) {
boolean animateScrimForBubble = mScrimForBubble.getViewAlpha() != 0 && !mBlankScreen;
@@ -744,7 +772,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
if (scrim == mScrimInFront) {
return "front_scrim";
} else if (scrim == mScrimBehind) {
return "back_scrim";
return "behind_scrim";
} else if (scrim == mNotificationsScrim) {
return "notifications_scrim";
} else if (scrim == mScrimForBubble) {
return "bubble_scrim";
}
@@ -817,6 +847,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
return mInFrontAlpha;
} else if (scrim == mScrimBehind) {
return mBehindAlpha;
} else if (scrim == mNotificationsScrim) {
return mNotificationsAlpha;
} else if (scrim == mScrimForBubble) {
return mBubbleAlpha;
} else {
@@ -829,6 +861,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
return mInFrontTint;
} else if (scrim == mScrimBehind) {
return mBehindTint;
} else if (scrim == mNotificationsScrim) {
return Color.TRANSPARENT;
} else if (scrim == mScrimForBubble) {
return mBubbleTint;
} else {
@@ -858,8 +892,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
if (isAnimating(mScrimBehind)
|| isAnimating(mScrimInFront)
|| isAnimating(mScrimForBubble)) {
|| isAnimating(mNotificationsScrim)
|| isAnimating(mScrimInFront)
|| isAnimating(mScrimForBubble)) {
if (callback != null && callback != mCallback) {
// Since we only notify the callback that we're finished once everything has
// finished, we need to make sure that any changing callbacks are also invoked
@@ -884,7 +919,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
// At the end of the animation we need to remove the tint.
if (mState == ScrimState.UNLOCKED) {
mInFrontTint = Color.TRANSPARENT;
mBehindTint = Color.TRANSPARENT;
mBehindTint = mState.getBehindTint();
mBubbleTint = Color.TRANSPARENT;
updateScrimColor(mScrimInFront, mInFrontAlpha, mInFrontTint);
updateScrimColor(mScrimBehind, mBehindAlpha, mBehindTint);
@@ -996,12 +1031,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
mScrimBehind.postOnAnimationDelayed(callback, 32 /* delayMillis */);
}
public int getBackgroundColor() {
int color = mColors.getMainColor();
return Color.argb((int) (mScrimBehind.getViewAlpha() * Color.alpha(color)),
Color.red(color), Color.green(color), Color.blue(color));
}
public void setScrimBehindChangeRunnable(Runnable changeRunnable) {
// TODO: remove this. This is necessary because of an order-of-operations limitation.
// The fix is to move more of these class into @StatusBarScope
@@ -1047,7 +1076,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
pw.print(" tint=0x");
pw.println(Integer.toHexString(mScrimInFront.getTint()));
pw.print(" backScrim:");
pw.print(" behindScrim:");
pw.print(" viewAlpha=");
pw.print(mScrimBehind.getViewAlpha());
pw.print(" alpha=");
@@ -1055,6 +1084,14 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
pw.print(" tint=0x");
pw.println(Integer.toHexString(mScrimBehind.getTint()));
pw.print(" notificationsScrim:");
pw.print(" viewAlpha=");
pw.print(mNotificationsScrim.getViewAlpha());
pw.print(" alpha=");
pw.print(mNotificationsAlpha);
pw.print(" tint=0x");
pw.println(Integer.toHexString(mNotificationsScrim.getTint()));
pw.print(" bubbleScrim:");
pw.print(" viewAlpha=");
pw.print(mScrimForBubble.getViewAlpha());

View File

@@ -129,6 +129,13 @@ public enum ScrimState {
mBehindAlpha = mDefaultScrimAlpha;
mBubbleAlpha = 0f;
mFrontAlpha = 0f;
mBehindTint = Color.BLACK;
}
// to make sure correct color is returned before "prepare" is called
@Override
public int getBehindTint() {
return Color.BLACK;
}
},
@@ -228,7 +235,7 @@ public enum ScrimState {
mAnimateChange = !mLaunchingAffordanceWithPreview;
mFrontTint = Color.TRANSPARENT;
mBehindTint = Color.TRANSPARENT;
mBehindTint = Color.BLACK;
mBubbleTint = Color.TRANSPARENT;
mBlankScreen = false;

View File

@@ -1215,6 +1215,8 @@ public class StatusBar extends SystemUI implements DemoMode,
});
ScrimView scrimBehind = mNotificationShadeWindowView.findViewById(R.id.scrim_behind);
ScrimView notificationsScrim = mNotificationShadeWindowView
.findViewById(R.id.scrim_notifications);
ScrimView scrimInFront = mNotificationShadeWindowView.findViewById(R.id.scrim_in_front);
ScrimView scrimForBubble = mBubblesManagerOptional.isPresent()
? mBubblesManagerOptional.get().getScrimForBubble() : null;
@@ -1223,7 +1225,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible);
mLockscreenLockIconController.onScrimVisibilityChanged(scrimsVisible);
});
mScrimController.attachViews(scrimBehind, scrimInFront, scrimForBubble);
mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront, scrimForBubble);
mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
updateLightRevealScrimVisibility();

View File

@@ -49,7 +49,6 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.DejankUtils;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.BlurUtils;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -79,6 +78,7 @@ public class ScrimControllerTest extends SysuiTestCase {
private ScrimController mScrimController;
private ScrimView mScrimBehind;
private ScrimView mNotificationsScrim;
private ScrimView mScrimInFront;
private ScrimView mScrimForBubble;
private ScrimState mScrimState;
@@ -104,8 +104,6 @@ public class ScrimControllerTest extends SysuiTestCase {
@Mock
private DockManager mDockManager;
@Mock
private BlurUtils mBlurUtils;
@Mock
private ConfigurationController mConfigurationController;
@Mock
private FeatureFlags mFeatureFlags;
@@ -163,6 +161,7 @@ public class ScrimControllerTest extends SysuiTestCase {
mScrimController.onPreDraw();
// Force finish all animations.
mLooper.processAllMessages();
endAnimation(mNotificationsScrim);
endAnimation(mScrimBehind);
endAnimation(mScrimInFront);
endAnimation(mScrimForBubble);
@@ -189,6 +188,7 @@ public class ScrimControllerTest extends SysuiTestCase {
mScrimBehind = spy(new ScrimView(getContext()));
mScrimInFront = new ScrimView(getContext());
mScrimForBubble = new ScrimView(getContext());
mNotificationsScrim = new ScrimView(getContext());
mAlwaysOnEnabled = true;
mLooper = TestableLooper.get(this);
DejankUtils.setImmediate(true);
@@ -201,7 +201,6 @@ public class ScrimControllerTest extends SysuiTestCase {
when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled);
when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true);
when(mBlurUtils.supportsBlursOnWindows()).thenReturn(true);
doAnswer((Answer<Void>) invocation -> {
mScrimState = invocation.getArgument(0);
@@ -222,10 +221,11 @@ public class ScrimControllerTest extends SysuiTestCase {
mScrimController = new ScrimController(mLightBarController,
mDozeParamenters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder,
new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor,
mDockManager, mBlurUtils, mConfigurationController, mFeatureFlags,
mDockManager, mConfigurationController, mFeatureFlags,
new FakeExecutor(new FakeSystemClock()));
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
mScrimController.attachViews(mScrimBehind, mScrimInFront, mScrimForBubble);
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront,
mScrimForBubble);
mScrimController.setAnimatorListener(mAnimatorListener);
mScrimController.setHasBackdrop(false);
@@ -264,7 +264,7 @@ public class ScrimControllerTest extends SysuiTestCase {
TRANSPARENT /* bubble */);
assertScrimTint(false /* front */,
false /* behind */,
true /* behind */,
false /* bubble */);
}
@@ -516,7 +516,7 @@ public class ScrimControllerTest extends SysuiTestCase {
TRANSPARENT /* bubble */);
assertScrimTint(false /* front */,
false /* behind */,
true /* behind */,
false /* bubble */);
// Back scrim should be visible after start dragging
@@ -586,7 +586,7 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test
public void qsExpansion() {
reset(mScrimBehind);
mScrimController.setQsExpansion(1f);
mScrimController.setQsPosition(1f, 999 /* value doesn't matter */);
finishAnimationsImmediately();
assertScrimAlpha(TRANSPARENT, OPAQUE, TRANSPARENT);
@@ -636,7 +636,7 @@ public class ScrimControllerTest extends SysuiTestCase {
// Make sure at the very end of the animation, we're reset to transparent
assertScrimTint(false /* front */,
false /* behind */,
true /* behind */,
false /* bubble */);
}
@@ -947,7 +947,9 @@ public class ScrimControllerTest extends SysuiTestCase {
if (scrim == mScrimInFront) {
return "front";
} else if (scrim == mScrimBehind) {
return "back";
return "behind";
} else if (scrim == mNotificationsScrim) {
return "notifications";
} else if (scrim == mScrimForBubble) {
return "bubble";
}