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

Commit 3cc93840 authored by Lucas Silva's avatar Lucas Silva
Browse files

Listen to transition animation progress on immediate dispatcher

This reduces the latency of the animation by avoiding an additional
handler dispatch.

Bug: 392969914
Test: atest CommunalSceneTransitionInteractorTest
Flag: EXEMPT bugfix
Change-Id: I72b6a5831fb0f0378a49d183e4a2c9a05ee3a6f9
parent 57c32980
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.communal.data.repository.CommunalSceneTransitionRepo
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.InternalKeyguardTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
@@ -37,6 +38,7 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.util.kotlin.pairwise
import java.util.UUID
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.SharingStarted
@@ -64,6 +66,7 @@ constructor(
    val internalTransitionInteractor: InternalKeyguardTransitionInteractor,
    private val settingsInteractor: CommunalSettingsInteractor,
    @Application private val applicationScope: CoroutineScope,
    @Main private val mainImmediateDispatcher: CoroutineDispatcher,
    private val sceneInteractor: CommunalSceneInteractor,
    private val repository: CommunalSceneTransitionRepository,
    private val powerInteractor: PowerInteractor,
@@ -143,7 +146,7 @@ constructor(

    /** Monitors [SceneTransitionLayout] state and updates KTF state accordingly. */
    private fun listenForSceneTransitionProgress() {
        applicationScope.launch {
        applicationScope.launch("$TAG#listenForSceneTransitionProgress", mainImmediateDispatcher) {
            sceneInteractor.transitionState
                .pairwise(ObservableTransitionState.Idle(CommunalScenes.Blank))
                .collect { (prevTransition, transition) ->
@@ -256,7 +259,10 @@ constructor(

    private fun collectProgress(transition: ObservableTransitionState.Transition) {
        progressJob?.cancel()
        progressJob = applicationScope.launch { transition.progress.collect { updateProgress(it) } }
        progressJob =
            applicationScope.launch("$TAG#collectProgress", mainImmediateDispatcher) {
                transition.progress.collect { updateProgress(it) }
            }
    }

    private suspend fun startTransitionFromGlanceableHub() {
@@ -300,4 +306,8 @@ constructor(
            TransitionState.RUNNING,
        )
    }

    private companion object {
        const val TAG = "CommunalSceneTransitionInteractor"
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -22,12 +22,14 @@ import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.power.domain.interactor.powerInteractor

val Kosmos.communalSceneTransitionInteractor: CommunalSceneTransitionInteractor by
    Kosmos.Fixture {
        CommunalSceneTransitionInteractor(
            applicationScope = applicationCoroutineScope,
            mainImmediateDispatcher = testDispatcher,
            transitionInteractor = keyguardTransitionInteractor,
            internalTransitionInteractor = internalKeyguardTransitionInteractor,
            settingsInteractor = communalSettingsInteractor,