Merge "Dual tone shade implementation" into sc-dev
This commit is contained in:
@@ -24,7 +24,9 @@ import android.annotation.Nullable;
|
|||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.ColorFilter;
|
import android.graphics.ColorFilter;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.Path;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.graphics.Xfermode;
|
import android.graphics.Xfermode;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.view.animation.DecelerateInterpolator;
|
import android.view.animation.DecelerateInterpolator;
|
||||||
@@ -44,6 +46,9 @@ public class ScrimDrawable extends Drawable {
|
|||||||
private int mMainColor;
|
private int mMainColor;
|
||||||
private ValueAnimator mColorAnimation;
|
private ValueAnimator mColorAnimation;
|
||||||
private int mMainColorTo;
|
private int mMainColorTo;
|
||||||
|
private float mCornerRadius;
|
||||||
|
private Rect mBounds;
|
||||||
|
private ConcaveInfo mConcaveInfo;
|
||||||
|
|
||||||
public ScrimDrawable() {
|
public ScrimDrawable() {
|
||||||
mPaint = new Paint();
|
mPaint = new Paint();
|
||||||
@@ -127,15 +132,67 @@ public class ScrimDrawable extends Drawable {
|
|||||||
return PixelFormat.TRANSLUCENT;
|
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
|
@Override
|
||||||
public void draw(@NonNull Canvas canvas) {
|
public void draw(@NonNull Canvas canvas) {
|
||||||
mPaint.setColor(mMainColor);
|
mPaint.setColor(mMainColor);
|
||||||
mPaint.setAlpha(mAlpha);
|
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
|
@VisibleForTesting
|
||||||
public int getMainColor() {
|
public int getMainColor() {
|
||||||
return mMainColor;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,14 @@
|
|||||||
sysui:ignoreRightInset="true"
|
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
|
<com.android.systemui.statusbar.LightRevealScrim
|
||||||
android:id="@+id/light_reveal_scrim"
|
android:id="@+id/light_reveal_scrim"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -718,6 +718,7 @@
|
|||||||
<item name="keyguard_clock_line_spacing_scale_burmese" type="dimen" format="float">1</item>
|
<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>
|
<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. -->
|
<!-- The minimum amount the user needs to swipe to go to the camera / phone. -->
|
||||||
<dimen name="keyguard_min_swipe_amount">110dp</dimen>
|
<dimen name="keyguard_min_swipe_amount">110dp</dimen>
|
||||||
|
|||||||
@@ -26,17 +26,18 @@ import android.graphics.PorterDuff;
|
|||||||
import android.graphics.PorterDuff.Mode;
|
import android.graphics.PorterDuff.Mode;
|
||||||
import android.graphics.PorterDuffColorFilter;
|
import android.graphics.PorterDuffColorFilter;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.annotation.DimenRes;
|
||||||
import androidx.core.graphics.ColorUtils;
|
import androidx.core.graphics.ColorUtils;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.colorextraction.ColorExtractor;
|
import com.android.internal.colorextraction.ColorExtractor;
|
||||||
import com.android.internal.colorextraction.drawable.ScrimDrawable;
|
import com.android.internal.colorextraction.drawable.ScrimDrawable;
|
||||||
|
import com.android.systemui.R;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -47,6 +48,10 @@ import java.util.concurrent.Executor;
|
|||||||
* need to be careful to synchronize when necessary.
|
* need to be careful to synchronize when necessary.
|
||||||
*/
|
*/
|
||||||
public class ScrimView extends View {
|
public class ScrimView extends View {
|
||||||
|
|
||||||
|
@DimenRes
|
||||||
|
private static final int CORNER_RADIUS = R.dimen.notification_scrim_corner_radius;
|
||||||
|
|
||||||
private final Object mColorLock = new Object();
|
private final Object mColorLock = new Object();
|
||||||
|
|
||||||
@GuardedBy("mColorLock")
|
@GuardedBy("mColorLock")
|
||||||
@@ -260,4 +265,27 @@ public class ScrimView extends View {
|
|||||||
mExecutor.execute(r);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2002,11 +2002,23 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
float qsExpansionFraction = getQsExpansionFraction();
|
float qsExpansionFraction = getQsExpansionFraction();
|
||||||
mQs.setQsExpansion(qsExpansionFraction, getHeaderTranslation());
|
mQs.setQsExpansion(qsExpansionFraction, getHeaderTranslation());
|
||||||
mMediaHierarchyManager.setQsExpansion(qsExpansionFraction);
|
mMediaHierarchyManager.setQsExpansion(qsExpansionFraction);
|
||||||
mScrimController.setQsExpansion(qsExpansionFraction);
|
mScrimController.setQsPosition(qsExpansionFraction,
|
||||||
|
calculateQsBottomPosition(qsExpansionFraction));
|
||||||
mNotificationStackScrollLayoutController.setQsExpansionFraction(qsExpansionFraction);
|
mNotificationStackScrollLayoutController.setQsExpansionFraction(qsExpansionFraction);
|
||||||
mDepthController.setQsPanelExpansion(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() {
|
private String determineAccessibilityPaneTitle() {
|
||||||
if (mQs != null && mQs.isCustomizing()) {
|
if (mQs != null && mQs.isCustomizing()) {
|
||||||
return mResources.getString(R.string.accessibility_desc_quick_settings_edit);
|
return mResources.getString(R.string.accessibility_desc_quick_settings_edit);
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import android.animation.ValueAnimator;
|
|||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Trace;
|
import android.os.Trace;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -49,7 +48,6 @@ import com.android.systemui.R;
|
|||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.dock.DockManager;
|
import com.android.systemui.dock.DockManager;
|
||||||
import com.android.systemui.statusbar.BlurUtils;
|
|
||||||
import com.android.systemui.statusbar.FeatureFlags;
|
import com.android.systemui.statusbar.FeatureFlags;
|
||||||
import com.android.systemui.statusbar.ScrimView;
|
import com.android.systemui.statusbar.ScrimView;
|
||||||
import com.android.systemui.statusbar.notification.stack.ViewState;
|
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 ScrimState mState = ScrimState.UNINITIALIZED;
|
||||||
|
|
||||||
private ScrimView mScrimInFront;
|
private ScrimView mScrimInFront;
|
||||||
|
private ScrimView mNotificationsScrim;
|
||||||
private ScrimView mScrimBehind;
|
private ScrimView mScrimBehind;
|
||||||
@Nullable
|
@Nullable
|
||||||
private ScrimView mScrimForBubble;
|
private ScrimView mScrimForBubble;
|
||||||
@@ -156,7 +155,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
private final KeyguardVisibilityCallback mKeyguardVisibilityCallback;
|
private final KeyguardVisibilityCallback mKeyguardVisibilityCallback;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final Executor mMainExecutor;
|
private final Executor mMainExecutor;
|
||||||
private final BlurUtils mBlurUtils;
|
|
||||||
|
|
||||||
private GradientColors mColors;
|
private GradientColors mColors;
|
||||||
private boolean mNeedsDrawableColorUpdate;
|
private boolean mNeedsDrawableColorUpdate;
|
||||||
@@ -180,6 +178,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
|
|
||||||
private float mInFrontAlpha = NOT_INITIALIZED;
|
private float mInFrontAlpha = NOT_INITIALIZED;
|
||||||
private float mBehindAlpha = NOT_INITIALIZED;
|
private float mBehindAlpha = NOT_INITIALIZED;
|
||||||
|
private float mNotificationsAlpha = NOT_INITIALIZED;
|
||||||
private float mBubbleAlpha = NOT_INITIALIZED;
|
private float mBubbleAlpha = NOT_INITIALIZED;
|
||||||
|
|
||||||
private int mInFrontTint;
|
private int mInFrontTint;
|
||||||
@@ -209,12 +208,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
AlarmManager alarmManager, KeyguardStateController keyguardStateController,
|
AlarmManager alarmManager, KeyguardStateController keyguardStateController,
|
||||||
DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler,
|
DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler,
|
||||||
KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager,
|
KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager,
|
||||||
BlurUtils blurUtils, ConfigurationController configurationController,
|
ConfigurationController configurationController,
|
||||||
FeatureFlags featureFlags, @Main Executor mainExecutor) {
|
FeatureFlags featureFlags, @Main Executor mainExecutor) {
|
||||||
mScrimStateListener = lightBarController::setScrimState;
|
mScrimStateListener = lightBarController::setScrimState;
|
||||||
mDefaultScrimAlpha = featureFlags.isShadeOpaque() ? BUSY_SCRIM_ALPHA : GAR_SCRIM_ALPHA;
|
mDefaultScrimAlpha = featureFlags.isShadeOpaque() ? BUSY_SCRIM_ALPHA : GAR_SCRIM_ALPHA;
|
||||||
ScrimState.BUBBLE_EXPANDED.setBubbleAlpha(BUBBLE_SCRIM_ALPHA);
|
ScrimState.BUBBLE_EXPANDED.setBubbleAlpha(BUBBLE_SCRIM_ALPHA);
|
||||||
mBlurUtils = blurUtils;
|
|
||||||
|
|
||||||
mKeyguardStateController = keyguardStateController;
|
mKeyguardStateController = keyguardStateController;
|
||||||
mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen();
|
mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen();
|
||||||
@@ -259,13 +257,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
/**
|
/**
|
||||||
* Attach the controller to the supplied views.
|
* Attach the controller to the supplied views.
|
||||||
*/
|
*/
|
||||||
public void attachViews(
|
public void attachViews(ScrimView behindScrim, ScrimView notificationsScrim,
|
||||||
ScrimView scrimBehind, ScrimView scrimInFront, @Nullable ScrimView scrimForBubble) {
|
ScrimView scrimInFront, @Nullable ScrimView scrimForBubble) {
|
||||||
mScrimBehind = scrimBehind;
|
mNotificationsScrim = notificationsScrim;
|
||||||
|
mScrimBehind = behindScrim;
|
||||||
mScrimInFront = scrimInFront;
|
mScrimInFront = scrimInFront;
|
||||||
mScrimForBubble = scrimForBubble;
|
mScrimForBubble = scrimForBubble;
|
||||||
updateThemeColors();
|
updateThemeColors();
|
||||||
|
|
||||||
|
mNotificationsScrim.enableRoundedCorners();
|
||||||
|
|
||||||
if (mScrimBehindChangeRunnable != null) {
|
if (mScrimBehindChangeRunnable != null) {
|
||||||
mScrimBehind.setChangeRunnable(mScrimBehindChangeRunnable, mMainExecutor);
|
mScrimBehind.setChangeRunnable(mScrimBehindChangeRunnable, mMainExecutor);
|
||||||
mScrimBehindChangeRunnable = null;
|
mScrimBehindChangeRunnable = null;
|
||||||
@@ -280,6 +281,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
}
|
}
|
||||||
|
|
||||||
mScrimBehind.setDefaultFocusHighlightEnabled(false);
|
mScrimBehind.setDefaultFocusHighlightEnabled(false);
|
||||||
|
mNotificationsScrim.setDefaultFocusHighlightEnabled(false);
|
||||||
mScrimInFront.setDefaultFocusHighlightEnabled(false);
|
mScrimInFront.setDefaultFocusHighlightEnabled(false);
|
||||||
if (mScrimForBubble != null) {
|
if (mScrimForBubble != null) {
|
||||||
mScrimForBubble.setDefaultFocusHighlightEnabled(false);
|
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.
|
// We need to disable focus otherwise AOD would end up with a gray overlay.
|
||||||
mScrimInFront.setFocusable(!state.isLowPowerState());
|
mScrimInFront.setFocusable(!state.isLowPowerState());
|
||||||
mScrimBehind.setFocusable(!state.isLowPowerState());
|
mScrimBehind.setFocusable(!state.isLowPowerState());
|
||||||
|
mNotificationsScrim.setFocusable(!state.isLowPowerState());
|
||||||
|
|
||||||
// Cancel blanking transitions that were pending before we requested a new state
|
// Cancel blanking transitions that were pending before we requested a new state
|
||||||
if (mPendingFrameCallback != null) {
|
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) {
|
public void setQsPosition(float expansionFraction, int qsPanelBottomY) {
|
||||||
if (isNaN(fraction)) {
|
if (isNaN(expansionFraction)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mQsExpansion != fraction) {
|
shiftNotificationsScrim(qsPanelBottomY);
|
||||||
mQsExpansion = fraction;
|
updateNotificationsScrimAlpha(qsPanelBottomY);
|
||||||
|
if (mQsExpansion != expansionFraction) {
|
||||||
|
mQsExpansion = expansionFraction;
|
||||||
Log.d(TAG, "set qs fraction");
|
Log.d(TAG, "set qs fraction");
|
||||||
|
|
||||||
boolean relevantState = (mState == ScrimState.SHADE_LOCKED
|
boolean relevantState = (mState == ScrimState.SHADE_LOCKED
|
||||||
|| mState == ScrimState.KEYGUARD
|
|| mState == ScrimState.KEYGUARD
|
||||||
|| mState == ScrimState.PULSING
|
|| 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) {
|
private void setOrAdaptCurrentAnimation(@Nullable View scrim) {
|
||||||
if (scrim == null) {
|
if (scrim == null) {
|
||||||
return;
|
return;
|
||||||
@@ -575,6 +606,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setOrAdaptCurrentAnimation(mScrimBehind);
|
setOrAdaptCurrentAnimation(mScrimBehind);
|
||||||
|
setOrAdaptCurrentAnimation(mNotificationsScrim);
|
||||||
setOrAdaptCurrentAnimation(mScrimInFront);
|
setOrAdaptCurrentAnimation(mScrimInFront);
|
||||||
setOrAdaptCurrentAnimation(mScrimForBubble);
|
setOrAdaptCurrentAnimation(mScrimForBubble);
|
||||||
dispatchScrimState(mScrimBehind.getViewAlpha());
|
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.
|
* Sets the front scrim opacity in AOD so it's not as bright.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -667,10 +691,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
mNeedsDrawableColorUpdate = false;
|
mNeedsDrawableColorUpdate = false;
|
||||||
// Only animate scrim color if the scrim view is actually visible
|
// Only animate scrim color if the scrim view is actually visible
|
||||||
boolean animateScrimInFront = mScrimInFront.getViewAlpha() != 0 && !mBlankScreen;
|
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);
|
mScrimInFront.setColors(mColors, animateScrimInFront);
|
||||||
mScrimBehind.setColors(mColors, animateScrimBehind);
|
mScrimBehind.setColors(mColors, animateScrimNotifications);
|
||||||
|
mNotificationsScrim.setColors(mColors, animateScrimNotifications);
|
||||||
|
|
||||||
dispatchScrimState(mScrimBehind.getViewAlpha());
|
dispatchScrimState(mScrimBehind.getViewAlpha());
|
||||||
}
|
}
|
||||||
@@ -687,6 +714,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
}
|
}
|
||||||
setScrimAlpha(mScrimInFront, mInFrontAlpha);
|
setScrimAlpha(mScrimInFront, mInFrontAlpha);
|
||||||
setScrimAlpha(mScrimBehind, mBehindAlpha);
|
setScrimAlpha(mScrimBehind, mBehindAlpha);
|
||||||
|
setScrimAlpha(mNotificationsScrim, mNotificationsAlpha);
|
||||||
|
|
||||||
if (mScrimForBubble != null) {
|
if (mScrimForBubble != null) {
|
||||||
boolean animateScrimForBubble = mScrimForBubble.getViewAlpha() != 0 && !mBlankScreen;
|
boolean animateScrimForBubble = mScrimForBubble.getViewAlpha() != 0 && !mBlankScreen;
|
||||||
@@ -744,7 +772,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
if (scrim == mScrimInFront) {
|
if (scrim == mScrimInFront) {
|
||||||
return "front_scrim";
|
return "front_scrim";
|
||||||
} else if (scrim == mScrimBehind) {
|
} else if (scrim == mScrimBehind) {
|
||||||
return "back_scrim";
|
return "behind_scrim";
|
||||||
|
} else if (scrim == mNotificationsScrim) {
|
||||||
|
return "notifications_scrim";
|
||||||
} else if (scrim == mScrimForBubble) {
|
} else if (scrim == mScrimForBubble) {
|
||||||
return "bubble_scrim";
|
return "bubble_scrim";
|
||||||
}
|
}
|
||||||
@@ -817,6 +847,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
return mInFrontAlpha;
|
return mInFrontAlpha;
|
||||||
} else if (scrim == mScrimBehind) {
|
} else if (scrim == mScrimBehind) {
|
||||||
return mBehindAlpha;
|
return mBehindAlpha;
|
||||||
|
} else if (scrim == mNotificationsScrim) {
|
||||||
|
return mNotificationsAlpha;
|
||||||
} else if (scrim == mScrimForBubble) {
|
} else if (scrim == mScrimForBubble) {
|
||||||
return mBubbleAlpha;
|
return mBubbleAlpha;
|
||||||
} else {
|
} else {
|
||||||
@@ -829,6 +861,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
return mInFrontTint;
|
return mInFrontTint;
|
||||||
} else if (scrim == mScrimBehind) {
|
} else if (scrim == mScrimBehind) {
|
||||||
return mBehindTint;
|
return mBehindTint;
|
||||||
|
} else if (scrim == mNotificationsScrim) {
|
||||||
|
return Color.TRANSPARENT;
|
||||||
} else if (scrim == mScrimForBubble) {
|
} else if (scrim == mScrimForBubble) {
|
||||||
return mBubbleTint;
|
return mBubbleTint;
|
||||||
} else {
|
} else {
|
||||||
@@ -858,8 +892,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
|
|
||||||
}
|
}
|
||||||
if (isAnimating(mScrimBehind)
|
if (isAnimating(mScrimBehind)
|
||||||
|| isAnimating(mScrimInFront)
|
|| isAnimating(mNotificationsScrim)
|
||||||
|| isAnimating(mScrimForBubble)) {
|
|| isAnimating(mScrimInFront)
|
||||||
|
|| isAnimating(mScrimForBubble)) {
|
||||||
if (callback != null && callback != mCallback) {
|
if (callback != null && callback != mCallback) {
|
||||||
// Since we only notify the callback that we're finished once everything has
|
// 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
|
// 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.
|
// At the end of the animation we need to remove the tint.
|
||||||
if (mState == ScrimState.UNLOCKED) {
|
if (mState == ScrimState.UNLOCKED) {
|
||||||
mInFrontTint = Color.TRANSPARENT;
|
mInFrontTint = Color.TRANSPARENT;
|
||||||
mBehindTint = Color.TRANSPARENT;
|
mBehindTint = mState.getBehindTint();
|
||||||
mBubbleTint = Color.TRANSPARENT;
|
mBubbleTint = Color.TRANSPARENT;
|
||||||
updateScrimColor(mScrimInFront, mInFrontAlpha, mInFrontTint);
|
updateScrimColor(mScrimInFront, mInFrontAlpha, mInFrontTint);
|
||||||
updateScrimColor(mScrimBehind, mBehindAlpha, mBehindTint);
|
updateScrimColor(mScrimBehind, mBehindAlpha, mBehindTint);
|
||||||
@@ -996,12 +1031,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
mScrimBehind.postOnAnimationDelayed(callback, 32 /* delayMillis */);
|
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) {
|
public void setScrimBehindChangeRunnable(Runnable changeRunnable) {
|
||||||
// TODO: remove this. This is necessary because of an order-of-operations limitation.
|
// TODO: remove this. This is necessary because of an order-of-operations limitation.
|
||||||
// The fix is to move more of these class into @StatusBarScope
|
// 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.print(" tint=0x");
|
||||||
pw.println(Integer.toHexString(mScrimInFront.getTint()));
|
pw.println(Integer.toHexString(mScrimInFront.getTint()));
|
||||||
|
|
||||||
pw.print(" backScrim:");
|
pw.print(" behindScrim:");
|
||||||
pw.print(" viewAlpha=");
|
pw.print(" viewAlpha=");
|
||||||
pw.print(mScrimBehind.getViewAlpha());
|
pw.print(mScrimBehind.getViewAlpha());
|
||||||
pw.print(" alpha=");
|
pw.print(" alpha=");
|
||||||
@@ -1055,6 +1084,14 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
pw.print(" tint=0x");
|
pw.print(" tint=0x");
|
||||||
pw.println(Integer.toHexString(mScrimBehind.getTint()));
|
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(" bubbleScrim:");
|
||||||
pw.print(" viewAlpha=");
|
pw.print(" viewAlpha=");
|
||||||
pw.print(mScrimForBubble.getViewAlpha());
|
pw.print(mScrimForBubble.getViewAlpha());
|
||||||
|
|||||||
@@ -129,6 +129,13 @@ public enum ScrimState {
|
|||||||
mBehindAlpha = mDefaultScrimAlpha;
|
mBehindAlpha = mDefaultScrimAlpha;
|
||||||
mBubbleAlpha = 0f;
|
mBubbleAlpha = 0f;
|
||||||
mFrontAlpha = 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;
|
mAnimateChange = !mLaunchingAffordanceWithPreview;
|
||||||
|
|
||||||
mFrontTint = Color.TRANSPARENT;
|
mFrontTint = Color.TRANSPARENT;
|
||||||
mBehindTint = Color.TRANSPARENT;
|
mBehindTint = Color.BLACK;
|
||||||
mBubbleTint = Color.TRANSPARENT;
|
mBubbleTint = Color.TRANSPARENT;
|
||||||
mBlankScreen = false;
|
mBlankScreen = false;
|
||||||
|
|
||||||
|
|||||||
@@ -1215,6 +1215,8 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
});
|
});
|
||||||
|
|
||||||
ScrimView scrimBehind = mNotificationShadeWindowView.findViewById(R.id.scrim_behind);
|
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 scrimInFront = mNotificationShadeWindowView.findViewById(R.id.scrim_in_front);
|
||||||
ScrimView scrimForBubble = mBubblesManagerOptional.isPresent()
|
ScrimView scrimForBubble = mBubblesManagerOptional.isPresent()
|
||||||
? mBubblesManagerOptional.get().getScrimForBubble() : null;
|
? mBubblesManagerOptional.get().getScrimForBubble() : null;
|
||||||
@@ -1223,7 +1225,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible);
|
mNotificationShadeWindowController.setScrimsVisibility(scrimsVisible);
|
||||||
mLockscreenLockIconController.onScrimVisibilityChanged(scrimsVisible);
|
mLockscreenLockIconController.onScrimVisibilityChanged(scrimsVisible);
|
||||||
});
|
});
|
||||||
mScrimController.attachViews(scrimBehind, scrimInFront, scrimForBubble);
|
mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront, scrimForBubble);
|
||||||
|
|
||||||
mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
|
mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
|
||||||
updateLightRevealScrimVisibility();
|
updateLightRevealScrimVisibility();
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
|||||||
import com.android.systemui.DejankUtils;
|
import com.android.systemui.DejankUtils;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.dock.DockManager;
|
import com.android.systemui.dock.DockManager;
|
||||||
import com.android.systemui.statusbar.BlurUtils;
|
|
||||||
import com.android.systemui.statusbar.FeatureFlags;
|
import com.android.systemui.statusbar.FeatureFlags;
|
||||||
import com.android.systemui.statusbar.ScrimView;
|
import com.android.systemui.statusbar.ScrimView;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
@@ -79,6 +78,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
private ScrimController mScrimController;
|
private ScrimController mScrimController;
|
||||||
private ScrimView mScrimBehind;
|
private ScrimView mScrimBehind;
|
||||||
|
private ScrimView mNotificationsScrim;
|
||||||
private ScrimView mScrimInFront;
|
private ScrimView mScrimInFront;
|
||||||
private ScrimView mScrimForBubble;
|
private ScrimView mScrimForBubble;
|
||||||
private ScrimState mScrimState;
|
private ScrimState mScrimState;
|
||||||
@@ -104,8 +104,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private DockManager mDockManager;
|
private DockManager mDockManager;
|
||||||
@Mock
|
@Mock
|
||||||
private BlurUtils mBlurUtils;
|
|
||||||
@Mock
|
|
||||||
private ConfigurationController mConfigurationController;
|
private ConfigurationController mConfigurationController;
|
||||||
@Mock
|
@Mock
|
||||||
private FeatureFlags mFeatureFlags;
|
private FeatureFlags mFeatureFlags;
|
||||||
@@ -163,6 +161,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController.onPreDraw();
|
mScrimController.onPreDraw();
|
||||||
// Force finish all animations.
|
// Force finish all animations.
|
||||||
mLooper.processAllMessages();
|
mLooper.processAllMessages();
|
||||||
|
endAnimation(mNotificationsScrim);
|
||||||
endAnimation(mScrimBehind);
|
endAnimation(mScrimBehind);
|
||||||
endAnimation(mScrimInFront);
|
endAnimation(mScrimInFront);
|
||||||
endAnimation(mScrimForBubble);
|
endAnimation(mScrimForBubble);
|
||||||
@@ -189,6 +188,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimBehind = spy(new ScrimView(getContext()));
|
mScrimBehind = spy(new ScrimView(getContext()));
|
||||||
mScrimInFront = new ScrimView(getContext());
|
mScrimInFront = new ScrimView(getContext());
|
||||||
mScrimForBubble = new ScrimView(getContext());
|
mScrimForBubble = new ScrimView(getContext());
|
||||||
|
mNotificationsScrim = new ScrimView(getContext());
|
||||||
mAlwaysOnEnabled = true;
|
mAlwaysOnEnabled = true;
|
||||||
mLooper = TestableLooper.get(this);
|
mLooper = TestableLooper.get(this);
|
||||||
DejankUtils.setImmediate(true);
|
DejankUtils.setImmediate(true);
|
||||||
@@ -201,7 +201,6 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled);
|
when(mDozeParamenters.getAlwaysOn()).thenAnswer(invocation -> mAlwaysOnEnabled);
|
||||||
when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true);
|
when(mDozeParamenters.getDisplayNeedsBlanking()).thenReturn(true);
|
||||||
when(mBlurUtils.supportsBlursOnWindows()).thenReturn(true);
|
|
||||||
|
|
||||||
doAnswer((Answer<Void>) invocation -> {
|
doAnswer((Answer<Void>) invocation -> {
|
||||||
mScrimState = invocation.getArgument(0);
|
mScrimState = invocation.getArgument(0);
|
||||||
@@ -222,10 +221,11 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
mScrimController = new ScrimController(mLightBarController,
|
mScrimController = new ScrimController(mLightBarController,
|
||||||
mDozeParamenters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder,
|
mDozeParamenters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder,
|
||||||
new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor,
|
new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor,
|
||||||
mDockManager, mBlurUtils, mConfigurationController, mFeatureFlags,
|
mDockManager, mConfigurationController, mFeatureFlags,
|
||||||
new FakeExecutor(new FakeSystemClock()));
|
new FakeExecutor(new FakeSystemClock()));
|
||||||
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
||||||
mScrimController.attachViews(mScrimBehind, mScrimInFront, mScrimForBubble);
|
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront,
|
||||||
|
mScrimForBubble);
|
||||||
mScrimController.setAnimatorListener(mAnimatorListener);
|
mScrimController.setAnimatorListener(mAnimatorListener);
|
||||||
|
|
||||||
mScrimController.setHasBackdrop(false);
|
mScrimController.setHasBackdrop(false);
|
||||||
@@ -264,7 +264,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
TRANSPARENT /* bubble */);
|
TRANSPARENT /* bubble */);
|
||||||
|
|
||||||
assertScrimTint(false /* front */,
|
assertScrimTint(false /* front */,
|
||||||
false /* behind */,
|
true /* behind */,
|
||||||
false /* bubble */);
|
false /* bubble */);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,7 +516,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
TRANSPARENT /* bubble */);
|
TRANSPARENT /* bubble */);
|
||||||
|
|
||||||
assertScrimTint(false /* front */,
|
assertScrimTint(false /* front */,
|
||||||
false /* behind */,
|
true /* behind */,
|
||||||
false /* bubble */);
|
false /* bubble */);
|
||||||
|
|
||||||
// Back scrim should be visible after start dragging
|
// Back scrim should be visible after start dragging
|
||||||
@@ -586,7 +586,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void qsExpansion() {
|
public void qsExpansion() {
|
||||||
reset(mScrimBehind);
|
reset(mScrimBehind);
|
||||||
mScrimController.setQsExpansion(1f);
|
mScrimController.setQsPosition(1f, 999 /* value doesn't matter */);
|
||||||
finishAnimationsImmediately();
|
finishAnimationsImmediately();
|
||||||
|
|
||||||
assertScrimAlpha(TRANSPARENT, OPAQUE, TRANSPARENT);
|
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
|
// Make sure at the very end of the animation, we're reset to transparent
|
||||||
assertScrimTint(false /* front */,
|
assertScrimTint(false /* front */,
|
||||||
false /* behind */,
|
true /* behind */,
|
||||||
false /* bubble */);
|
false /* bubble */);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -947,7 +947,9 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
if (scrim == mScrimInFront) {
|
if (scrim == mScrimInFront) {
|
||||||
return "front";
|
return "front";
|
||||||
} else if (scrim == mScrimBehind) {
|
} else if (scrim == mScrimBehind) {
|
||||||
return "back";
|
return "behind";
|
||||||
|
} else if (scrim == mNotificationsScrim) {
|
||||||
|
return "notifications";
|
||||||
} else if (scrim == mScrimForBubble) {
|
} else if (scrim == mScrimForBubble) {
|
||||||
return "bubble";
|
return "bubble";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user