diff options
3 files changed, 46 insertions, 13 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/transitions/DeviceEntryIconTransitionModule.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/transitions/DeviceEntryIconTransitionModule.kt index a8e9041abfd7..0f63f65e4511 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/transitions/DeviceEntryIconTransitionModule.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/transitions/DeviceEntryIconTransitionModule.kt @@ -41,6 +41,7 @@ import com.android.systemui.keyguard.ui.viewmodel.LockscreenToOccludedTransition import com.android.systemui.keyguard.ui.viewmodel.LockscreenToPrimaryBouncerTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.OccludedToAodTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.OccludedToLockscreenTransitionViewModel +import com.android.systemui.keyguard.ui.viewmodel.OffToLockscreenTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToAodTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToDozingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToLockscreenTransitionViewModel @@ -196,6 +197,12 @@ abstract class DeviceEntryIconTransitionModule { @Binds @IntoSet + abstract fun offToLockscreen( + impl: OffToLockscreenTransitionViewModel + ): DeviceEntryIconTransition + + @Binds + @IntoSet abstract fun primaryBouncerToAod( impl: PrimaryBouncerToAodTransitionViewModel ): DeviceEntryIconTransition diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryIconViewModel.kt index 40be73e5e9dc..da2fcc48a13d 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryIconViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryIconViewModel.kt @@ -84,19 +84,21 @@ constructor( .map { it.deviceEntryParentViewAlpha } .merge() .shareIn(scope, SharingStarted.WhileSubscribed()) + .onStart { emit(initialAlphaFromKeyguardState(transitionInteractor.getCurrentState())) } private val alphaMultiplierFromShadeExpansion: Flow<Float> = combine( - showingAlternateBouncer, - shadeExpansion, - qsProgress, - ) { showingAltBouncer, shadeExpansion, qsProgress -> - val interpolatedQsProgress = (qsProgress * 2).coerceIn(0f, 1f) - if (showingAltBouncer) { - 1f - } else { - (1f - shadeExpansion) * (1f - interpolatedQsProgress) + showingAlternateBouncer, + shadeExpansion, + qsProgress, + ) { showingAltBouncer, shadeExpansion, qsProgress -> + val interpolatedQsProgress = (qsProgress * 2).coerceIn(0f, 1f) + if (showingAltBouncer) { + 1f + } else { + (1f - shadeExpansion) * (1f - interpolatedQsProgress) + } } - } + .onStart { emit(1f) } // Burn-in offsets in AOD private val nonAnimatedBurnInOffsets: Flow<BurnInOffsets> = combine( @@ -122,14 +124,34 @@ constructor( ) } - val deviceEntryViewAlpha: StateFlow<Float> = + val deviceEntryViewAlpha: Flow<Float> = combine( transitionAlpha, alphaMultiplierFromShadeExpansion, ) { alpha, alphaMultiplier -> alpha * alphaMultiplier } - .stateIn(scope = scope, started = SharingStarted.WhileSubscribed(), initialValue = 0f) + .stateIn( + scope = scope, + started = SharingStarted.WhileSubscribed(), + initialValue = 0f, + ) + + private fun initialAlphaFromKeyguardState(keyguardState: KeyguardState): Float { + return when (keyguardState) { + KeyguardState.OFF, + KeyguardState.PRIMARY_BOUNCER, + KeyguardState.DOZING, + KeyguardState.DREAMING, + KeyguardState.GLANCEABLE_HUB, + KeyguardState.GONE, + KeyguardState.OCCLUDED, + KeyguardState.DREAMING_LOCKSCREEN_HOSTED, -> 0f + KeyguardState.AOD, + KeyguardState.ALTERNATE_BOUNCER, + KeyguardState.LOCKSCREEN -> 1f + } + } val useBackgroundProtection: StateFlow<Boolean> = isUdfpsSupported val burnInOffsets: Flow<BurnInOffsets> = deviceEntryUdfpsInteractor.isUdfpsEnrolledAndEnabled diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OffToLockscreenTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OffToLockscreenTransitionViewModel.kt index 74094bea140a..cf6a533ed76b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OffToLockscreenTransitionViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OffToLockscreenTransitionViewModel.kt @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow +import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.flow.Flow @@ -28,7 +29,7 @@ class OffToLockscreenTransitionViewModel @Inject constructor( animationFlow: KeyguardTransitionAnimationFlow, -) { +) : DeviceEntryIconTransition { private val transitionAnimation = animationFlow.setup( @@ -43,4 +44,7 @@ constructor( onStep = { it }, onCancel = { 0f }, ) + + override val deviceEntryParentViewAlpha: Flow<Float> = + transitionAnimation.immediatelyTransitionTo(1f) } |