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

Commit b73f9f50 authored by Matt Pietal's avatar Matt Pietal
Browse files

Don't sample StateFlow

Bug: 376449592
Test: atest SystemUITests
Flag: EXEMPT bugfix
Change-Id: I5adc19e6eb3d9db7f1fb0486a09c73118d0abd7e
parent 6fe280bd
Loading
Loading
Loading
Loading
+73 −85
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ import com.android.systemui.power.shared.model.WakeSleepReason.FOLD
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 com.android.systemui.util.kotlin.sample
import java.util.UUID
import javax.inject.Inject
@@ -52,7 +51,6 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import com.android.app.tracing.coroutines.launchTraced as launch

@SysUISingleton
class FromLockscreenTransitionInteractor
@@ -176,20 +174,12 @@ constructor(
        if (SceneContainerFlag.isEnabled) return
        var transitionId: UUID? = null
        scope.launch("$TAG#listenForLockscreenToPrimaryBouncerDragging") {
            shadeRepository.legacyShadeExpansion
                .sampleCombine(
                    transitionInteractor.startedKeyguardTransitionStep,
                    keyguardInteractor.statusBarState,
                    keyguardInteractor.isKeyguardDismissible,
                    keyguardInteractor.isKeyguardOccluded,
                )
                .collect {
                    (
                        shadeExpansion,
                        startedStep,
                        statusBarState,
                        isKeyguardUnlocked,
                        isKeyguardOccluded) ->
            shadeRepository.legacyShadeExpansion.collect { shadeExpansion ->
                val statusBarState = keyguardInteractor.statusBarState.value
                val isKeyguardUnlocked = keyguardInteractor.isKeyguardDismissible.value
                val isKeyguardOccluded = keyguardInteractor.isKeyguardOccluded.value
                val startedStep = transitionInteractor.startedKeyguardTransitionStep.value

                val id = transitionId
                val currentTransitionInfo =
                    internalTransitionInteractor.currentTransitionInfoInternal()
@@ -212,8 +202,7 @@ constructor(
                                id,
                                // This maps the shadeExpansion to a much faster curve, to match
                                // the existing logic
                                    1f -
                                        MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, shadeExpansion),
                                1f - MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, shadeExpansion),
                                nextState,
                            )
                        }
@@ -232,8 +221,7 @@ constructor(
                            transitionRepository.startTransition(
                                TransitionInfo(
                                    ownerName =
                                            "$name " +
                                                "(on behalf of FromPrimaryBouncerInteractor)",
                                        "$name " + "(on behalf of FromPrimaryBouncerInteractor)",
                                    from = KeyguardState.PRIMARY_BOUNCER,
                                    to =
                                        if (isKeyguardOccluded) KeyguardState.OCCLUDED
+3 −5
Original line number Diff line number Diff line
@@ -284,7 +284,7 @@ constructor(
        }

    /** Observable for the [StatusBarState] */
    val statusBarState: Flow<StatusBarState> = repository.statusBarState
    val statusBarState: StateFlow<StatusBarState> = repository.statusBarState

    /** Observable for [BiometricUnlockModel] when biometrics are used to unlock the device. */
    val biometricUnlockState: StateFlow<BiometricUnlockModel> = repository.biometricUnlockState
@@ -350,23 +350,21 @@ constructor(
    val dismissAlpha: Flow<Float> =
        shadeRepository.legacyShadeExpansion
            .sampleCombine(
                statusBarState,
                keyguardTransitionInteractor.currentKeyguardState,
                keyguardTransitionInteractor.transitionState,
                isKeyguardDismissible,
                keyguardTransitionInteractor.isFinishedIn(Scenes.Communal, GLANCEABLE_HUB),
            )
            .filter { (_, _, _, step, _, _) -> !step.transitionState.isTransitioning() }
            .filter { (_, _, step, _, _) -> !step.transitionState.isTransitioning() }
            .transform {
                (
                    legacyShadeExpansion,
                    statusBarState,
                    currentKeyguardState,
                    step,
                    isKeyguardDismissible,
                    onGlanceableHub) ->
                if (
                    statusBarState == StatusBarState.KEYGUARD &&
                    statusBarState.value == StatusBarState.KEYGUARD &&
                        isKeyguardDismissible &&
                        currentKeyguardState == LOCKSCREEN &&
                        legacyShadeExpansion != 1f
+10 −15
Original line number Diff line number Diff line
@@ -20,13 +20,13 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.shade.data.repository.FlingInfo
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.util.kotlin.Utils.Companion.sample
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn

/**
@@ -39,8 +39,8 @@ class SwipeToDismissInteractor
constructor(
    @Background backgroundScope: CoroutineScope,
    shadeRepository: ShadeRepository,
    transitionInteractor: KeyguardTransitionInteractor,
    keyguardInteractor: KeyguardInteractor,
    private val transitionInteractor: KeyguardTransitionInteractor,
    private val keyguardInteractor: KeyguardInteractor,
) {
    /**
     * Emits a [FlingInfo] whenever a swipe to dismiss gesture has started a fling animation on the
@@ -50,20 +50,15 @@ constructor(
     * LOCKSCREEN -> GONE, and by [KeyguardSurfaceBehindInteractor] to match the surface remote
     * animation's velocity to the fling velocity, if applicable.
     */
    val dismissFling =
    val dismissFling: StateFlow<FlingInfo?> =
        shadeRepository.currentFling
            .sample(
                transitionInteractor.startedKeyguardTransitionStep,
                keyguardInteractor.isKeyguardDismissible,
                keyguardInteractor.statusBarState,
            )
            .filter { (flingInfo, startedStep, keyguardDismissable, statusBarState) ->
            .filter { flingInfo ->
                flingInfo != null &&
                    !flingInfo.expand &&
                    statusBarState != StatusBarState.SHADE_LOCKED &&
                    startedStep.to == KeyguardState.LOCKSCREEN &&
                    keyguardDismissable
                    keyguardInteractor.statusBarState.value != StatusBarState.SHADE_LOCKED &&
                    transitionInteractor.startedKeyguardTransitionStep.value.to ==
                        KeyguardState.LOCKSCREEN &&
                    keyguardInteractor.isKeyguardDismissible.value
            }
            .map { (flingInfo, _) -> flingInfo }
            .stateIn(backgroundScope, SharingStarted.Eagerly, null)
}