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

Commit 6488ab41 authored by Sherry Zhou's avatar Sherry Zhou Committed by Android (Google) Code Review
Browse files

Merge "Fix lockscreen layout change is not successfully received by forcing...

Merge "Fix lockscreen layout change is not successfully received by forcing emitting bounds when transition is finished" into main
parents 40736430 25208813
Loading
Loading
Loading
Loading
+32 −41
Original line number Original line Diff line number Diff line
@@ -34,7 +34,6 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInterac
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.res.R
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.flag.SceneContainerFlag
@@ -53,6 +52,7 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch


@@ -73,8 +73,7 @@ constructor(


    @OptIn(ExperimentalCoroutinesApi::class)
    @OptIn(ExperimentalCoroutinesApi::class)
    val shouldCollectFocalArea =
    val shouldCollectFocalArea =
        hasFocalArea
        hasFocalArea.flatMapLatest { hasFocalArea ->
            .flatMapLatest { hasFocalArea ->
            if (!hasFocalArea) {
            if (!hasFocalArea) {
                return@flatMapLatest flowOf(false)
                return@flatMapLatest flowOf(false)
            }
            }
@@ -85,37 +84,29 @@ constructor(
                        transitionState.isTransitioningToLockscreenFromNonShade()
                        transitionState.isTransitioningToLockscreenFromNonShade()
                }
                }
            } else {
            } else {
                    combine(
                merge(
                            keyguardTransitionInteractor.startedKeyguardTransitionStep,
                        keyguardTransitionInteractor.startedKeyguardTransitionStep
                            // Emit bounds when finishing transition to LOCKSCREEN to avoid race
                            .map { transitionStep ->
                            // condition with COMMAND_WAKING_UP
                                transitionStep.to == KeyguardState.LOCKSCREEN &&
                                    transitionStep.from != KeyguardState.LOCKSCREEN
                            }
                            .distinctUntilChanged(),
                        // Emit bounds when finishing transition to LOCKSCREEN to avoid
                        // getWallpaperTarget() and getPrevWallpaperTarget() are null and fail
                        // to send command
                        keyguardTransitionInteractor
                        keyguardTransitionInteractor
                            .transition(
                            .transition(
                                edge = Edge.create(to = Scenes.Lockscreen),
                                edge = Edge.create(to = Scenes.Lockscreen),
                                edgeWithoutSceneContainer =
                                edgeWithoutSceneContainer =
                                    Edge.create(to = KeyguardState.LOCKSCREEN),
                                    Edge.create(to = KeyguardState.LOCKSCREEN),
                            )
                            )
                                .filter { it.transitionState == TransitionState.FINISHED },
                            .filter { it.transitionState == TransitionState.FINISHED }
                            ::Pair,
                            .map { true },
                    )
                    )
                    // Enforce collecting wallpaperFocalAreaBounds after rebooting
                    // Enforce collecting wallpaperFocalAreaBounds after rebooting
                        .onStart {
                    .onStart { emit(true) }
                            emit(
                                Pair(
                                    TransitionStep(to = KeyguardState.LOCKSCREEN),
                                    TransitionStep(),
                                )
                            )
                        }
                        .map { (transitionStep, _) ->
                            // Subscribe to bounds within the period of transitioning to the
                            // lockscreen, prior to any transitions away.
                            transitionStep.to == KeyguardState.LOCKSCREEN &&
                                transitionStep.from != KeyguardState.LOCKSCREEN
                        }
            }
            }
        }
        }
            .distinctUntilChanged()


    @OptIn(ExperimentalCoroutinesApi::class)
    @OptIn(ExperimentalCoroutinesApi::class)
    val wallpaperFocalAreaBoundsOnLockscreen: Flow<RectF> =
    val wallpaperFocalAreaBoundsOnLockscreen: Flow<RectF> =