<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.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