From 03c5a30be760bf527257b64e747f768be3408719 Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Mon, 24 May 2021 11:06:38 -0700 Subject: [PATCH] Tweak notification scrim easing A faster fade in that will help with: - Avoid weird state where scrims and notifications overlap - Better connection with launcher scrim (similar easing) - Reduced overdraw, marking shade window as opaque earlier Test: manual Test: atest ScrimControllerTest Fixes: 189118510 Change-Id: I47e357d1d6dd7ee8b8a0b68d37d808c85465375d --- .../com/android/systemui/animation/Interpolators.java | 9 +++++++-- .../android/systemui/statusbar/NotificationShelf.java | 4 ++-- .../notification/stack/StackScrollAlgorithm.java | 4 ++-- .../systemui/statusbar/phone/ScrimController.java | 2 +- .../systemui/statusbar/phone/ScrimControllerTest.java | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/Interpolators.java b/packages/SystemUI/animation/src/com/android/systemui/animation/Interpolators.java index 044b5ed16b68a..e1f72c1937849 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/Interpolators.java +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/Interpolators.java @@ -96,13 +96,18 @@ public class Interpolators { /** * Interpolate alpha for notifications background scrim during shade expansion. * @param fraction Shade expansion fraction + * @param forNotification If we want the alpha of the notification shade or the scrim. */ - public static float getNotificationScrimAlpha(float fraction) { + public static float getNotificationScrimAlpha(float fraction, boolean forNotification) { + if (!forNotification) { + fraction = MathUtils.saturate(1.7f * fraction); + } fraction = fraction * 1.2f - 0.2f; if (fraction <= 0) { return 0; } else { - return (float) (1f - 0.5f * (1f - Math.cos(3.14159f * Math.pow(1f - fraction, 2f)))); + final float oneMinusFrac = 1f - fraction; + return (float) (1f - 0.5f * (1f - Math.cos(3.14159f * oneMinusFrac * oneMinusFrac))); } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index b93da4b61f804..dfc7df68e8982 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -31,8 +31,8 @@ import android.view.WindowInsets; import android.view.accessibility.AccessibilityNodeInfo; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.animation.Interpolators; import com.android.systemui.R; +import com.android.systemui.animation.Interpolators; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; @@ -180,7 +180,7 @@ public class NotificationShelf extends ActivatableNotificationView implements if (ambientState.isExpansionChanging() && !ambientState.isOnKeyguard()) { viewState.alpha = Interpolators.getNotificationScrimAlpha( - ambientState.getExpansionFraction()); + ambientState.getExpansionFraction(), true /* notification */); } else { viewState.alpha = 1f - ambientState.getHideAmount(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java index e931ec4626a16..0d34e90908934 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java @@ -24,8 +24,8 @@ import android.util.MathUtils; import android.view.View; import android.view.ViewGroup; -import com.android.systemui.animation.Interpolators; import com.android.systemui.R; +import com.android.systemui.animation.Interpolators; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.notification.dagger.SilentHeader; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; @@ -382,7 +382,7 @@ public class StackScrollAlgorithm { if (ambientState.isExpansionChanging() && !ambientState.isOnKeyguard()) { viewState.alpha = Interpolators.getNotificationScrimAlpha( - ambientState.getExpansionFraction()); + ambientState.getExpansionFraction(), true /* notification */); } else { viewState.alpha = 1f - ambientState.getHideAmount(); } 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 7c63763b43c3b..9b2ed3a711a6d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -883,7 +883,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } private float getInterpolatedFraction() { - return Interpolators.getNotificationScrimAlpha(mPanelExpansion); + return Interpolators.getNotificationScrimAlpha(mPanelExpansion, false /* notification */); } private void setScrimAlpha(ScrimView scrim, float alpha) { 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 a431a781dbb4b..8b0b579bea548 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 @@ -1118,7 +1118,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void testNotificationTransparency_inKeyguardState() { mScrimController.transitionTo(ScrimState.KEYGUARD); - assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.8f); + assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.4f); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.8f, /* expansion */ 0.2f); }