From 99f5fbadab4b9b6f06f3a24540d65e5f405716a2 Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Thu, 12 Mar 2020 12:59:18 -0700 Subject: [PATCH] New scrim values for shade and dialogs This is the minimum value required for meeting the accessibility guidelines, having a contrast ration of 4:1. Test: visual Test: atest ScrimControllerTest Bug: 149792636 Change-Id: I7ae534001983b9b6bb3ccede60f5fb4f43092ed6 --- .../globalactions/GlobalActionsDialog.java | 14 +++++++--- .../globalactions/GlobalActionsImpl.java | 2 +- .../android/systemui/statusbar/BlurUtils.kt | 9 ++++--- .../statusbar/phone/ScrimController.java | 26 ++++++++++++------- .../systemui/statusbar/phone/ScrimState.java | 15 +++++++---- .../statusbar/phone/ScrimControllerTest.java | 5 +++- 6 files changed, 47 insertions(+), 24 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index 59b28b4372b41..6d16253b61efe 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -99,6 +99,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.GlobalActions.GlobalActionsManager; import com.android.systemui.plugins.GlobalActionsPanelPlugin; +import com.android.systemui.statusbar.BlurUtils; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.phone.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.ScrimController; @@ -163,6 +164,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private final TelecomManager mTelecomManager; private final MetricsLogger mMetricsLogger; private final NotificationShadeDepthController mDepthController; + private final BlurUtils mBlurUtils; private ArrayList mItems; private ActionsDialog mDialog; @@ -208,7 +210,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, TrustManager trustManager, IActivityManager iActivityManager, @Nullable TelecomManager telecomManager, MetricsLogger metricsLogger, NotificationShadeDepthController depthController, SysuiColorExtractor colorExtractor, - IStatusBarService statusBarService, + IStatusBarService statusBarService, BlurUtils blurUtils, NotificationShadeWindowController notificationShadeWindowController, ControlsUiController controlsUiController, IWindowManager iWindowManager, @Background Executor backgroundExecutor, @@ -237,6 +239,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mIWindowManager = iWindowManager; mBackgroundExecutor = backgroundExecutor; mControlsListingController = controlsListingController; + mBlurUtils = blurUtils; // receive broadcasts IntentFilter filter = new IntentFilter(); @@ -439,7 +442,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, ActionsDialog dialog = new ActionsDialog(mContext, mAdapter, panelViewController, mDepthController, mSysuiColorExtractor, mStatusBarService, mNotificationShadeWindowController, - shouldShowControls() ? mControlsUiController : null); + shouldShowControls() ? mControlsUiController : null, mBlurUtils); dialog.setCanceledOnTouchOutside(false); // Handled by the custom class. dialog.setKeyguardShowing(mKeyguardShowing); @@ -1571,6 +1574,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private boolean mHadTopUi; private final NotificationShadeWindowController mNotificationShadeWindowController; private final NotificationShadeDepthController mDepthController; + private final BlurUtils mBlurUtils; private ControlsUiController mControlsUiController; private ViewGroup mControlsView; @@ -1580,7 +1584,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, NotificationShadeDepthController depthController, SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService, NotificationShadeWindowController notificationShadeWindowController, - ControlsUiController controlsUiController) { + ControlsUiController controlsUiController, BlurUtils blurUtils) { super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions); mContext = context; mAdapter = adapter; @@ -1589,6 +1593,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mStatusBarService = statusBarService; mNotificationShadeWindowController = notificationShadeWindowController; mControlsUiController = controlsUiController; + mBlurUtils = blurUtils; // Window initialization Window window = getWindow(); @@ -1697,7 +1702,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, } if (mBackgroundDrawable == null) { mBackgroundDrawable = new ScrimDrawable(); - mScrimAlpha = ScrimController.BUSY_SCRIM_ALPHA; + mScrimAlpha = mBlurUtils.supportsBlursOnWindows() + ? ScrimController.BLUR_SCRIM_ALPHA : ScrimController.BUSY_SCRIM_ALPHA; } getWindow().setBackgroundDrawable(mBackgroundDrawable); } diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java index bbb57bdb33f7c..12955a153360c 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java @@ -149,7 +149,7 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks } if (mBlurUtils.supportsBlursOnWindows()) { - background.setAlpha((int) (ScrimController.BUSY_SCRIM_ALPHA * 255)); + background.setAlpha((int) (ScrimController.BLUR_SCRIM_ALPHA * 255)); mBlurUtils.applyBlur(d.getWindow().getDecorView().getViewRootImpl(), mBlurUtils.blurRadiusOfRatio(1)); } else { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index c523b7b7655e3..866980458cada 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -40,8 +40,10 @@ open class BlurUtils @Inject constructor( ) : Dumpable { private val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) private val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) - private val blurSysProp = SystemProperties + private val blurSupportedSysProp = SystemProperties .getBoolean("ro.surface_flinger.supports_background_blur", false) + private val blurDisabledSysProp = SystemProperties + .getBoolean("persist.sys.sf.disable_blurs", false) init { dumpManager.registerDumpable(javaClass.name, this) @@ -97,7 +99,7 @@ open class BlurUtils @Inject constructor( * @return {@code true} when supported. */ open fun supportsBlursOnWindows(): Boolean { - return blurSysProp && ActivityManager.isHighEndGfx() + return blurSupportedSysProp && !blurDisabledSysProp && ActivityManager.isHighEndGfx() } override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array) { @@ -106,7 +108,8 @@ open class BlurUtils @Inject constructor( it.increaseIndent() it.println("minBlurRadius: $minBlurRadius") it.println("maxBlurRadius: $maxBlurRadius") - it.println("blurSysProp: $blurSysProp") + it.println("blurSupportedSysProp: $blurSupportedSysProp") + it.println("blurDisabledSysProp: $blurDisabledSysProp") it.println("supportsBlursOnWindows: ${supportsBlursOnWindows()}") } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index d1ff32d9304e1..c5901398a54b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -47,6 +47,7 @@ import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dock.DockManager; +import com.android.systemui.statusbar.BlurUtils; import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -107,21 +108,21 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo /** * Default alpha value for most scrims. */ - public static final float SCRIM_ALPHA = 0.2f; + protected static final float KEYGUARD_SCRIM_ALPHA = 0.2f; /** * Scrim opacity when the phone is about to wake-up. */ public static final float WAKE_SENSOR_SCRIM_ALPHA = 0.6f; /** - * A scrim varies its opacity based on a busyness factor, for example - * how many notifications are currently visible. + * The default scrim under the shade and dialogs. + * This should not be lower than 0.54, otherwise we won't pass GAR. */ public static final float BUSY_SCRIM_ALPHA = 0.75f; /** - * The most common scrim, the one under the keyguard. + * Same as above, but when blur is supported. */ - protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = SCRIM_ALPHA; + public static final float BLUR_SCRIM_ALPHA = 0.54f; static final int TAG_KEY_ANIM = R.id.scrim; private static final int TAG_START_ALPHA = R.id.scrim_alpha_start; @@ -146,7 +147,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo private GradientColors mColors; private boolean mNeedsDrawableColorUpdate; - private float mScrimBehindAlphaKeyguard = SCRIM_BEHIND_ALPHA_KEYGUARD; + private float mScrimBehindAlphaKeyguard = KEYGUARD_SCRIM_ALPHA; + private final float mDefaultScrimAlpha; // Assuming the shade is expanded during initialization private float mExpansionFraction = 1f; @@ -192,9 +194,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo AlarmManager alarmManager, KeyguardStateController keyguardStateController, DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler, KeyguardUpdateMonitor keyguardUpdateMonitor, SysuiColorExtractor sysuiColorExtractor, - DockManager dockManager) { + DockManager dockManager, BlurUtils blurUtils) { mScrimStateListener = lightBarController::setScrimState; + mDefaultScrimAlpha = blurUtils.supportsBlursOnWindows() + ? BLUR_SCRIM_ALPHA : BUSY_SCRIM_ALPHA; mKeyguardStateController = keyguardStateController; mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen(); @@ -236,6 +240,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo states[i].init(mScrimInFront, mScrimBehind, mScrimForBubble, mDozeParameters, mDockManager); states[i].setScrimBehindAlphaKeyguard(mScrimBehindAlphaKeyguard); + states[i].setDefaultScrimAlpha(mDefaultScrimAlpha); } mScrimBehind.setDefaultFocusHighlightEnabled(false); @@ -483,7 +488,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo // Darken scrim as you pull down the shade when unlocked float behindFraction = getInterpolatedFraction(); behindFraction = (float) Math.pow(behindFraction, 0.8f); - mBehindAlpha = behindFraction * BUSY_SCRIM_ALPHA; + mBehindAlpha = behindFraction * mDefaultScrimAlpha; mInFrontAlpha = 0; } else if (mState == ScrimState.KEYGUARD || mState == ScrimState.PULSING) { // Either darken of make the scrim transparent when you @@ -491,7 +496,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo float interpolatedFract = getInterpolatedFraction(); float alphaBehind = mState.getBehindAlpha(); if (mDarkenWhileDragging) { - mBehindAlpha = MathUtils.lerp(BUSY_SCRIM_ALPHA, alphaBehind, + mBehindAlpha = MathUtils.lerp(mDefaultScrimAlpha, alphaBehind, interpolatedFract); mInFrontAlpha = mState.getFrontAlpha(); } else { @@ -967,7 +972,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo pw.print(" mTracking="); pw.println(mTracking); - + pw.print(" mDefaultScrimAlpha="); + pw.println(mDefaultScrimAlpha); pw.print(" mExpansionFraction="); pw.println(mExpansionFraction); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java index c23fd0a3d5d63..ade642c5ea9aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java @@ -92,7 +92,7 @@ public enum ScrimState { BOUNCER { @Override public void prepare(ScrimState previousState) { - mBehindAlpha = ScrimController.BUSY_SCRIM_ALPHA; + mBehindAlpha = mDefaultScrimAlpha; mFrontAlpha = 0f; mBubbleAlpha = 0f; } @@ -106,7 +106,7 @@ public enum ScrimState { public void prepare(ScrimState previousState) { mBehindAlpha = 0; mBubbleAlpha = 0f; - mFrontAlpha = ScrimController.BUSY_SCRIM_ALPHA; + mFrontAlpha = mDefaultScrimAlpha; } }, @@ -233,9 +233,9 @@ public enum ScrimState { mBehindTint = Color.TRANSPARENT; mBubbleTint = Color.TRANSPARENT; - mFrontAlpha = ScrimController.TRANSPARENT; - mBehindAlpha = ScrimController.BUSY_SCRIM_ALPHA; - mBubbleAlpha = ScrimController.BUSY_SCRIM_ALPHA; + mFrontAlpha = 0f; + mBehindAlpha = mDefaultScrimAlpha; + mBubbleAlpha = mDefaultScrimAlpha; mAnimationDuration = ScrimController.ANIMATION_DURATION; mBlankScreen = false; @@ -255,6 +255,7 @@ public enum ScrimState { float mBubbleAlpha; float mScrimBehindAlphaKeyguard; + float mDefaultScrimAlpha; ScrimView mScrimInFront; ScrimView mScrimBehind; ScrimView mScrimForBubble; @@ -341,6 +342,10 @@ public enum ScrimState { mScrimBehindAlphaKeyguard = scrimBehindAlphaKeyguard; } + public void setDefaultScrimAlpha(float defaultScrimAlpha) { + mDefaultScrimAlpha = defaultScrimAlpha; + } + public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) { mWallpaperSupportsAmbientMode = wallpaperSupportsAmbientMode; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 408dfc0e1deec..23f263746fb3d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -50,6 +50,7 @@ import com.android.systemui.DejankUtils; import com.android.systemui.SysuiTestCase; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dock.DockManager; +import com.android.systemui.statusbar.BlurUtils; import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.wakelock.DelayedWakeLock; @@ -101,6 +102,8 @@ public class ScrimControllerTest extends SysuiTestCase { private SysuiColorExtractor mSysuiColorExtractor; @Mock private DockManager mDockManager; + @Mock + private BlurUtils mBlurUtils; private static class AnimatorListener implements Animator.AnimatorListener { @@ -215,7 +218,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController = new ScrimController(mLightBarController, mDozeParamenters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder, new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor, mSysuiColorExtractor, - mDockManager); + mDockManager, mBlurUtils); mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible); mScrimController.attachViews(mScrimBehind, mScrimInFront, mScrimForBubble); mScrimController.setAnimatorListener(mAnimatorListener);