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

Commit f0b6d3c5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix race condition in transition from dream -> hub" into main

parents c44a74d0 a57330ce
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@ import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.Flags.glanceableHubAllowKeyguardWhenDreaming
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.domain.interactor.FromDreamingTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
@@ -51,6 +51,7 @@ constructor(
    fromGlanceableHubTransitionInteractor: GlanceableHubToDreamingTransitionViewModel,
    toGlanceableHubTransitionViewModel: DreamingToGlanceableHubTransitionViewModel,
    private val toLockscreenTransitionViewModel: DreamingToLockscreenTransitionViewModel,
    private val fromDreamingTransitionInteractor: FromDreamingTransitionInteractor,
    private val communalInteractor: CommunalInteractor,
    private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
    private val userTracker: UserTracker,
@@ -61,11 +62,9 @@ constructor(
        val showGlanceableHub =
            communalInteractor.isCommunalEnabled.value &&
                !keyguardUpdateMonitor.isEncryptedOrLockdown(userTracker.userId)
        if (showGlanceableHub && !glanceableHubAllowKeyguardWhenDreaming()) {
            communalInteractor.changeScene(CommunalScenes.Communal, "transition away from dream")
        } else {
            toLockscreenTransitionViewModel.startTransition()
        }
        fromDreamingTransitionInteractor.startToLockscreenOrGlanceableHubTransition(
            showGlanceableHub && !glanceableHubAllowKeyguardWhenDreaming()
        )
    }

    val dreamOverlayTranslationX: Flow<Float> =
+15 −5
Original line number Diff line number Diff line
@@ -20,7 +20,9 @@ import android.animation.ValueAnimator
import com.android.app.animation.Interpolators
import com.android.app.tracing.coroutines.launch
import com.android.systemui.Flags.communalSceneKtfRefactor
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
@@ -58,6 +60,7 @@ constructor(
    @Main mainDispatcher: CoroutineDispatcher,
    keyguardInteractor: KeyguardInteractor,
    private val glanceableHubTransitions: GlanceableHubTransitions,
    private val communalSceneInteractor: CommunalSceneInteractor,
    private val communalSettingsInteractor: CommunalSettingsInteractor,
    powerInteractor: PowerInteractor,
    keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
@@ -126,13 +129,19 @@ constructor(
        }
    }

    fun startToLockscreenTransition() {
    fun startToLockscreenOrGlanceableHubTransition(openHub: Boolean) {
        scope.launch {
            if (
                transitionInteractor.startedKeyguardState.replayCache.last() ==
                    KeyguardState.DREAMING
            ) {
                if (powerInteractor.detailedWakefulness.value.isAwake()) {
                    if (openHub) {
                        communalSceneInteractor.changeScene(
                            newScene = CommunalScenes.Communal,
                            loggingReason = "FromDreamingTransitionInteractor",
                        )
                    } else {
                        startTransitionTo(
                            KeyguardState.LOCKSCREEN,
                            ownerReason = "Dream has ended and device is awake"
@@ -141,6 +150,7 @@ constructor(
                }
            }
        }
    }

    @OptIn(FlowPreview::class)
    private fun listenForDreamingToOccluded() {
+0 −3
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.systemui.keyguard.ui.viewmodel

import com.android.app.animation.Interpolators.EMPHASIZED
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.domain.interactor.FromDreamingTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.FromDreamingTransitionInteractor.Companion.TO_LOCKSCREEN_DURATION
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
@@ -39,10 +38,8 @@ import kotlinx.coroutines.flow.Flow
class DreamingToLockscreenTransitionViewModel
@Inject
constructor(
    private val fromDreamingTransitionInteractor: FromDreamingTransitionInteractor,
    animationFlow: KeyguardTransitionAnimationFlow,
) : DeviceEntryIconTransition {
    fun startTransition() = fromDreamingTransitionInteractor.startToLockscreenTransition()

    private val transitionAnimation =
        animationFlow.setup(
+2 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

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

import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
@@ -38,6 +39,7 @@ var Kosmos.fromDreamingTransitionInteractor by
            mainDispatcher = testDispatcher,
            keyguardInteractor = keyguardInteractor,
            glanceableHubTransitions = glanceableHubTransitions,
            communalSceneInteractor = communalSceneInteractor,
            communalSettingsInteractor = communalSettingsInteractor,
            powerInteractor = powerInteractor,
            keyguardOcclusionInteractor = keyguardOcclusionInteractor,
+0 −2
Original line number Diff line number Diff line
@@ -19,13 +19,11 @@ package com.android.systemui.keyguard.ui.viewmodel
import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.util.mockito.mock
import kotlinx.coroutines.ExperimentalCoroutinesApi

@ExperimentalCoroutinesApi
val Kosmos.dreamingToLockscreenTransitionViewModel by Fixture {
    DreamingToLockscreenTransitionViewModel(
        fromDreamingTransitionInteractor = mock(),
        animationFlow = keyguardTransitionAnimationFlow,
    )
}