Merge "Scaling back the wallpaper + blurring when dragging down on LS" into sc-dev

This commit is contained in:
Selim Cinek
2021-06-04 13:16:43 +00:00
committed by Android (Google) Code Review
5 changed files with 33 additions and 6 deletions

View File

@@ -1427,7 +1427,7 @@
<!-- Distance that the full shade transition takes in order for media to fully transition to <!-- Distance that the full shade transition takes in order for media to fully transition to
the shade --> the shade -->
<dimen name="lockscreen_shade_media_transition_distance">140dp</dimen> <dimen name="lockscreen_shade_media_transition_distance">120dp</dimen>
<!-- Maximum overshoot for the topPadding of notifications when transitioning to the full <!-- Maximum overshoot for the topPadding of notifications when transitioning to the full
shade --> shade -->

View File

@@ -58,6 +58,7 @@ class LockscreenShadeTransitionController @Inject constructor(
private val displayMetrics: DisplayMetrics, private val displayMetrics: DisplayMetrics,
private val mediaHierarchyManager: MediaHierarchyManager, private val mediaHierarchyManager: MediaHierarchyManager,
private val scrimController: ScrimController, private val scrimController: ScrimController,
private val depthController: NotificationShadeDepthController,
private val featureFlags: FeatureFlags, private val featureFlags: FeatureFlags,
private val context: Context, private val context: Context,
configurationController: ConfigurationController, configurationController: ConfigurationController,
@@ -289,6 +290,7 @@ class LockscreenShadeTransitionController @Inject constructor(
mediaHierarchyManager.setTransitionToFullShadeAmount(mediaAmount) mediaHierarchyManager.setTransitionToFullShadeAmount(mediaAmount)
// Fade out all content only visible on the lockscreen // Fade out all content only visible on the lockscreen
notificationPanelController.setKeyguardOnlyContentAlpha(1.0f - scrimProgress) notificationPanelController.setKeyguardOnlyContentAlpha(1.0f - scrimProgress)
depthController.transitionToFullShadeProgress = scrimProgress
} }
} }
} }

View File

@@ -105,6 +105,16 @@ class NotificationShadeDepthController @Inject constructor(
scheduleUpdate() 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 * When launching an app from the shade, the animations progress should affect how blurry the
* shade is, overriding the expansion amount. * shade is, overriding the expansion amount.
@@ -159,6 +169,7 @@ class NotificationShadeDepthController @Inject constructor(
var combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION + var combinedBlur = (shadeSpring.radius * INTERACTION_BLUR_FRACTION +
normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt() normalizedBlurRadius * ANIMATION_BLUR_FRACTION).toInt()
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsPanelExpansion)) combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsPanelExpansion))
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress))
var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat() var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius).toFloat()
val launchProgress = notificationLaunchAnimationParams?.linearProgress ?: 0f val launchProgress = notificationLaunchAnimationParams?.linearProgress ?: 0f
shadeRadius *= (1f - launchProgress) * (1f - launchProgress) shadeRadius *= (1f - launchProgress) * (1f - launchProgress)
@@ -323,7 +334,7 @@ class NotificationShadeDepthController @Inject constructor(
velocity: Float, velocity: Float,
direction: Int direction: Int
) { ) {
if (isOnKeyguardNotDismissing()) { if (shouldApplyShadeBlur()) {
if (expansion > 0f) { if (expansion > 0f) {
// Blur view if user starts animating in the shade. // Blur view if user starts animating in the shade.
if (isClosed) { if (isClosed) {
@@ -370,7 +381,7 @@ class NotificationShadeDepthController @Inject constructor(
private fun animateBlur(blur: Boolean, velocity: Float) { private fun animateBlur(blur: Boolean, velocity: Float) {
isBlurred = blur isBlurred = blur
val targetBlurNormalized = if (blur && isOnKeyguardNotDismissing()) { val targetBlurNormalized = if (blur && shouldApplyShadeBlur()) {
1f 1f
} else { } else {
0f 0f
@@ -382,7 +393,7 @@ class NotificationShadeDepthController @Inject constructor(
private fun updateShadeBlur() { private fun updateShadeBlur() {
var newBlur = 0 var newBlur = 0
if (isOnKeyguardNotDismissing()) { if (shouldApplyShadeBlur()) {
newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion) newBlur = blurUtils.blurRadiusOfRatio(shadeExpansion)
} }
shadeSpring.animateTo(newBlur) shadeSpring.animateTo(newBlur)
@@ -397,7 +408,11 @@ class NotificationShadeDepthController @Inject constructor(
choreographer.postFrameCallback(updateBlurCallback) 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 val state = statusBarStateController.state
return (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) && return (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) &&
!keyguardStateController.isKeyguardFadingAway !keyguardStateController.isKeyguardFadingAway

View File

@@ -68,6 +68,7 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() {
@Mock lateinit var notificationPanelController: NotificationPanelViewController @Mock lateinit var notificationPanelController: NotificationPanelViewController
@Mock lateinit var nsslController: NotificationStackScrollLayoutController @Mock lateinit var nsslController: NotificationStackScrollLayoutController
@Mock lateinit var featureFlags: FeatureFlags @Mock lateinit var featureFlags: FeatureFlags
@Mock lateinit var depthController: NotificationShadeDepthController
@Mock lateinit var stackscroller: NotificationStackScrollLayout @Mock lateinit var stackscroller: NotificationStackScrollLayout
@Mock lateinit var expandHelperCallback: ExpandHelper.Callback @Mock lateinit var expandHelperCallback: ExpandHelper.Callback
@Mock lateinit var statusbar: StatusBar @Mock lateinit var statusbar: StatusBar
@@ -94,7 +95,8 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() {
featureFlags = featureFlags, featureFlags = featureFlags,
context = context, context = context,
configurationController = configurationController, configurationController = configurationController,
falsingManager = falsingManager falsingManager = falsingManager,
depthController = depthController
) )
whenever(nsslController.view).thenReturn(stackscroller) whenever(nsslController.view).thenReturn(stackscroller)
whenever(nsslController.expandHelperCallback).thenReturn(expandHelperCallback) whenever(nsslController.expandHelperCallback).thenReturn(expandHelperCallback)
@@ -221,5 +223,6 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() {
verify(notificationPanelController).setTransitionToFullShadeAmount(anyFloat(), verify(notificationPanelController).setTransitionToFullShadeAmount(anyFloat(),
anyBoolean(), anyLong()) anyBoolean(), anyLong())
verify(qS).setTransitionToFullShadeAmount(anyFloat(), anyBoolean()) verify(qS).setTransitionToFullShadeAmount(anyFloat(), anyBoolean())
verify(depthController).transitionToFullShadeProgress = anyFloat()
} }
} }

View File

@@ -184,6 +184,13 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) 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 @Test
fun updateGlobalDialogVisibility_animatesBlur() { fun updateGlobalDialogVisibility_animatesBlur() {
notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root) notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root)