Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt +23 −0 Original line number Diff line number Diff line Loading @@ -33,7 +33,11 @@ import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch @SysUISingleton Loading Loading @@ -66,6 +70,25 @@ constructor( listenForTransitionToCamera(scope, keyguardInteractor) } val surfaceBehindVisibility: Flow<Boolean?> = combine( transitionInteractor.startedKeyguardTransitionStep, transitionInteractor.transitionStepsFromState(KeyguardState.ALTERNATE_BOUNCER) ) { startedStep, fromBouncerStep -> if (startedStep.to != KeyguardState.GONE) { return@combine null } // The alt bouncer is pretty fast to hide, so start the surface behind animation // around 30%. fromBouncerStep.value > 0.3f } .onStart { // Default to null ("don't care, use a reasonable default"). emit(null) } .distinctUntilChanged() private fun listenForAlternateBouncerToLockscreenHubAodOrDozing() { scope.launch { keyguardInteractor.alternateBouncerShowing Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt +0 −31 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import com.android.systemui.flags.FeatureFlags import com.android.systemui.keyguard.KeyguardWmStateRefactor import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.user.domain.interactor.SelectedUserInteractor Loading Loading @@ -96,36 +95,6 @@ constructor( } .distinctUntilChanged() val surfaceBehindModel: Flow<KeyguardSurfaceBehindModel?> = combine( transitionInteractor.startedKeyguardTransitionStep, transitionInteractor.transitionStepsFromState(KeyguardState.PRIMARY_BOUNCER) ) { startedStep, fromBouncerStep -> if (startedStep.to != KeyguardState.GONE) { // BOUNCER to anything but GONE does not require any special surface // visibility handling. return@combine null } if (fromBouncerStep.value > 0.5f) { KeyguardSurfaceBehindModel( animateFromAlpha = 0f, alpha = 1f, animateFromTranslationY = 500f, translationY = 0f, ) } else { KeyguardSurfaceBehindModel( alpha = 0f, ) } } .onStart { // Default to null ("don't care, use a reasonable default"). emit(null) } .distinctUntilChanged() fun dismissPrimaryBouncer() { scope.launch { startTransitionTo(KeyguardState.GONE) } } Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt +11 −1 Original line number Diff line number Diff line Loading @@ -95,7 +95,17 @@ constructor( } .distinctUntilChanged() val isAnimatingSurface = repository.isAnimatingSurface /** * Whether we're animating the surface, or a notification launch animation is running (which * means we're going to animate the surface, even if animators aren't yet running). */ val isAnimatingSurface = combine( repository.isAnimatingSurface, notificationLaunchInteractor.isLaunchAnimationRunning ) { animatingSurface, animatingLaunch -> animatingSurface || animatingLaunch } fun setAnimatingSurface(animating: Boolean) { repository.setAnimatingSurface(animating) Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt +4 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ constructor( surfaceBehindInteractor: KeyguardSurfaceBehindInteractor, fromLockscreenInteractor: FromLockscreenTransitionInteractor, fromBouncerInteractor: FromPrimaryBouncerTransitionInteractor, fromAlternateBouncerInteractor: FromAlternateBouncerTransitionInteractor, notificationLaunchAnimationInteractor: NotificationLaunchAnimationInteractor, ) { private val defaultSurfaceBehindVisibility = Loading @@ -65,6 +66,9 @@ constructor( KeyguardState.PRIMARY_BOUNCER -> { fromBouncerInteractor.surfaceBehindVisibility } KeyguardState.ALTERNATE_BOUNCER -> { fromAlternateBouncerInteractor.surfaceBehindVisibility } else -> flowOf(null) } } Loading packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt +17 −1 Original line number Diff line number Diff line Loading @@ -18,12 +18,16 @@ package com.android.systemui.statusbar.domain.interactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardOcclusionInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map Loading @@ -46,6 +50,8 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, keyguardOcclusionInteractor: KeyguardOcclusionInteractor, powerInteractor: PowerInteractor, wmLockscreenVisibilityInteractor: WindowManagerLockscreenVisibilityInteractor, surfaceBehindInteractor: KeyguardSurfaceBehindInteractor, ) { /** Occlusion state to apply whenever a keyguard transition is STARTED, if any. */ private val occlusionStateFromStartedStep: Flow<OccludedState> = Loading Loading @@ -98,11 +104,21 @@ constructor( OccludedState(occluded = occluded, animate = false) } /** Occlusion state to apply to SKBVM's setOccluded call. */ /** Occlusion state to apply to SBKVM's setOccluded call. */ val keyguardViewOcclusionState = merge(occlusionStateFromStartedStep, occlusionStateFromFinishedStep) .distinctUntilChangedBy { // Don't switch 'animate' values mid-transition. it.occluded } /** Visibility state to apply to SBKVM via show() and hide(). */ val keyguardViewVisibility = combine( wmLockscreenVisibilityInteractor.lockscreenVisibility, surfaceBehindInteractor.isAnimatingSurface, ) { lockscreenVisible, animatingSurface -> lockscreenVisible || animatingSurface } .distinctUntilChanged() } Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt +23 −0 Original line number Diff line number Diff line Loading @@ -33,7 +33,11 @@ import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch @SysUISingleton Loading Loading @@ -66,6 +70,25 @@ constructor( listenForTransitionToCamera(scope, keyguardInteractor) } val surfaceBehindVisibility: Flow<Boolean?> = combine( transitionInteractor.startedKeyguardTransitionStep, transitionInteractor.transitionStepsFromState(KeyguardState.ALTERNATE_BOUNCER) ) { startedStep, fromBouncerStep -> if (startedStep.to != KeyguardState.GONE) { return@combine null } // The alt bouncer is pretty fast to hide, so start the surface behind animation // around 30%. fromBouncerStep.value > 0.3f } .onStart { // Default to null ("don't care, use a reasonable default"). emit(null) } .distinctUntilChanged() private fun listenForAlternateBouncerToLockscreenHubAodOrDozing() { scope.launch { keyguardInteractor.alternateBouncerShowing Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt +0 −31 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import com.android.systemui.flags.FeatureFlags import com.android.systemui.keyguard.KeyguardWmStateRefactor import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.user.domain.interactor.SelectedUserInteractor Loading Loading @@ -96,36 +95,6 @@ constructor( } .distinctUntilChanged() val surfaceBehindModel: Flow<KeyguardSurfaceBehindModel?> = combine( transitionInteractor.startedKeyguardTransitionStep, transitionInteractor.transitionStepsFromState(KeyguardState.PRIMARY_BOUNCER) ) { startedStep, fromBouncerStep -> if (startedStep.to != KeyguardState.GONE) { // BOUNCER to anything but GONE does not require any special surface // visibility handling. return@combine null } if (fromBouncerStep.value > 0.5f) { KeyguardSurfaceBehindModel( animateFromAlpha = 0f, alpha = 1f, animateFromTranslationY = 500f, translationY = 0f, ) } else { KeyguardSurfaceBehindModel( alpha = 0f, ) } } .onStart { // Default to null ("don't care, use a reasonable default"). emit(null) } .distinctUntilChanged() fun dismissPrimaryBouncer() { scope.launch { startTransitionTo(KeyguardState.GONE) } } Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt +11 −1 Original line number Diff line number Diff line Loading @@ -95,7 +95,17 @@ constructor( } .distinctUntilChanged() val isAnimatingSurface = repository.isAnimatingSurface /** * Whether we're animating the surface, or a notification launch animation is running (which * means we're going to animate the surface, even if animators aren't yet running). */ val isAnimatingSurface = combine( repository.isAnimatingSurface, notificationLaunchInteractor.isLaunchAnimationRunning ) { animatingSurface, animatingLaunch -> animatingSurface || animatingLaunch } fun setAnimatingSurface(animating: Boolean) { repository.setAnimatingSurface(animating) Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt +4 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ constructor( surfaceBehindInteractor: KeyguardSurfaceBehindInteractor, fromLockscreenInteractor: FromLockscreenTransitionInteractor, fromBouncerInteractor: FromPrimaryBouncerTransitionInteractor, fromAlternateBouncerInteractor: FromAlternateBouncerTransitionInteractor, notificationLaunchAnimationInteractor: NotificationLaunchAnimationInteractor, ) { private val defaultSurfaceBehindVisibility = Loading @@ -65,6 +66,9 @@ constructor( KeyguardState.PRIMARY_BOUNCER -> { fromBouncerInteractor.surfaceBehindVisibility } KeyguardState.ALTERNATE_BOUNCER -> { fromAlternateBouncerInteractor.surfaceBehindVisibility } else -> flowOf(null) } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt +17 −1 Original line number Diff line number Diff line Loading @@ -18,12 +18,16 @@ package com.android.systemui.statusbar.domain.interactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardOcclusionInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map Loading @@ -46,6 +50,8 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, keyguardOcclusionInteractor: KeyguardOcclusionInteractor, powerInteractor: PowerInteractor, wmLockscreenVisibilityInteractor: WindowManagerLockscreenVisibilityInteractor, surfaceBehindInteractor: KeyguardSurfaceBehindInteractor, ) { /** Occlusion state to apply whenever a keyguard transition is STARTED, if any. */ private val occlusionStateFromStartedStep: Flow<OccludedState> = Loading Loading @@ -98,11 +104,21 @@ constructor( OccludedState(occluded = occluded, animate = false) } /** Occlusion state to apply to SKBVM's setOccluded call. */ /** Occlusion state to apply to SBKVM's setOccluded call. */ val keyguardViewOcclusionState = merge(occlusionStateFromStartedStep, occlusionStateFromFinishedStep) .distinctUntilChangedBy { // Don't switch 'animate' values mid-transition. it.occluded } /** Visibility state to apply to SBKVM via show() and hide(). */ val keyguardViewVisibility = combine( wmLockscreenVisibilityInteractor.lockscreenVisibility, surfaceBehindInteractor.isAnimatingSurface, ) { lockscreenVisible, animatingSurface -> lockscreenVisible || animatingSurface } .distinctUntilChanged() }