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

Commit c36131f6 authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge "Transitions - Better dozing/aod support" into tm-qpr-dev

parents 52388f92 fef981cb
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -114,8 +114,6 @@ object Flags {
    // ** Flag retired **
    // public static final BooleanFlag KEYGUARD_LAYOUT =
    //         new BooleanFlag(200, true);
    // TODO(b/254512713): Tracking Bug
    @JvmField val LOCKSCREEN_ANIMATIONS = releasedFlag(201, "lockscreen_animations")

    // TODO(b/254512750): Tracking Bug
    val NEW_UNLOCK_SWIPE_ANIMATION = releasedFlag(202, "new_unlock_swipe_animation")
+30 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.systemui.keyguard.shared.model.WakefulnessModel
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.BiometricUnlockController.WakeAndUnlockMode
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.policy.KeyguardStateController
import javax.inject.Inject
import kotlinx.coroutines.channels.awaitClose
@@ -88,6 +89,9 @@ interface KeyguardRepository {
    /** Observable for whether the bouncer is showing. */
    val isBouncerShowing: Flow<Boolean>

    /** Is the always-on display available to be used? */
    val isAodAvailable: Flow<Boolean>

    /**
     * Observable for whether we are in doze state.
     *
@@ -182,6 +186,7 @@ constructor(
    private val keyguardStateController: KeyguardStateController,
    private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
    private val dozeTransitionListener: DozeTransitionListener,
    private val dozeParameters: DozeParameters,
    private val authController: AuthController,
    private val dreamOverlayCallbackController: DreamOverlayCallbackController,
) : KeyguardRepository {
@@ -220,6 +225,31 @@ constructor(
            }
            .distinctUntilChanged()

    override val isAodAvailable: Flow<Boolean> =
        conflatedCallbackFlow {
                val callback =
                    object : DozeParameters.Callback {
                        override fun onAlwaysOnChange() {
                            trySendWithFailureLogging(
                                dozeParameters.getAlwaysOn(),
                                TAG,
                                "updated isAodAvailable"
                            )
                        }
                    }

                dozeParameters.addCallback(callback)
                // Adding the callback does not send an initial update.
                trySendWithFailureLogging(
                    dozeParameters.getAlwaysOn(),
                    TAG,
                    "initial isAodAvailable"
                )

                awaitClose { dozeParameters.removeCallback(callback) }
            }
            .distinctUntilChanged()

    override val isKeyguardOccluded: Flow<Boolean> =
        conflatedCallbackFlow {
                val callback =
+4 −5
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@ import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessModel.Companion.isWakingOrStartingToWake
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
@@ -48,12 +48,11 @@ constructor(

    private fun listenForDozingToLockscreen() {
        scope.launch {
            keyguardInteractor.dozeTransitionModel
            keyguardInteractor.wakefulnessModel
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { pair ->
                    val (dozeTransitionModel, lastStartedTransition) = pair
                .collect { (wakefulnessModel, lastStartedTransition) ->
                    if (
                        isDozeOff(dozeTransitionModel.to) &&
                        isWakingOrStartingToWake(wakefulnessModel) &&
                            lastStartedTransition.to == KeyguardState.DOZING
                    ) {
                        keyguardTransitionRepository.startTransition(
+24 −10
Original line number Diff line number Diff line
@@ -26,7 +26,10 @@ import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessState
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch

@SysUISingleton
@@ -40,7 +43,7 @@ constructor(
) : TransitionInteractor(FromGoneTransitionInteractor::class.simpleName!!) {

    override fun start() {
        listenForGoneToAod()
        listenForGoneToAodOrDozing()
        listenForGoneToDreaming()
    }

@@ -56,7 +59,7 @@ constructor(
                                name,
                                KeyguardState.GONE,
                                KeyguardState.DREAMING,
                                getAnimator(),
                                getAnimator(TO_DREAMING_DURATION),
                            )
                        )
                    }
@@ -64,12 +67,18 @@ constructor(
        }
    }

    private fun listenForGoneToAod() {
    private fun listenForGoneToAodOrDozing() {
        scope.launch {
            keyguardInteractor.wakefulnessModel
                .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair)
                .collect { pair ->
                    val (wakefulnessState, keyguardState) = pair
                .sample(
                    combine(
                        keyguardTransitionInteractor.finishedKeyguardState,
                        keyguardInteractor.isAodAvailable,
                        ::Pair
                    ),
                    ::toTriple
                )
                .collect { (wakefulnessState, keyguardState, isAodAvailable) ->
                    if (
                        keyguardState == KeyguardState.GONE &&
                            wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP
@@ -78,7 +87,11 @@ constructor(
                            TransitionInfo(
                                name,
                                KeyguardState.GONE,
                                KeyguardState.AOD,
                                if (isAodAvailable) {
                                    KeyguardState.AOD
                                } else {
                                    KeyguardState.DOZING
                                },
                                getAnimator(),
                            )
                        )
@@ -87,14 +100,15 @@ constructor(
        }
    }

    private fun getAnimator(): ValueAnimator {
    private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator {
        return ValueAnimator().apply {
            setInterpolator(Interpolators.LINEAR)
            setDuration(TRANSITION_DURATION_MS)
            setDuration(duration.inWholeMilliseconds)
        }
    }

    companion object {
        private const val TRANSITION_DURATION_MS = 500L
        private val DEFAULT_DURATION = 500.milliseconds
        val TO_DREAMING_DURATION = 933.milliseconds
    }
}
+22 −10
Original line number Diff line number Diff line
@@ -21,11 +21,11 @@ import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.DozeStateModel
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.TransitionState
import com.android.systemui.keyguard.shared.model.WakefulnessState
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.util.kotlin.sample
import java.util.UUID
@@ -54,7 +54,7 @@ constructor(
        listenForLockscreenToGone()
        listenForLockscreenToOccluded()
        listenForLockscreenToCamera()
        listenForLockscreenToAod()
        listenForLockscreenToAodOrDozing()
        listenForLockscreenToBouncer()
        listenForLockscreenToDreaming()
        listenForLockscreenToBouncerDragging()
@@ -230,19 +230,31 @@ constructor(
        }
    }

    private fun listenForLockscreenToAod() {
    private fun listenForLockscreenToAodOrDozing() {
        scope.launch {
            keyguardInteractor
                .dozeTransitionTo(DozeStateModel.DOZE_AOD)
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { pair ->
                    val (dozeToAod, lastStartedStep) = pair
                    if (lastStartedStep.to == KeyguardState.LOCKSCREEN) {
            keyguardInteractor.wakefulnessModel
                .sample(
                    combine(
                        keyguardTransitionInteractor.startedKeyguardTransitionStep,
                        keyguardInteractor.isAodAvailable,
                        ::Pair
                    ),
                    ::toTriple
                )
                .collect { (wakefulnessState, lastStartedStep, isAodAvailable) ->
                    if (
                        lastStartedStep.to == KeyguardState.LOCKSCREEN &&
                            wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP
                    ) {
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                                name,
                                KeyguardState.LOCKSCREEN,
                                KeyguardState.AOD,
                                if (isAodAvailable) {
                                    KeyguardState.AOD
                                } else {
                                    KeyguardState.DOZING
                                },
                                getAnimator(),
                            )
                        )
Loading