Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToGoneTransitionViewModel.kt +20 −13 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.AOD import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds Loading @@ -33,9 +34,7 @@ import kotlinx.coroutines.flow.Flow @SysUISingleton class AodToGoneTransitionViewModel @Inject constructor( animationFlow: KeyguardTransitionAnimationFlow, ) : DeviceEntryIconTransition { constructor(animationFlow: KeyguardTransitionAnimationFlow) : DeviceEntryIconTransition { private val transitionAnimation = animationFlow Loading @@ -43,9 +42,7 @@ constructor( duration = FromAodTransitionInteractor.TO_GONE_DURATION, edge = Edge.create(from = AOD, to = Scenes.Gone), ) .setupWithoutSceneContainer( edge = Edge.create(from = AOD, to = GONE), ) .setupWithoutSceneContainer(edge = Edge.create(from = AOD, to = GONE)) /** * AOD -> GONE should fade out the lockscreen contents. This transition plays both during wake Loading @@ -62,6 +59,15 @@ constructor( } fun notificationAlpha(viewState: ViewStateAccessor): Flow<Float> { if (SceneContainerFlag.isEnabled) { // Keep notifications hidden until the end of the transition to prevent flickers, then // reset the alpha to 1. return transitionAnimation.sharedFlow( duration = 200.milliseconds, onStep = { 0f }, onFinish = { 1f }, ) } else { var startAlpha = 1f return transitionAnimation.sharedFlow( duration = 200.milliseconds, Loading @@ -70,6 +76,7 @@ constructor( onFinish = { 1f }, ) } } override val deviceEntryParentViewAlpha = transitionAnimation.immediatelyTransitionTo(0f) } packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToGoneTransitionViewModel.kt +42 −20 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.KeyguardBypassController import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.flow.Flow Loading @@ -41,6 +42,7 @@ class LockscreenToGoneTransitionViewModel constructor( animationFlow: KeyguardTransitionAnimationFlow, private val statusBarStateController: SysuiStatusBarStateController, private val keyguardBypassController: KeyguardBypassController, ) : DeviceEntryIconTransition { private val transitionAnimation: FlowBuilder = Loading @@ -62,11 +64,32 @@ constructor( fun notificationAlpha(viewState: ViewStateAccessor): Flow<Float> { var startAlpha = 1f var leaveShadeOpen = false val endAction: (() -> Float)? = if (SceneContainerFlag.isEnabled) { { 1f } } else null var bypassEnabled = false return transitionAnimation.sharedFlow( duration = 80.milliseconds, onStart = { leaveShadeOpen = statusBarStateController.leaveOpenOnKeyguardHide() bypassEnabled = keyguardBypassController.isBypassEnabled() startAlpha = viewState.alpha() }, onStep = { if (leaveShadeOpen) { 1f } else if (bypassEnabled) { // Keep notifications hidden until the end of the transition if bypass is // enabled, to prevent flickers. 0f } else { MathUtils.lerp(startAlpha, 0f, it) } }, onFinish = { 1f }, onCancel = { 1f }, ) } else { return transitionAnimation.sharedFlow( duration = 80.milliseconds, onStart = { Loading @@ -80,10 +103,9 @@ constructor( MathUtils.lerp(startAlpha, 0f, it) } }, onFinish = endAction, onCancel = endAction, ) } } fun lockscreenAlpha(viewState: ViewStateAccessor): Flow<Float> { var startAlpha = 1f Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToGoneTransitionViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -19,11 +19,13 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.statusbar.phone.keyguardBypassController import com.android.systemui.statusbar.sysuiStatusBarStateController val Kosmos.lockscreenToGoneTransitionViewModel by Fixture { LockscreenToGoneTransitionViewModel( animationFlow = keyguardTransitionAnimationFlow, statusBarStateController = sysuiStatusBarStateController, keyguardBypassController = keyguardBypassController, ) } Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToGoneTransitionViewModel.kt +20 −13 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.AOD import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds Loading @@ -33,9 +34,7 @@ import kotlinx.coroutines.flow.Flow @SysUISingleton class AodToGoneTransitionViewModel @Inject constructor( animationFlow: KeyguardTransitionAnimationFlow, ) : DeviceEntryIconTransition { constructor(animationFlow: KeyguardTransitionAnimationFlow) : DeviceEntryIconTransition { private val transitionAnimation = animationFlow Loading @@ -43,9 +42,7 @@ constructor( duration = FromAodTransitionInteractor.TO_GONE_DURATION, edge = Edge.create(from = AOD, to = Scenes.Gone), ) .setupWithoutSceneContainer( edge = Edge.create(from = AOD, to = GONE), ) .setupWithoutSceneContainer(edge = Edge.create(from = AOD, to = GONE)) /** * AOD -> GONE should fade out the lockscreen contents. This transition plays both during wake Loading @@ -62,6 +59,15 @@ constructor( } fun notificationAlpha(viewState: ViewStateAccessor): Flow<Float> { if (SceneContainerFlag.isEnabled) { // Keep notifications hidden until the end of the transition to prevent flickers, then // reset the alpha to 1. return transitionAnimation.sharedFlow( duration = 200.milliseconds, onStep = { 0f }, onFinish = { 1f }, ) } else { var startAlpha = 1f return transitionAnimation.sharedFlow( duration = 200.milliseconds, Loading @@ -70,6 +76,7 @@ constructor( onFinish = { 1f }, ) } } override val deviceEntryParentViewAlpha = transitionAnimation.immediatelyTransitionTo(0f) }
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToGoneTransitionViewModel.kt +42 −20 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.phone.KeyguardBypassController import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.flow.Flow Loading @@ -41,6 +42,7 @@ class LockscreenToGoneTransitionViewModel constructor( animationFlow: KeyguardTransitionAnimationFlow, private val statusBarStateController: SysuiStatusBarStateController, private val keyguardBypassController: KeyguardBypassController, ) : DeviceEntryIconTransition { private val transitionAnimation: FlowBuilder = Loading @@ -62,11 +64,32 @@ constructor( fun notificationAlpha(viewState: ViewStateAccessor): Flow<Float> { var startAlpha = 1f var leaveShadeOpen = false val endAction: (() -> Float)? = if (SceneContainerFlag.isEnabled) { { 1f } } else null var bypassEnabled = false return transitionAnimation.sharedFlow( duration = 80.milliseconds, onStart = { leaveShadeOpen = statusBarStateController.leaveOpenOnKeyguardHide() bypassEnabled = keyguardBypassController.isBypassEnabled() startAlpha = viewState.alpha() }, onStep = { if (leaveShadeOpen) { 1f } else if (bypassEnabled) { // Keep notifications hidden until the end of the transition if bypass is // enabled, to prevent flickers. 0f } else { MathUtils.lerp(startAlpha, 0f, it) } }, onFinish = { 1f }, onCancel = { 1f }, ) } else { return transitionAnimation.sharedFlow( duration = 80.milliseconds, onStart = { Loading @@ -80,10 +103,9 @@ constructor( MathUtils.lerp(startAlpha, 0f, it) } }, onFinish = endAction, onCancel = endAction, ) } } fun lockscreenAlpha(viewState: ViewStateAccessor): Flow<Float> { var startAlpha = 1f Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToGoneTransitionViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -19,11 +19,13 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.statusbar.phone.keyguardBypassController import com.android.systemui.statusbar.sysuiStatusBarStateController val Kosmos.lockscreenToGoneTransitionViewModel by Fixture { LockscreenToGoneTransitionViewModel( animationFlow = keyguardTransitionAnimationFlow, statusBarStateController = sysuiStatusBarStateController, keyguardBypassController = keyguardBypassController, ) }