<lambda>null1package 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