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

Commit a477170d authored by Matt Pietal's avatar Matt Pietal Committed by Automerger Merge Worker
Browse files

Transitions - Add dozing information am: 2a314ee8 am: b3b2a258

parents 3fe15113 b3b2a258
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -116,6 +116,7 @@ class KeyguardTransitionRepositoryImpl @Inject constructor() : KeyguardTransitio
                KeyguardState.LOCKSCREEN,
                KeyguardState.LOCKSCREEN,
                0f,
                0f,
                TransitionState.STARTED,
                TransitionState.STARTED,
                KeyguardTransitionRepositoryImpl::class.simpleName!!,
            )
            )
        )
        )
        emitTransition(
        emitTransition(
@@ -124,6 +125,7 @@ class KeyguardTransitionRepositoryImpl @Inject constructor() : KeyguardTransitio
                KeyguardState.LOCKSCREEN,
                KeyguardState.LOCKSCREEN,
                1f,
                1f,
                TransitionState.FINISHED,
                TransitionState.FINISHED,
                KeyguardTransitionRepositoryImpl::class.simpleName!!,
            )
            )
        )
        )
    }
    }
+7 −12
Original line number Original line Diff line number Diff line
@@ -41,17 +41,14 @@ constructor(


    override fun start() {
    override fun start() {
        listenForTransitionToAodFromLockscreen()
        listenForTransitionToAodFromLockscreen()
        listenForTransitionToLockscreenFromAod()
        listenForTransitionToLockscreenFromDozeStates()
    }
    }


    private fun listenForTransitionToAodFromLockscreen() {
    private fun listenForTransitionToAodFromLockscreen() {
        scope.launch {
        scope.launch {
            keyguardInteractor
            keyguardInteractor
                .dozeTransitionTo(DozeStateModel.DOZE_AOD)
                .dozeTransitionTo(DozeStateModel.DOZE_AOD)
                .sample(
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                    keyguardTransitionInteractor.startedKeyguardTransitionStep,
                    { a, b -> Pair(a, b) }
                )
                .collect { pair ->
                .collect { pair ->
                    val (dozeToAod, lastStartedStep) = pair
                    val (dozeToAod, lastStartedStep) = pair
                    if (lastStartedStep.to == KeyguardState.LOCKSCREEN) {
                    if (lastStartedStep.to == KeyguardState.LOCKSCREEN) {
@@ -68,21 +65,19 @@ constructor(
        }
        }
    }
    }


    private fun listenForTransitionToLockscreenFromAod() {
    private fun listenForTransitionToLockscreenFromDozeStates() {
        val canGoToLockscreen = setOf(KeyguardState.AOD, KeyguardState.DOZING)
        scope.launch {
        scope.launch {
            keyguardInteractor
            keyguardInteractor
                .dozeTransitionTo(DozeStateModel.FINISH)
                .dozeTransitionTo(DozeStateModel.FINISH)
                .sample(
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                    keyguardTransitionInteractor.startedKeyguardTransitionStep,
                    { a, b -> Pair(a, b) }
                )
                .collect { pair ->
                .collect { pair ->
                    val (dozeToAod, lastStartedStep) = pair
                    val (dozeToAod, lastStartedStep) = pair
                    if (lastStartedStep.to == KeyguardState.AOD) {
                    if (canGoToLockscreen.contains(lastStartedStep.to)) {
                        keyguardTransitionRepository.startTransition(
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                            TransitionInfo(
                                name,
                                name,
                                KeyguardState.AOD,
                                lastStartedStep.to,
                                KeyguardState.LOCKSCREEN,
                                KeyguardState.LOCKSCREEN,
                                getAnimator(),
                                getAnimator(),
                            )
                            )
+2 −8
Original line number Original line Diff line number Diff line
@@ -21,9 +21,7 @@ import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.WAKE_AND_UNLOCK
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion.isWakeAndUnlock
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.WAKE_AND_UNLOCK_FROM_DREAM
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.WAKE_AND_UNLOCK_PULSING
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
@@ -42,9 +40,6 @@ constructor(
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
) : TransitionInteractor(AodToGoneTransitionInteractor::class.simpleName!!) {
) : TransitionInteractor(AodToGoneTransitionInteractor::class.simpleName!!) {


    private val wakeAndUnlockModes =
        setOf(WAKE_AND_UNLOCK, WAKE_AND_UNLOCK_FROM_DREAM, WAKE_AND_UNLOCK_PULSING)

    override fun start() {
    override fun start() {
        scope.launch {
        scope.launch {
            keyguardInteractor.biometricUnlockState
            keyguardInteractor.biometricUnlockState
@@ -52,8 +47,7 @@ constructor(
                .collect { pair ->
                .collect { pair ->
                    val (biometricUnlockState, keyguardState) = pair
                    val (biometricUnlockState, keyguardState) = pair
                    if (
                    if (
                        keyguardState == KeyguardState.AOD &&
                        keyguardState == KeyguardState.AOD && isWakeAndUnlock(biometricUnlockState)
                            wakeAndUnlockModes.contains(biometricUnlockState)
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                            TransitionInfo(
+0 −76
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

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

import android.animation.ValueAnimator
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.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.WakefulnessModel.Companion.isSleepingOrStartingToSleep
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch

@SysUISingleton
class DreamingToAodTransitionInteractor
@Inject
constructor(
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
) : TransitionInteractor("DREAMING->AOD") {

    override fun start() {
        scope.launch {
            keyguardInteractor.wakefulnessModel
                .sample(keyguardTransitionInteractor.finishedKeyguardState, { a, b -> Pair(a, b) })
                .collect { pair ->
                    val (wakefulnessState, keyguardState) = pair
                    if (
                        isSleepingOrStartingToSleep(wakefulnessState) &&
                            keyguardState == KeyguardState.DREAMING
                    ) {
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                                name,
                                KeyguardState.DREAMING,
                                KeyguardState.AOD,
                                getAnimator(),
                            )
                        )
                    }
                }
        }
    }

    private fun getAnimator(): ValueAnimator {
        return ValueAnimator().apply {
            setInterpolator(Interpolators.LINEAR)
            setDuration(TRANSITION_DURATION_MS)
        }
    }

    companion object {
        private const val TRANSITION_DURATION_MS = 300L
    }
}
+180 −0
Original line number Original line Diff line number Diff line
@@ -21,7 +21,9 @@ import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion.isWakeAndUnlock
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.DozeStateModel
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.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
@@ -32,41 +34,77 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch


@SysUISingleton
@SysUISingleton
class DreamingLockscreenTransitionInteractor
class DreamingTransitionInteractor
@Inject
@Inject
constructor(
constructor(
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
) : TransitionInteractor(DreamingLockscreenTransitionInteractor::class.simpleName!!) {
) : TransitionInteractor(DreamingTransitionInteractor::class.simpleName!!) {

    private val canDreamFrom =
        setOf(KeyguardState.LOCKSCREEN, KeyguardState.GONE, KeyguardState.DOZING)


    override fun start() {
    override fun start() {
        listenForEntryToDreaming()
        listenForDreamingToLockscreen()
        listenForDreamingToGone()
        listenForDreamingToDozing()
    }

    private fun listenForEntryToDreaming() {
        scope.launch {
        scope.launch {
            keyguardInteractor.isDreaming
            keyguardInteractor.isDreaming
                .sample(
                .sample(
                    combine(
                    combine(
                        keyguardInteractor.dozeTransitionModel,
                        keyguardInteractor.dozeTransitionModel,
                        keyguardTransitionInteractor.finishedKeyguardState
                        keyguardTransitionInteractor.finishedKeyguardState,
                    ) { a, b -> Pair(a, b) },
                        ::Pair
                    { a, bc -> Triple(a, bc.first, bc.second) }
                    ),
                    ::toTriple
                )
                )
                .collect { triple ->
                .collect { triple ->
                    val (isDreaming, dozeTransitionModel, keyguardState) = triple
                    val (isDreaming, dozeTransitionModel, keyguardState) = triple
                    // Dozing/AOD and dreaming have overlapping events. If the state remains in
                    // Dozing/AOD and dreaming have overlapping events. If the state remains in
                    // FINISH, it means that doze mode is not running and DREAMING is ok to
                    // FINISH, it means that doze mode is not running and DREAMING is ok to
                    // commence.
                    // commence.
                    if (dozeTransitionModel.to == DozeStateModel.FINISH) {
                    if (
                        if (isDreaming && keyguardState == KeyguardState.LOCKSCREEN) {
                        isDozeOff(dozeTransitionModel.to) &&
                            isDreaming &&
                            canDreamFrom.contains(keyguardState)
                    ) {
                        keyguardTransitionRepository.startTransition(
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                            TransitionInfo(
                                name,
                                name,
                                    KeyguardState.LOCKSCREEN,
                                keyguardState,
                                KeyguardState.DREAMING,
                                KeyguardState.DREAMING,
                                getAnimator(),
                                getAnimator(),
                            )
                            )
                        )
                        )
                        } else if (!isDreaming && keyguardState == KeyguardState.DREAMING) {
                    }
                }
        }
    }

    private fun listenForDreamingToLockscreen() {
        scope.launch {
            keyguardInteractor.isDreaming
                .sample(
                    combine(
                        keyguardInteractor.dozeTransitionModel,
                        keyguardTransitionInteractor.startedKeyguardTransitionStep,
                        ::Pair,
                    ),
                    ::toTriple
                )
                .collect { triple ->
                    val (isDreaming, dozeTransitionModel, lastStartedTransition) = triple
                    if (
                        isDozeOff(dozeTransitionModel.to) &&
                            !isDreaming &&
                            lastStartedTransition.to == KeyguardState.DREAMING
                    ) {
                        keyguardTransitionRepository.startTransition(
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                            TransitionInfo(
                                name,
                                name,
@@ -79,6 +117,54 @@ constructor(
                }
                }
        }
        }
    }
    }

    private fun listenForDreamingToGone() {
        scope.launch {
            keyguardInteractor.biometricUnlockState
                .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair)
                .collect { pair ->
                    val (biometricUnlockState, keyguardState) = pair
                    if (
                        keyguardState == KeyguardState.DREAMING &&
                            isWakeAndUnlock(biometricUnlockState)
                    ) {
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                                name,
                                KeyguardState.DREAMING,
                                KeyguardState.GONE,
                                getAnimator(),
                            )
                        )
                    }
                }
        }
    }

    private fun listenForDreamingToDozing() {
        scope.launch {
            combine(
                    keyguardInteractor.dozeTransitionModel,
                    keyguardTransitionInteractor.finishedKeyguardState,
                    ::Pair
                )
                .collect { pair ->
                    val (dozeTransitionModel, keyguardState) = pair
                    if (
                        dozeTransitionModel.to == DozeStateModel.DOZE &&
                            keyguardState == KeyguardState.DREAMING
                    ) {
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                                name,
                                KeyguardState.DREAMING,
                                KeyguardState.DOZING,
                                getAnimator(),
                            )
                        )
                    }
                }
        }
    }
    }


    private fun getAnimator(): ValueAnimator {
    private fun getAnimator(): ValueAnimator {
Loading