<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.flow.Flow
10 import kotlinx.coroutines.flow.MutableStateFlow
11 import kotlinx.coroutines.flow.SharingStarted
12 import kotlinx.coroutines.flow.StateFlow
13 import kotlinx.coroutines.flow.flatMapLatest
14 import kotlinx.coroutines.flow.flowOf
15 import kotlinx.coroutines.flow.stateIn
16 import kotlinx.coroutines.launch
17 
18 /** Fake implementation of [CommunalSceneRepository]. */
19 @OptIn(ExperimentalCoroutinesApi::class)
20 class FakeCommunalSceneRepository(
21     private val applicationScope: CoroutineScope,
22     override val currentScene: MutableStateFlow<SceneKey> =
23         MutableStateFlow(CommunalScenes.Default),
24 ) : CommunalSceneRepository {
25 
26     override fun changeScene(toScene: SceneKey, transitionKey: TransitionKey?) =
27         snapToScene(toScene)
28 
29     override fun snapToScene(toScene: SceneKey) {
30         applicationScope.launch {
31             currentScene.value = toScene
32             _transitionState.value = flowOf(ObservableTransitionState.Idle(toScene))
33         }
34     }
35 
36     private val defaultTransitionState = ObservableTransitionState.Idle(CommunalScenes.Default)
37     private val _transitionState = MutableStateFlow<Flow<ObservableTransitionState>?>(null)
38     override val transitionState: StateFlow<ObservableTransitionState> =
39         _transitionState
40             .flatMapLatest { innerFlowOrNull -> innerFlowOrNull ?: flowOf(defaultTransitionState) }
41             .stateIn(
42                 scope = applicationScope,
43                 started = SharingStarted.Eagerly,
44                 initialValue = defaultTransitionState,
45             )
46 
47     override fun setTransitionState(transitionState: Flow<ObservableTransitionState>?) {
48         _transitionState.value = transitionState
49     }
50 }
51