From fedad0162bf55e7982ac1f8ee83c5d4edcc7ef07 Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Wed, 2 Jun 2021 18:20:49 +0200 Subject: [PATCH] Scaling back the wallpaper + blurring when dragging down on LS Previously, the wallpaper didn't react during drag down. Bug: 184946919 Test: drag down on lockscreen, observe animation happening Change-Id: I67e0d819a81cc1f9c765a50cfef7767c08dccfc8 --- packages/SystemUI/res/values/dimens.xml | 2 +- .../LockscreenShadeTransitionController.kt | 2 ++ .../NotificationShadeDepthController.kt | 23 +++++++++++++++---- ...LockscreenShadeTransitionControllerTest.kt | 5 +++- .../NotificationShadeDepthControllerTest.kt | 7 ++++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ab606babe804d..a7c1cfe01b9ad 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1429,7 +1429,7 @@ - 140dp + 120dp diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt index 4ed376ace8c8a..4a4e990728f38 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt @@ -58,6 +58,7 @@ class LockscreenShadeTransitionController @Inject constructor( private val displayMetrics: DisplayMetrics, private val mediaHierarchyManager: MediaHierarchyManager, private val scrimController: ScrimController, + private val depthController: NotificationShadeDepthController, private val featureFlags: FeatureFlags, private val context: Context, configurationController: ConfigurationController, @@ -289,6 +290,7 @@ class LockscreenShadeTransitionController @Inject constructor( mediaHierarchyManager.setTransitionToFullShadeAmount(mediaAmount) // Fade out all content only visible on the lockscreen notificationPanelController.setKeyguardOnlyContentAlpha(1.0f - scrimProgress) + depthController.transitionToFullShadeProgress = scrimProgress } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index b7e8bfb3f2d1b..647ab65ba352d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -105,6 +105,16 @@ class NotificationShadeDepthController @Inject constructor( scheduleUpdate() } + /** + * How much we're transitioning to the full shade + */ + var transitionToFullShadeProgress = 0f + set(value) { + if (field == value) return + field = value + scheduleUpdate() + } + /** * When launching an app from the shade, the animations progress should affect how blurry the * shade is, overriding the expansion amount. @@ -159,6 +169,7 @@ class NotificationShadeDepthController @Inject constructor( var combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION + normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt() combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsPanelExpansion)) + combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress)) var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat() val launchProgress = notificationLaunchAnimationParams?.linearProgress ?: 0f shadeRadius *= (1f - launchProgress) * (1f - launchProgress) @@ -323,7 +334,7 @@ class NotificationShadeDepthController @Inject constructor( velocity: Float, direction: Int ) { - if (isOnKeyguardNotDismissing()) { + if (shouldApplyShadeBlur()) { if (expansion > 0f) { // Blur view if user starts animating in the shade. if (isClosed) { @@ -370,7 +381,7 @@ class NotificationShadeDepthController @Inject constructor( private fun animateBlur(blur: Boolean, velocity: Float) { isBlurred = blur - val targetBlurNormalized = if (blur && isOnKeyguardNotDismissing()) { + val targetBlurNormalized = if (blur && shouldApplyShadeBlur()) { 1f } else { 0f @@ -382,7 +393,7 @@ class NotificationShadeDepthController @Inject constructor( private fun updateShadeBlur() { var newBlur = 0 - if (isOnKeyguardNotDismissing()) { + if (shouldApplyShadeBlur()) { newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion) } shadeSpring.animateTo(newBlur) @@ -397,7 +408,11 @@ class NotificationShadeDepthController @Inject constructor( choreographer.postFrameCallback(updateBlurCallback) } - private fun isOnKeyguardNotDismissing(): Boolean { + /** + * Should blur be applied to the shade currently. This is mainly used to make sure that + * on the lockscreen, the wallpaper isn't blurred. + */ + private fun shouldApplyShadeBlur(): Boolean { val state = statusBarStateController.state return (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) && !keyguardStateController.isKeyguardFadingAway diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt index 18b6c3074d080..18cf1c8ebaa6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt @@ -68,6 +68,7 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { @Mock lateinit var notificationPanelController: NotificationPanelViewController @Mock lateinit var nsslController: NotificationStackScrollLayoutController @Mock lateinit var featureFlags: FeatureFlags + @Mock lateinit var depthController: NotificationShadeDepthController @Mock lateinit var stackscroller: NotificationStackScrollLayout @Mock lateinit var expandHelperCallback: ExpandHelper.Callback @Mock lateinit var statusbar: StatusBar @@ -94,7 +95,8 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { featureFlags = featureFlags, context = context, configurationController = configurationController, - falsingManager = falsingManager + falsingManager = falsingManager, + depthController = depthController ) whenever(nsslController.view).thenReturn(stackscroller) whenever(nsslController.expandHelperCallback).thenReturn(expandHelperCallback) @@ -221,5 +223,6 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { verify(notificationPanelController).setTransitionToFullShadeAmount(anyFloat(), anyBoolean(), anyLong()) verify(qS).setTransitionToFullShadeAmount(anyFloat(), anyBoolean()) + verify(depthController).transitionToFullShadeProgress = anyFloat() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt index 4169cdd9eb126..3d6692bcde4c5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt @@ -184,6 +184,13 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) } + @Test + fun setFullShadeTransition_appliesBlur() { + notificationShadeDepthController.transitionToFullShadeProgress = 1f + notificationShadeDepthController.updateBlurCallback.doFrame(0) + verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) + } + @Test fun updateGlobalDialogVisibility_animatesBlur() { notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root)