Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +15 −9 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.res.R import com.android.systemui.shade.ShadeExpansionChangeEvent import com.android.systemui.shared.Flags as SharedFlags import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.ScrimController Loading @@ -44,11 +43,10 @@ import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController import com.android.systemui.testKosmos import com.android.systemui.util.WallpaperController import com.android.systemui.util.mockito.eq import com.android.systemui.wallpapers.domain.interactor.WallpaperInteractor import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import com.android.wm.shell.appzoomout.AppZoomOut import com.google.common.truth.Truth.assertThat import java.util.Optional import java.util.function.Consumer import org.junit.Before import org.junit.Rule import org.junit.Test Loading @@ -69,6 +67,8 @@ import org.mockito.Mockito.reset import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.mockito.junit.MockitoJUnit import java.util.Optional import java.util.function.Consumer @RunWith(AndroidJUnit4::class) @RunWithLooper Loading @@ -76,6 +76,7 @@ import org.mockito.junit.MockitoJUnit class NotificationShadeDepthControllerTest : SysuiTestCase() { private val kosmos = testKosmos() private val applicationScope = kosmos.testScope.backgroundScope @Mock private lateinit var windowRootViewBlurInteractor: WindowRootViewBlurInteractor @Mock private lateinit var statusBarStateController: StatusBarStateController @Mock private lateinit var blurUtils: BlurUtils Loading @@ -84,6 +85,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Mock private lateinit var keyguardInteractor: KeyguardInteractor @Mock private lateinit var choreographer: Choreographer @Mock private lateinit var wallpaperController: WallpaperController @Mock private lateinit var wallpaperInteractor: WallpaperInteractor @Mock private lateinit var notificationShadeWindowController: NotificationShadeWindowController @Mock private lateinit var dumpManager: DumpManager @Mock private lateinit var appZoomOutOptional: Optional<AppZoomOut> Loading Loading @@ -128,12 +130,14 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { keyguardInteractor, choreographer, wallpaperController, wallpaperInteractor, notificationShadeWindowController, dozeParameters, context, ResourcesSplitShadeStateController(), windowRootViewBlurInteractor, appZoomOutOptional, applicationScope, dumpManager, configurationController, ) Loading Loading @@ -310,19 +314,21 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { } @Test @DisableFlags(SharedFlags.FLAG_AMBIENT_AOD) fun onDozeAmountChanged_appliesBlur() { fun onDozeAmountChanged_doesNotApplyBlurWithAmbientAod() { notificationShadeDepthController.wallpaperSupportsAmbientMode = false statusBarStateListener.onDozeAmountChanged(1f, 1f) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) verify(blurUtils).applyBlur(any(), eq(0), eq(false)) } @Test @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD) fun onDozeAmountChanged_doesNotApplyBlurWithAmbientAod() { fun onDozeAmountChanged_appliesBlurWithAmbientAod() { notificationShadeDepthController.wallpaperSupportsAmbientMode = true statusBarStateListener.onDozeAmountChanged(1f, 1f) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(0), eq(false)) verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) } @Test Loading packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +45 −15 Original line number Diff line number Diff line Loading @@ -38,13 +38,13 @@ import com.android.systemui.Flags import com.android.systemui.Flags.spatialModelAppPushback import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.ShadeDisplayAware import com.android.systemui.shade.ShadeExpansionChangeEvent import com.android.systemui.shade.ShadeExpansionListener import com.android.systemui.shared.Flags.ambientAod import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK import com.android.systemui.statusbar.phone.DozeParameters Loading @@ -53,6 +53,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.SplitShadeStateController import com.android.systemui.util.WallpaperController import com.android.systemui.wallpapers.domain.interactor.WallpaperInteractor import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import com.android.wm.shell.appzoomout.AppZoomOut import java.io.PrintWriter Loading @@ -78,12 +79,14 @@ constructor( private val keyguardInteractor: KeyguardInteractor, private val choreographer: Choreographer, private val wallpaperController: WallpaperController, private val wallpaperInteractor: WallpaperInteractor, private val notificationShadeWindowController: NotificationShadeWindowController, private val dozeParameters: DozeParameters, @ShadeDisplayAware private val context: Context, private val splitShadeStateController: SplitShadeStateController, private val windowRootViewBlurInteractor: WindowRootViewBlurInteractor, private val appZoomOutOptional: Optional<AppZoomOut>, @Application private val applicationScope: CoroutineScope, dumpManager: DumpManager, configurationController: ConfigurationController, ) : ShadeExpansionListener, Dumpable { Loading Loading @@ -113,6 +116,8 @@ constructor( private var prevTimestamp: Long = -1 private var prevShadeDirection = 0 private var prevShadeVelocity = 0f private var prevDozeAmount: Float = 0f @VisibleForTesting var wallpaperSupportsAmbientMode: Boolean = false // tracks whether app launch transition is in progress. This involves two independent factors // that control blur, shade expansion and app launch animation from outside sysui. // They can complete out of order, this flag will be reset by the animation that finishes later. Loading Loading @@ -228,8 +233,10 @@ constructor( scheduleUpdate() } /** Blur radius of the wake-up animation on this frame. */ private var wakeAndUnlockBlurRadius = 0f private data class WakeAndUnlockBlurData(val radius: Float, val useZoom: Boolean = true) /** Blur radius of the wake and unlock animation on this frame, and whether to zoom out. */ private var wakeAndUnlockBlurData = WakeAndUnlockBlurData(0f) set(value) { if (field == value) return field = value Loading @@ -256,14 +263,18 @@ constructor( ShadeInterpolation.getNotificationScrimAlpha(qsPanelExpansion) * shadeExpansion combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsExpandedRatio)) combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress)) var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius) var shadeRadius = max(combinedBlur, wakeAndUnlockBlurData.radius) if (areBlursDisabledForAppLaunch || blursDisabledForUnlock) { shadeRadius = 0f } var blur = shadeRadius.toInt() val zoomOut = blurRadiusToZoomOut(blurRadius = shadeRadius) // If the blur comes from waking up, we don't want to zoom out the background val zoomOut = if (shadeRadius != wakeAndUnlockBlurData.radius|| wakeAndUnlockBlurData.useZoom) blurRadiusToZoomOut(blurRadius = shadeRadius) else 0f // Make blur be 0 if it is necessary to stop blur effect. if (scrimsVisible) { if (!Flags.notificationShadeBlur()) { Loading Loading @@ -348,14 +359,14 @@ constructor( startDelay = keyguardStateController.keyguardFadingAwayDelay interpolator = Interpolators.FAST_OUT_SLOW_IN addUpdateListener { animation: ValueAnimator -> wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(animation.animatedValue as Float) wakeAndUnlockBlurData = WakeAndUnlockBlurData(blurUtils.blurRadiusOfRatio(animation.animatedValue as Float)) } addListener( object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { keyguardAnimator = null wakeAndUnlockBlurRadius = 0f wakeAndUnlockBlurData = WakeAndUnlockBlurData(0f) } } ) Loading Loading @@ -391,12 +402,20 @@ constructor( } override fun onDozeAmountChanged(linear: Float, eased: Float) { wakeAndUnlockBlurRadius = if (ambientAod()) { prevDozeAmount = eased updateWakeBlurRadius(prevDozeAmount) } } private fun updateWakeBlurRadius(ratio: Float) { wakeAndUnlockBlurData = WakeAndUnlockBlurData(getNewWakeBlurRadius(ratio), false) } private fun getNewWakeBlurRadius(ratio: Float): Float { return if (!wallpaperSupportsAmbientMode) { 0f } else { blurUtils.blurRadiusOfRatio(eased) } blurUtils.blurRadiusOfRatio(ratio) } } Loading @@ -421,6 +440,16 @@ constructor( } } ) applicationScope.launch { wallpaperInteractor.wallpaperSupportsAmbientMode.collect { supported -> wallpaperSupportsAmbientMode = supported if (getNewWakeBlurRadius(prevDozeAmount) == wakeAndUnlockBlurData.radius && !wakeAndUnlockBlurData.useZoom) { // Update wake and unlock radius only if the previous value comes from wake-up. updateWakeBlurRadius(prevDozeAmount) } } } initBlurListeners() } Loading Loading @@ -611,7 +640,8 @@ constructor( it.println("shouldApplyShadeBlur: ${shouldApplyShadeBlur()}") it.println("shadeAnimation: ${shadeAnimation.radius}") it.println("brightnessMirrorRadius: ${brightnessMirrorSpring.radius}") it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius") it.println("wakeAndUnlockBlurRadius: ${wakeAndUnlockBlurData.radius}") it.println("wakeAndUnlockBlurUsesZoom: ${wakeAndUnlockBlurData.useZoom}") it.println("blursDisabledForAppLaunch: $blursDisabledForAppLaunch") it.println("appLaunchTransitionIsInProgress: $appLaunchTransitionIsInProgress") it.println("qsPanelExpansion: $qsPanelExpansion") Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt +15 −9 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.res.R import com.android.systemui.shade.ShadeExpansionChangeEvent import com.android.systemui.shared.Flags as SharedFlags import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.ScrimController Loading @@ -44,11 +43,10 @@ import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController import com.android.systemui.testKosmos import com.android.systemui.util.WallpaperController import com.android.systemui.util.mockito.eq import com.android.systemui.wallpapers.domain.interactor.WallpaperInteractor import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import com.android.wm.shell.appzoomout.AppZoomOut import com.google.common.truth.Truth.assertThat import java.util.Optional import java.util.function.Consumer import org.junit.Before import org.junit.Rule import org.junit.Test Loading @@ -69,6 +67,8 @@ import org.mockito.Mockito.reset import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.mockito.junit.MockitoJUnit import java.util.Optional import java.util.function.Consumer @RunWith(AndroidJUnit4::class) @RunWithLooper Loading @@ -76,6 +76,7 @@ import org.mockito.junit.MockitoJUnit class NotificationShadeDepthControllerTest : SysuiTestCase() { private val kosmos = testKosmos() private val applicationScope = kosmos.testScope.backgroundScope @Mock private lateinit var windowRootViewBlurInteractor: WindowRootViewBlurInteractor @Mock private lateinit var statusBarStateController: StatusBarStateController @Mock private lateinit var blurUtils: BlurUtils Loading @@ -84,6 +85,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { @Mock private lateinit var keyguardInteractor: KeyguardInteractor @Mock private lateinit var choreographer: Choreographer @Mock private lateinit var wallpaperController: WallpaperController @Mock private lateinit var wallpaperInteractor: WallpaperInteractor @Mock private lateinit var notificationShadeWindowController: NotificationShadeWindowController @Mock private lateinit var dumpManager: DumpManager @Mock private lateinit var appZoomOutOptional: Optional<AppZoomOut> Loading Loading @@ -128,12 +130,14 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { keyguardInteractor, choreographer, wallpaperController, wallpaperInteractor, notificationShadeWindowController, dozeParameters, context, ResourcesSplitShadeStateController(), windowRootViewBlurInteractor, appZoomOutOptional, applicationScope, dumpManager, configurationController, ) Loading Loading @@ -310,19 +314,21 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() { } @Test @DisableFlags(SharedFlags.FLAG_AMBIENT_AOD) fun onDozeAmountChanged_appliesBlur() { fun onDozeAmountChanged_doesNotApplyBlurWithAmbientAod() { notificationShadeDepthController.wallpaperSupportsAmbientMode = false statusBarStateListener.onDozeAmountChanged(1f, 1f) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) verify(blurUtils).applyBlur(any(), eq(0), eq(false)) } @Test @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD) fun onDozeAmountChanged_doesNotApplyBlurWithAmbientAod() { fun onDozeAmountChanged_appliesBlurWithAmbientAod() { notificationShadeDepthController.wallpaperSupportsAmbientMode = true statusBarStateListener.onDozeAmountChanged(1f, 1f) notificationShadeDepthController.updateBlurCallback.doFrame(0) verify(blurUtils).applyBlur(any(), eq(0), eq(false)) verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) } @Test Loading
packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +45 −15 Original line number Diff line number Diff line Loading @@ -38,13 +38,13 @@ import com.android.systemui.Flags import com.android.systemui.Flags.spatialModelAppPushback import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.ShadeDisplayAware import com.android.systemui.shade.ShadeExpansionChangeEvent import com.android.systemui.shade.ShadeExpansionListener import com.android.systemui.shared.Flags.ambientAod import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK import com.android.systemui.statusbar.phone.DozeParameters Loading @@ -53,6 +53,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.SplitShadeStateController import com.android.systemui.util.WallpaperController import com.android.systemui.wallpapers.domain.interactor.WallpaperInteractor import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import com.android.wm.shell.appzoomout.AppZoomOut import java.io.PrintWriter Loading @@ -78,12 +79,14 @@ constructor( private val keyguardInteractor: KeyguardInteractor, private val choreographer: Choreographer, private val wallpaperController: WallpaperController, private val wallpaperInteractor: WallpaperInteractor, private val notificationShadeWindowController: NotificationShadeWindowController, private val dozeParameters: DozeParameters, @ShadeDisplayAware private val context: Context, private val splitShadeStateController: SplitShadeStateController, private val windowRootViewBlurInteractor: WindowRootViewBlurInteractor, private val appZoomOutOptional: Optional<AppZoomOut>, @Application private val applicationScope: CoroutineScope, dumpManager: DumpManager, configurationController: ConfigurationController, ) : ShadeExpansionListener, Dumpable { Loading Loading @@ -113,6 +116,8 @@ constructor( private var prevTimestamp: Long = -1 private var prevShadeDirection = 0 private var prevShadeVelocity = 0f private var prevDozeAmount: Float = 0f @VisibleForTesting var wallpaperSupportsAmbientMode: Boolean = false // tracks whether app launch transition is in progress. This involves two independent factors // that control blur, shade expansion and app launch animation from outside sysui. // They can complete out of order, this flag will be reset by the animation that finishes later. Loading Loading @@ -228,8 +233,10 @@ constructor( scheduleUpdate() } /** Blur radius of the wake-up animation on this frame. */ private var wakeAndUnlockBlurRadius = 0f private data class WakeAndUnlockBlurData(val radius: Float, val useZoom: Boolean = true) /** Blur radius of the wake and unlock animation on this frame, and whether to zoom out. */ private var wakeAndUnlockBlurData = WakeAndUnlockBlurData(0f) set(value) { if (field == value) return field = value Loading @@ -256,14 +263,18 @@ constructor( ShadeInterpolation.getNotificationScrimAlpha(qsPanelExpansion) * shadeExpansion combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsExpandedRatio)) combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress)) var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius) var shadeRadius = max(combinedBlur, wakeAndUnlockBlurData.radius) if (areBlursDisabledForAppLaunch || blursDisabledForUnlock) { shadeRadius = 0f } var blur = shadeRadius.toInt() val zoomOut = blurRadiusToZoomOut(blurRadius = shadeRadius) // If the blur comes from waking up, we don't want to zoom out the background val zoomOut = if (shadeRadius != wakeAndUnlockBlurData.radius|| wakeAndUnlockBlurData.useZoom) blurRadiusToZoomOut(blurRadius = shadeRadius) else 0f // Make blur be 0 if it is necessary to stop blur effect. if (scrimsVisible) { if (!Flags.notificationShadeBlur()) { Loading Loading @@ -348,14 +359,14 @@ constructor( startDelay = keyguardStateController.keyguardFadingAwayDelay interpolator = Interpolators.FAST_OUT_SLOW_IN addUpdateListener { animation: ValueAnimator -> wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(animation.animatedValue as Float) wakeAndUnlockBlurData = WakeAndUnlockBlurData(blurUtils.blurRadiusOfRatio(animation.animatedValue as Float)) } addListener( object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { keyguardAnimator = null wakeAndUnlockBlurRadius = 0f wakeAndUnlockBlurData = WakeAndUnlockBlurData(0f) } } ) Loading Loading @@ -391,12 +402,20 @@ constructor( } override fun onDozeAmountChanged(linear: Float, eased: Float) { wakeAndUnlockBlurRadius = if (ambientAod()) { prevDozeAmount = eased updateWakeBlurRadius(prevDozeAmount) } } private fun updateWakeBlurRadius(ratio: Float) { wakeAndUnlockBlurData = WakeAndUnlockBlurData(getNewWakeBlurRadius(ratio), false) } private fun getNewWakeBlurRadius(ratio: Float): Float { return if (!wallpaperSupportsAmbientMode) { 0f } else { blurUtils.blurRadiusOfRatio(eased) } blurUtils.blurRadiusOfRatio(ratio) } } Loading @@ -421,6 +440,16 @@ constructor( } } ) applicationScope.launch { wallpaperInteractor.wallpaperSupportsAmbientMode.collect { supported -> wallpaperSupportsAmbientMode = supported if (getNewWakeBlurRadius(prevDozeAmount) == wakeAndUnlockBlurData.radius && !wakeAndUnlockBlurData.useZoom) { // Update wake and unlock radius only if the previous value comes from wake-up. updateWakeBlurRadius(prevDozeAmount) } } } initBlurListeners() } Loading Loading @@ -611,7 +640,8 @@ constructor( it.println("shouldApplyShadeBlur: ${shouldApplyShadeBlur()}") it.println("shadeAnimation: ${shadeAnimation.radius}") it.println("brightnessMirrorRadius: ${brightnessMirrorSpring.radius}") it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius") it.println("wakeAndUnlockBlurRadius: ${wakeAndUnlockBlurData.radius}") it.println("wakeAndUnlockBlurUsesZoom: ${wakeAndUnlockBlurData.useZoom}") it.println("blursDisabledForAppLaunch: $blursDisabledForAppLaunch") it.println("appLaunchTransitionIsInProgress: $appLaunchTransitionIsInProgress") it.println("qsPanelExpansion: $qsPanelExpansion") Loading