Disable depth effect during split-shade expansion am: 9bfd60ab82

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17745119

Change-Id: Ia2cc8048d8bd2d614fb0d8905580715aed511c41
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Christian Göllner
2022-04-19 10:41:17 +00:00
committed by Automerger Merge Worker
2 changed files with 97 additions and 7 deletions

View File

@@ -19,6 +19,8 @@ package com.android.systemui.statusbar
import android.animation.Animator import android.animation.Animator
import android.animation.AnimatorListenerAdapter import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.content.Context
import android.content.res.Configuration
import android.os.SystemClock import android.os.SystemClock
import android.os.Trace import android.os.Trace
import android.util.IndentingPrintWriter import android.util.IndentingPrintWriter
@@ -41,7 +43,9 @@ import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_
import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.LargeScreenUtils
import com.android.systemui.util.WallpaperController import com.android.systemui.util.WallpaperController
import java.io.PrintWriter import java.io.PrintWriter
import javax.inject.Inject import javax.inject.Inject
@@ -61,7 +65,9 @@ class NotificationShadeDepthController @Inject constructor(
private val wallpaperController: WallpaperController, private val wallpaperController: WallpaperController,
private val notificationShadeWindowController: NotificationShadeWindowController, private val notificationShadeWindowController: NotificationShadeWindowController,
private val dozeParameters: DozeParameters, private val dozeParameters: DozeParameters,
dumpManager: DumpManager private val context: Context,
dumpManager: DumpManager,
configurationController: ConfigurationController
) : PanelExpansionListener, Dumpable { ) : PanelExpansionListener, Dumpable {
companion object { companion object {
private const val WAKE_UP_ANIMATION_ENABLED = true private const val WAKE_UP_ANIMATION_ENABLED = true
@@ -84,6 +90,7 @@ class NotificationShadeDepthController @Inject constructor(
private var isOpen: Boolean = false private var isOpen: Boolean = false
private var isBlurred: Boolean = false private var isBlurred: Boolean = false
private var listeners = mutableListOf<DepthListener>() private var listeners = mutableListOf<DepthListener>()
private var inSplitShade: Boolean = false
private var prevTracking: Boolean = false private var prevTracking: Boolean = false
private var prevTimestamp: Long = -1 private var prevTimestamp: Long = -1
@@ -208,6 +215,10 @@ class NotificationShadeDepthController @Inject constructor(
var zoomOut = MathUtils.saturate(blurUtils.ratioOfBlurRadius(shadeRadius)) var zoomOut = MathUtils.saturate(blurUtils.ratioOfBlurRadius(shadeRadius))
var blur = shadeRadius.toInt() var blur = shadeRadius.toInt()
if (inSplitShade) {
zoomOut = 0f
}
// Make blur be 0 if it is necessary to stop blur effect. // Make blur be 0 if it is necessary to stop blur effect.
if (scrimsVisible) { if (scrimsVisible) {
blur = 0 blur = 0
@@ -306,6 +317,16 @@ class NotificationShadeDepthController @Inject constructor(
} }
shadeAnimation.setStiffness(SpringForce.STIFFNESS_LOW) shadeAnimation.setStiffness(SpringForce.STIFFNESS_LOW)
shadeAnimation.setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY) shadeAnimation.setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY)
updateResources()
configurationController.addCallback(object : ConfigurationController.ConfigurationListener {
override fun onConfigChanged(newConfig: Configuration?) {
updateResources()
}
})
}
private fun updateResources() {
inSplitShade = LargeScreenUtils.shouldUseSplitNotificationShade(context.resources)
} }
fun addListener(listener: DepthListener) { fun addListener(listener: DepthListener) {

View File

@@ -23,6 +23,7 @@ import android.view.Choreographer
import android.view.View import android.view.View
import android.view.ViewRootImpl import android.view.ViewRootImpl
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
@@ -30,18 +31,22 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.policy.FakeConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.WallpaperController import com.android.systemui.util.WallpaperController
import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.eq
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import java.util.function.Consumer
import org.junit.Before import org.junit.Before
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.floatThat
import org.mockito.Captor import org.mockito.Captor
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.Mockito.any import org.mockito.Mockito.any
import org.mockito.Mockito.anyFloat import org.mockito.Mockito.anyFloat
@@ -51,7 +56,6 @@ import org.mockito.Mockito.never
import org.mockito.Mockito.reset import org.mockito.Mockito.reset
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoJUnit
import java.util.function.Consumer
@RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class)
@RunWithLooper @RunWithLooper
@@ -80,6 +84,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
private var statusBarState = StatusBarState.SHADE private var statusBarState = StatusBarState.SHADE
private val maxBlur = 150 private val maxBlur = 150
private lateinit var notificationShadeDepthController: NotificationShadeDepthController private lateinit var notificationShadeDepthController: NotificationShadeDepthController
private val configurationController = FakeConfigurationController()
@Before @Before
fun setup() { fun setup() {
@@ -97,10 +102,19 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
`when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur)
`when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur)
notificationShadeDepthController = NotificationShadeDepthController( notificationShadeDepthController =
statusBarStateController, blurUtils, biometricUnlockController, NotificationShadeDepthController(
keyguardStateController, choreographer, wallpaperController, statusBarStateController,
notificationShadeWindowController, dozeParameters, dumpManager) blurUtils,
biometricUnlockController,
keyguardStateController,
choreographer,
wallpaperController,
notificationShadeWindowController,
dozeParameters,
context,
dumpManager,
configurationController)
notificationShadeDepthController.shadeAnimation = shadeAnimation notificationShadeDepthController.shadeAnimation = shadeAnimation
notificationShadeDepthController.brightnessMirrorSpring = brightnessSpring notificationShadeDepthController.brightnessMirrorSpring = brightnessSpring
notificationShadeDepthController.root = root notificationShadeDepthController.root = root
@@ -110,6 +124,8 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
statusBarStateListener = captor.value statusBarStateListener = captor.value
verify(notificationShadeWindowController) verify(notificationShadeWindowController)
.setScrimsVisibilityListener(scrimVisibilityCaptor.capture()) .setScrimsVisibilityListener(scrimVisibilityCaptor.capture())
disableSplitShade()
} }
@Test @Test
@@ -225,6 +241,46 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
eq(ShadeInterpolation.getNotificationScrimAlpha(0.25f))) eq(ShadeInterpolation.getNotificationScrimAlpha(0.25f)))
} }
@Test
fun expandPanel_inSplitShade_setsZoomToZero() {
enableSplitShade()
notificationShadeDepthController.onPanelExpansionChanged(
rawFraction = 1f, expanded = true, tracking = false)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
verify(wallpaperController).setNotificationShadeZoom(0f)
}
@Test
fun expandPanel_notInSplitShade_setsZoomValue() {
disableSplitShade()
notificationShadeDepthController.onPanelExpansionChanged(
rawFraction = 1f, expanded = true, tracking = false)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
verify(wallpaperController).setNotificationShadeZoom(floatThat { it > 0 })
}
@Test
fun expandPanel_splitShadeEnabledChanged_setsCorrectZoomValueAfterChange() {
disableSplitShade()
val rawFraction = 1f
val expanded = true
val tracking = false
val inOrder = Mockito.inOrder(wallpaperController)
notificationShadeDepthController.onPanelExpansionChanged(rawFraction, expanded, tracking)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
inOrder.verify(wallpaperController).setNotificationShadeZoom(floatThat { it > 0 })
enableSplitShade()
notificationShadeDepthController.onPanelExpansionChanged(rawFraction, expanded, tracking)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
inOrder.verify(wallpaperController).setNotificationShadeZoom(0f)
}
@Test @Test
fun setFullShadeTransition_appliesBlur() { fun setFullShadeTransition_appliesBlur() {
notificationShadeDepthController.transitionToFullShadeProgress = 1f notificationShadeDepthController.transitionToFullShadeProgress = 1f
@@ -369,4 +425,17 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
notificationShadeDepthController.blursDisabledForAppLaunch = true notificationShadeDepthController.blursDisabledForAppLaunch = true
verify(shadeAnimation, never()).animateTo(anyInt(), any()) verify(shadeAnimation, never()).animateTo(anyInt(), any())
} }
private fun enableSplitShade() {
setSplitShadeEnabled(true)
}
private fun disableSplitShade() {
setSplitShadeEnabled(false)
}
private fun setSplitShadeEnabled(enabled: Boolean) {
overrideResource(R.bool.config_use_split_notification_shade, enabled)
configurationController.notifyConfigurationChanged()
}
} }