Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8d96b85 authored by Josh Tsuji's avatar Josh Tsuji Committed by Android (Google) Code Review
Browse files

Merge "Fix notification launch from alternate bouncer." into main

parents 937b20cf 92e8d71c
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
+0 −31
Original line number Diff line number Diff line
@@ -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
@@ -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) }
    }
+11 −1
Original line number Diff line number Diff line
@@ -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)
+4 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ constructor(
    surfaceBehindInteractor: KeyguardSurfaceBehindInteractor,
    fromLockscreenInteractor: FromLockscreenTransitionInteractor,
    fromBouncerInteractor: FromPrimaryBouncerTransitionInteractor,
    fromAlternateBouncerInteractor: FromAlternateBouncerTransitionInteractor,
    notificationLaunchAnimationInteractor: NotificationLaunchAnimationInteractor,
) {
    private val defaultSurfaceBehindVisibility =
@@ -65,6 +66,9 @@ constructor(
                    KeyguardState.PRIMARY_BOUNCER -> {
                        fromBouncerInteractor.surfaceBehindVisibility
                    }
                    KeyguardState.ALTERNATE_BOUNCER -> {
                        fromAlternateBouncerInteractor.surfaceBehindVisibility
                    }
                    else -> flowOf(null)
                }
            }
+17 −1
Original line number Diff line number Diff line
@@ -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
@@ -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> =
@@ -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