xref: /aosp_15_r20/frameworks/base/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1 package com.android.systemui.scene
2 
3 import android.view.View
4 import com.android.compose.animation.scene.ObservableTransitionState
5 import com.android.systemui.classifier.domain.interactor.falsingInteractor
6 import com.android.systemui.haptics.msdl.msdlPlayer
7 import com.android.systemui.kosmos.Kosmos
8 import com.android.systemui.kosmos.Kosmos.Fixture
9 import com.android.systemui.power.domain.interactor.powerInteractor
10 import com.android.systemui.scene.domain.interactor.sceneInteractor
11 import com.android.systemui.scene.shared.logger.sceneLogger
12 import com.android.systemui.scene.shared.model.Overlays
13 import com.android.systemui.scene.shared.model.SceneContainerConfig
14 import com.android.systemui.scene.shared.model.Scenes
15 import com.android.systemui.scene.ui.FakeOverlay
16 import com.android.systemui.scene.ui.composable.SceneContainerTransitions
17 import com.android.systemui.scene.ui.viewmodel.SceneContainerHapticsViewModel
18 import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
19 import com.android.systemui.scene.ui.viewmodel.splitEdgeDetector
20 import com.android.systemui.shade.domain.interactor.shadeInteractor
21 import com.android.systemui.statusbar.domain.interactor.remoteInputInteractor
22 import kotlinx.coroutines.flow.MutableStateFlow
23 import org.mockito.kotlin.mock
24 
<lambda>null25 var Kosmos.sceneKeys by Fixture {
26     listOf(
27         Scenes.QuickSettings,
28         Scenes.Shade,
29         Scenes.Lockscreen,
30         Scenes.Bouncer,
31         Scenes.Gone,
32         Scenes.Communal,
33         Scenes.Dream,
34     )
35 }
36 
<lambda>null37 val Kosmos.initialSceneKey by Fixture { Scenes.Lockscreen }
38 
<lambda>null39 var Kosmos.overlayKeys by Fixture {
40     listOf(Overlays.NotificationsShade, Overlays.QuickSettingsShade)
41 }
42 
<lambda>null43 val Kosmos.fakeOverlaysByKeys by Fixture { overlayKeys.associateWith { FakeOverlay(it) } }
44 
<lambda>null45 val Kosmos.fakeOverlays by Fixture { fakeOverlaysByKeys.values.toSet() }
46 
<lambda>null47 val Kosmos.overlays by Fixture { fakeOverlays }
48 
<lambda>null49 var Kosmos.sceneContainerConfig by Fixture {
50     val navigationDistances =
51         mapOf(
52             Scenes.Gone to 0,
53             Scenes.Lockscreen to 0,
54             Scenes.Communal to 1,
55             Scenes.Dream to 2,
56             Scenes.Shade to 3,
57             Scenes.QuickSettings to 4,
58             Scenes.Bouncer to 5,
59         )
60 
61     SceneContainerConfig(
62         sceneKeys = sceneKeys,
63         initialSceneKey = initialSceneKey,
64         transitions = SceneContainerTransitions,
65         overlayKeys = overlayKeys,
66         navigationDistances = navigationDistances,
67     )
68 }
69 
<lambda>null70 val Kosmos.transitionState by Fixture {
71     MutableStateFlow<ObservableTransitionState>(
72         ObservableTransitionState.Idle(sceneContainerConfig.initialSceneKey)
73     )
74 }
75 
<lambda>null76 val Kosmos.sceneContainerViewModel by Fixture {
77     sceneContainerViewModelFactory
78         .create(mock<View>()) {}
79         .apply { setTransitionState(transitionState) }
80 }
81 
<lambda>null82 val Kosmos.sceneContainerViewModelFactory by Fixture {
83     object : SceneContainerViewModel.Factory {
84         override fun create(
85             view: View,
86             motionEventHandlerReceiver: (SceneContainerViewModel.MotionEventHandler?) -> Unit,
87         ): SceneContainerViewModel =
88             SceneContainerViewModel(
89                 sceneInteractor = sceneInteractor,
90                 falsingInteractor = falsingInteractor,
91                 powerInteractor = powerInteractor,
92                 shadeInteractor = shadeInteractor,
93                 remoteInputInteractor = remoteInputInteractor,
94                 splitEdgeDetector = splitEdgeDetector,
95                 logger = sceneLogger,
96                 hapticsViewModelFactory = sceneContainerHapticsViewModelFactory,
97                 view = view,
98                 motionEventHandlerReceiver = motionEventHandlerReceiver,
99             )
100     }
101 }
102 
<lambda>null103 val Kosmos.sceneContainerHapticsViewModelFactory by Fixture {
104     object : SceneContainerHapticsViewModel.Factory {
105         override fun create(view: View): SceneContainerHapticsViewModel {
106             return SceneContainerHapticsViewModel(
107                 view = view,
108                 sceneInteractor = sceneInteractor,
109                 shadeInteractor = shadeInteractor,
110                 msdlPlayer = msdlPlayer,
111             )
112         }
113     }
114 }
115