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

Commit 8f1414d1 authored by Andreas Miko's avatar Andreas Miko
Browse files

[KTF integration] Fix surfaceBehindVisibility

Test: None
Bug: b/330311871
Flag: com.android.systemui.scene_container
Change-Id: Ia27a5f77067875e3b608a9dc9e205e495f82f565
parent 7143609a
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -26,8 +26,11 @@ import com.android.systemui.keyguard.KeyguardWmStateRefactor
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine
import com.android.wm.shell.animation.Interpolators
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
@@ -36,7 +39,6 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filter
@@ -46,7 +48,6 @@ import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine

@ExperimentalCoroutinesApi
@SysUISingleton
@@ -82,17 +83,16 @@ constructor(
    }

    val surfaceBehindVisibility: Flow<Boolean?> =
        combine(
                transitionInteractor.startedKeyguardTransitionStep,
                transitionInteractor.transition(Edge.create(from = KeyguardState.ALTERNATE_BOUNCER))
            ) { startedStep, fromBouncerStep ->
                if (startedStep.to != KeyguardState.GONE) {
                    return@combine null
                }

        transitionInteractor
            .transition(
                edge = Edge.create(from = KeyguardState.ALTERNATE_BOUNCER, to = Scenes.Gone),
                edgeWithoutSceneContainer =
                    Edge.create(from = KeyguardState.ALTERNATE_BOUNCER, to = KeyguardState.GONE)
            )
            .map<TransitionStep, Boolean?> {
                // The alt bouncer is pretty fast to hide, so start the surface behind animation
                // around 30%.
                fromBouncerStep.value > 0.3f
                it.value > 0.3f
            }
            .onStart {
                // Default to null ("don't care, use a reasonable default").
+10 −10
Original line number Diff line number Diff line
@@ -24,16 +24,18 @@ import com.android.systemui.Flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
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.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.StatusBarState.KEYGUARD
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine
import java.util.UUID
@@ -59,7 +61,6 @@ constructor(
    @Background bgDispatcher: CoroutineDispatcher,
    @Main mainDispatcher: CoroutineDispatcher,
    keyguardInteractor: KeyguardInteractor,
    private val flags: FeatureFlags,
    private val shadeRepository: ShadeRepository,
    powerInteractor: PowerInteractor,
    private val glanceableHubTransitions: GlanceableHubTransitions,
@@ -97,14 +98,13 @@ constructor(
     * LOCKSCREEN is running.
     */
    val surfaceBehindVisibility: Flow<Boolean?> =
        transitionInteractor.startedKeyguardTransitionStep
            .map { startedStep ->
                if (startedStep.to != KeyguardState.GONE) {
                    // LOCKSCREEN to anything but GONE does not require any special surface
                    // visibility handling.
                    return@map null
                }

        transitionInteractor
            .transition(
                edge = Edge.create(from = KeyguardState.LOCKSCREEN, to = Scenes.Gone),
                edgeWithoutSceneContainer =
                    Edge.create(from = KeyguardState.LOCKSCREEN, to = KeyguardState.GONE)
            )
            .map<TransitionStep, Boolean?> {
                true // Make the surface visible during LS -> GONE transitions.
            }
            .onStart {
+20 −20
Original line number Diff line number Diff line
@@ -22,15 +22,14 @@ import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
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.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample
import com.android.systemui.util.kotlin.sample
@@ -40,8 +39,9 @@ import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch

@@ -56,7 +56,6 @@ constructor(
    @Main mainDispatcher: CoroutineDispatcher,
    keyguardInteractor: KeyguardInteractor,
    private val communalInteractor: CommunalInteractor,
    private val flags: FeatureFlags,
    private val keyguardSecurityModel: KeyguardSecurityModel,
    private val selectedUserInteractor: SelectedUserInteractor,
    powerInteractor: PowerInteractor,
@@ -81,24 +80,25 @@ constructor(
    }

    val surfaceBehindVisibility: Flow<Boolean?> =
        combine(
                transitionInteractor.startedKeyguardTransitionStep,
                transitionInteractor.transition(
                    edge = Edge.create(from = Scenes.Bouncer),
                    edgeWithoutSceneContainer = Edge.create(from = KeyguardState.PRIMARY_BOUNCER)
        if (SceneContainerFlag.isEnabled) {
            // The edge Scenes.Bouncer <-> Scenes.Gone is handled by STL
            flowOf(null)
        } else {
            transitionInteractor
                .transition(
                    edge = Edge.INVALID,
                    edgeWithoutSceneContainer =
                        Edge.create(from = KeyguardState.PRIMARY_BOUNCER, to = KeyguardState.GONE)
                )
            ) { startedStep, fromBouncerStep ->
                if (startedStep.to != KeyguardState.GONE) {
                    return@combine null
                }

                fromBouncerStep.value > TO_GONE_SURFACE_BEHIND_VISIBLE_THRESHOLD
                .map<TransitionStep, Boolean?> {
                    it.value > TO_GONE_SURFACE_BEHIND_VISIBLE_THRESHOLD
                }
                .onStart {
                    // Default to null ("don't care, use a reasonable default").
                    emit(null)
                }
                .distinctUntilChanged()
        }

    fun dismissPrimaryBouncer() {
        scope.launch { startTransitionTo(KeyguardState.GONE) }
+0 −2
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.keyguard.domain.interactor

import com.android.systemui.flags.featureFlagsClassic
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
@@ -34,7 +33,6 @@ var Kosmos.fromLockscreenTransitionInteractor by
            bgDispatcher = testDispatcher,
            mainDispatcher = testDispatcher,
            keyguardInteractor = keyguardInteractor,
            flags = featureFlagsClassic,
            shadeRepository = shadeRepository,
            powerInteractor = powerInteractor,
            glanceableHubTransitions = glanceableHubTransitions,
+0 −2
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.systemui.keyguard.domain.interactor

import com.android.keyguard.keyguardSecurityModel
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.flags.featureFlagsClassic
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
@@ -37,7 +36,6 @@ var Kosmos.fromPrimaryBouncerTransitionInteractor by
            mainDispatcher = testDispatcher,
            keyguardInteractor = keyguardInteractor,
            communalInteractor = communalInteractor,
            flags = featureFlagsClassic,
            keyguardSecurityModel = keyguardSecurityModel,
            selectedUserInteractor = selectedUserInteractor,
            powerInteractor = powerInteractor,