1 /*
<lambda>null2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.qs.tiles.di
18 
19 import android.os.UserHandle
20 import com.android.systemui.kosmos.Kosmos
21 import com.android.systemui.qs.instanceIdSequenceFake
22 import com.android.systemui.qs.pipeline.shared.TileSpec
23 import com.android.systemui.qs.shared.model.TileCategory
24 import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory
25 import com.android.systemui.qs.tiles.viewmodel.QSTileConfig
26 import com.android.systemui.qs.tiles.viewmodel.QSTileState
27 import com.android.systemui.qs.tiles.viewmodel.QSTileUIConfig
28 import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction
29 import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel
30 import com.android.systemui.qs.tiles.viewmodel.qSTileConfigProvider
31 import com.android.systemui.qs.tiles.viewmodel.qsTileViewModelAdaperFactory
32 import com.android.systemui.util.mockito.any
33 import com.android.systemui.util.mockito.mock
34 import com.android.systemui.util.mockito.whenever
35 import javax.inject.Provider
36 import kotlinx.coroutines.flow.MutableStateFlow
37 import kotlinx.coroutines.flow.StateFlow
38 
39 var Kosmos.newFactoryTileMap by Kosmos.Fixture { emptyMap<String, Provider<QSTileViewModel>>() }
40 
41 val Kosmos.customTileViewModelFactory: QSTileViewModelFactory.Component by
<lambda>null42     Kosmos.Fixture {
43         mock {
44             whenever(create(any())).thenAnswer { invocation ->
45                 val tileSpec = invocation.getArgument<TileSpec>(0)
46                 val config =
47                     QSTileConfig(
48                         tileSpec,
49                         QSTileUIConfig.Empty,
50                         instanceIdSequenceFake.newInstanceId(),
51                         category = TileCategory.PROVIDED_BY_APP,
52                     )
53                 object : QSTileViewModel {
54                     override val state: StateFlow<QSTileState?> =
55                         MutableStateFlow(QSTileState.build(null, tileSpec.spec) {})
56                     override val config: QSTileConfig = config
57                     override val isAvailable: StateFlow<Boolean> = MutableStateFlow(true)
58 
59                     override fun onUserChanged(user: UserHandle) {}
60 
61                     override fun forceUpdate() {}
62 
63                     override fun onActionPerformed(userAction: QSTileUserAction) {}
64 
65                     override fun destroy() {}
66                 }
67             }
68         }
69     }
70 
71 val Kosmos.newQSTileFactory by
<lambda>null72     Kosmos.Fixture {
73         NewQSTileFactory(
74             qSTileConfigProvider,
75             qsTileViewModelAdaperFactory,
76             newFactoryTileMap,
77             customTileViewModelFactory,
78         )
79     }
80