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