<lambda>null1 package com.android.systemui.communal.data.repository
2 
3 import com.android.compose.animation.scene.ObservableTransitionState
4 import com.android.compose.animation.scene.SceneKey
5 import com.android.compose.animation.scene.TransitionKey
6 import com.android.systemui.communal.shared.model.CommunalScenes
7 import kotlinx.coroutines.CoroutineScope
8 import kotlinx.coroutines.ExperimentalCoroutinesApi
9 import kotlinx.coroutines.delay
10 import kotlinx.coroutines.flow.Flow
11 import kotlinx.coroutines.flow.MutableStateFlow
12 import kotlinx.coroutines.flow.SharingStarted
13 import kotlinx.coroutines.flow.StateFlow
14 import kotlinx.coroutines.flow.flatMapLatest
15 import kotlinx.coroutines.flow.flowOf
16 import kotlinx.coroutines.flow.stateIn
17 import kotlinx.coroutines.launch
18 
19 /** Fake implementation of [CommunalSceneRepository]. */
20 @OptIn(ExperimentalCoroutinesApi::class)
21 class FakeCommunalSceneRepository(
22     private val applicationScope: CoroutineScope,
23     override val currentScene: MutableStateFlow<SceneKey> =
24         MutableStateFlow(CommunalScenes.Default),
25 ) : CommunalSceneRepository {
26 
27     override fun changeScene(toScene: SceneKey, transitionKey: TransitionKey?) =
28         snapToScene(toScene, 0)
29 
30     override fun snapToScene(toScene: SceneKey, delayMillis: Long) {
31         applicationScope.launch {
32             delay(delayMillis)
33             currentScene.value = toScene
34             _transitionState.value = flowOf(ObservableTransitionState.Idle(toScene))
35         }
36     }
37 
38     private val defaultTransitionState = ObservableTransitionState.Idle(CommunalScenes.Default)
39     private val _transitionState = MutableStateFlow<Flow<ObservableTransitionState>?>(null)
40     override val transitionState: StateFlow<ObservableTransitionState> =
41         _transitionState
42             .flatMapLatest { innerFlowOrNull -> innerFlowOrNull ?: flowOf(defaultTransitionState) }
43             .stateIn(
44                 scope = applicationScope,
45                 started = SharingStarted.Eagerly,
46                 initialValue = defaultTransitionState,
47             )
48 
49     override fun setTransitionState(transitionState: Flow<ObservableTransitionState>?) {
50         _transitionState.value = transitionState
51     }
52 }
53