1 /*
2 * 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.keyboard.shortcut
18
19 import android.app.role.mockRoleManager
20 import android.content.applicationContext
21 import android.content.res.mainResources
22 import android.hardware.input.fakeInputManager
23 import android.view.windowManager
24 import com.android.systemui.broadcast.broadcastDispatcher
25 import com.android.systemui.keyboard.shortcut.data.repository.CustomInputGesturesRepository
26 import com.android.systemui.keyboard.shortcut.data.repository.CustomShortcutCategoriesRepository
27 import com.android.systemui.keyboard.shortcut.data.repository.DefaultShortcutCategoriesRepository
28 import com.android.systemui.keyboard.shortcut.data.repository.InputGestureDataAdapter
29 import com.android.systemui.keyboard.shortcut.data.repository.InputGestureMaps
30 import com.android.systemui.keyboard.shortcut.data.repository.ShortcutCategoriesUtils
31 import com.android.systemui.keyboard.shortcut.data.repository.ShortcutHelperStateRepository
32 import com.android.systemui.keyboard.shortcut.data.repository.ShortcutHelperTestHelper
33 import com.android.systemui.keyboard.shortcut.data.source.AppCategoriesShortcutsSource
34 import com.android.systemui.keyboard.shortcut.data.source.CurrentAppShortcutsSource
35 import com.android.systemui.keyboard.shortcut.data.source.InputShortcutsSource
36 import com.android.systemui.keyboard.shortcut.data.source.KeyboardShortcutGroupsSource
37 import com.android.systemui.keyboard.shortcut.data.source.MultitaskingShortcutsSource
38 import com.android.systemui.keyboard.shortcut.data.source.SystemShortcutsSource
39 import com.android.systemui.keyboard.shortcut.domain.interactor.ShortcutCustomizationInteractor
40 import com.android.systemui.keyboard.shortcut.domain.interactor.ShortcutHelperCategoriesInteractor
41 import com.android.systemui.keyboard.shortcut.domain.interactor.ShortcutHelperStateInteractor
42 import com.android.systemui.keyboard.shortcut.shared.model.ShortcutHelperExclusions
43 import com.android.systemui.keyboard.shortcut.ui.ShortcutCustomizationDialogStarter
44 import com.android.systemui.keyboard.shortcut.ui.viewmodel.ShortcutCustomizationViewModel
45 import com.android.systemui.keyboard.shortcut.ui.viewmodel.ShortcutHelperViewModel
46 import com.android.systemui.keyguard.data.repository.fakeCommandQueue
47 import com.android.systemui.kosmos.Kosmos
48 import com.android.systemui.kosmos.applicationCoroutineScope
49 import com.android.systemui.kosmos.backgroundCoroutineContext
50 import com.android.systemui.kosmos.testDispatcher
51 import com.android.systemui.kosmos.testScope
52 import com.android.systemui.model.sysUiState
53 import com.android.systemui.settings.displayTracker
54 import com.android.systemui.settings.userTracker
55 import com.android.systemui.statusbar.phone.systemUIDialogFactory
56
57 var Kosmos.shortcutHelperAppCategoriesShortcutsSource: KeyboardShortcutGroupsSource by
<lambda>null58 Kosmos.Fixture { AppCategoriesShortcutsSource(windowManager, testDispatcher) }
59
60 var Kosmos.shortcutHelperSystemShortcutsSource: KeyboardShortcutGroupsSource by
<lambda>null61 Kosmos.Fixture { SystemShortcutsSource(mainResources, fakeInputManager.inputManager) }
62
63 var Kosmos.shortcutHelperMultiTaskingShortcutsSource: KeyboardShortcutGroupsSource by
<lambda>null64 Kosmos.Fixture { MultitaskingShortcutsSource(mainResources, applicationContext) }
65
66 val Kosmos.shortcutHelperStateRepository by
<lambda>null67 Kosmos.Fixture {
68 ShortcutHelperStateRepository(
69 fakeCommandQueue,
70 broadcastDispatcher,
71 fakeInputManager.inputManager,
72 testScope,
73 testDispatcher,
74 )
75 }
76
77 var Kosmos.shortcutHelperInputShortcutsSource: KeyboardShortcutGroupsSource by
<lambda>null78 Kosmos.Fixture {
79 InputShortcutsSource(mainResources, windowManager, fakeInputManager.inputManager)
80 }
81
82 var Kosmos.shortcutHelperCurrentAppShortcutsSource: KeyboardShortcutGroupsSource by
<lambda>null83 Kosmos.Fixture { CurrentAppShortcutsSource(windowManager) }
84
85 val Kosmos.shortcutHelperExclusions by
<lambda>null86 Kosmos.Fixture { ShortcutHelperExclusions(applicationContext) }
87
88 val Kosmos.shortcutCategoriesUtils by
<lambda>null89 Kosmos.Fixture {
90 ShortcutCategoriesUtils(
91 applicationContext,
92 backgroundCoroutineContext,
93 fakeInputManager.inputManager,
94 shortcutHelperExclusions,
95 )
96 }
97
98 val Kosmos.defaultShortcutCategoriesRepository by
<lambda>null99 Kosmos.Fixture {
100 DefaultShortcutCategoriesRepository(
101 applicationCoroutineScope,
102 testDispatcher,
103 shortcutHelperSystemShortcutsSource,
104 shortcutHelperMultiTaskingShortcutsSource,
105 shortcutHelperAppCategoriesShortcutsSource,
106 shortcutHelperInputShortcutsSource,
107 shortcutHelperCurrentAppShortcutsSource,
108 fakeInputManager.inputManager,
109 shortcutHelperStateRepository,
110 shortcutCategoriesUtils,
111 )
112 }
113
<lambda>null114 val Kosmos.inputGestureMaps by Kosmos.Fixture { InputGestureMaps(applicationContext) }
115
<lambda>null116 val Kosmos.inputGestureDataAdapter by Kosmos.Fixture { InputGestureDataAdapter(userTracker, inputGestureMaps, applicationContext)}
117
118 val Kosmos.customInputGesturesRepository by
<lambda>null119 Kosmos.Fixture { CustomInputGesturesRepository(userTracker, testDispatcher) }
120
121 val Kosmos.customShortcutCategoriesRepository by
<lambda>null122 Kosmos.Fixture {
123 CustomShortcutCategoriesRepository(
124 shortcutHelperStateRepository,
125 applicationCoroutineScope,
126 testDispatcher,
127 shortcutCategoriesUtils,
128 inputGestureDataAdapter,
129 customInputGesturesRepository,
130 fakeInputManager.inputManager,
131 )
132 }
133
134 val Kosmos.shortcutHelperTestHelper by
<lambda>null135 Kosmos.Fixture {
136 ShortcutHelperTestHelper(
137 shortcutHelperStateRepository,
138 applicationContext,
139 broadcastDispatcher,
140 fakeCommandQueue,
141 fakeInputManager,
142 windowManager,
143 )
144 }
145
146 val Kosmos.shortcutHelperStateInteractor by
<lambda>null147 Kosmos.Fixture {
148 ShortcutHelperStateInteractor(
149 displayTracker,
150 testScope,
151 sysUiState,
152 shortcutHelperStateRepository,
153 )
154 }
155
156 val Kosmos.shortcutHelperCategoriesInteractor by
<lambda>null157 Kosmos.Fixture {
158 ShortcutHelperCategoriesInteractor(
159 context = applicationContext,
160 defaultShortcutCategoriesRepository,
161 ) {
162 customShortcutCategoriesRepository
163 }
164 }
165
166 val Kosmos.shortcutHelperViewModel by
<lambda>null167 Kosmos.Fixture {
168 ShortcutHelperViewModel(
169 applicationContext,
170 mockRoleManager,
171 userTracker,
172 applicationCoroutineScope,
173 testDispatcher,
174 shortcutHelperStateInteractor,
175 shortcutHelperCategoriesInteractor,
176 )
177 }
178
179 val Kosmos.shortcutCustomizationDialogStarterFactory by
<lambda>null180 Kosmos.Fixture {
181 object : ShortcutCustomizationDialogStarter.Factory {
182 override fun create(): ShortcutCustomizationDialogStarter {
183 return ShortcutCustomizationDialogStarter(
184 shortcutCustomizationViewModelFactory,
185 systemUIDialogFactory,
186 )
187 }
188 }
189 }
190
191 val Kosmos.shortcutCustomizationInteractor by
<lambda>null192 Kosmos.Fixture { ShortcutCustomizationInteractor(customShortcutCategoriesRepository) }
193
194 val Kosmos.shortcutCustomizationViewModelFactory by
<lambda>null195 Kosmos.Fixture {
196 object : ShortcutCustomizationViewModel.Factory {
197 override fun create(): ShortcutCustomizationViewModel {
198 return ShortcutCustomizationViewModel(
199 applicationContext,
200 shortcutCustomizationInteractor,
201 )
202 }
203 }
204 }
205