1 /**
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * ```
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * ```
10  *
11  * Unless required by applicable law or agreed to in writing, software distributed under the License
12  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13  * or implied. See the License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.android.healthconnect.controller.service
17 
18 import android.content.Context
19 import android.health.connect.HealthConnectManager
20 import com.android.healthconnect.controller.data.access.ILoadAccessUseCase
21 import com.android.healthconnect.controller.data.access.ILoadPermissionTypeContributorAppsUseCase
22 import com.android.healthconnect.controller.data.access.LoadAccessUseCase
23 import com.android.healthconnect.controller.data.access.LoadPermissionTypeContributorAppsUseCase
24 import com.android.healthconnect.controller.data.entries.api.ILoadDataAggregationsUseCase
25 import com.android.healthconnect.controller.data.entries.api.ILoadDataEntriesUseCase
26 import com.android.healthconnect.controller.data.entries.api.ILoadMenstruationDataUseCase
27 import com.android.healthconnect.controller.data.entries.api.LoadDataAggregationsUseCase
28 import com.android.healthconnect.controller.data.entries.api.LoadDataEntriesUseCase
29 import com.android.healthconnect.controller.data.entries.api.LoadEntriesHelper
30 import com.android.healthconnect.controller.data.entries.api.LoadMenstruationDataUseCase
31 import com.android.healthconnect.controller.dataentries.formatters.DistanceFormatter
32 import com.android.healthconnect.controller.dataentries.formatters.MenstruationPeriodFormatter
33 import com.android.healthconnect.controller.dataentries.formatters.SleepSessionFormatter
34 import com.android.healthconnect.controller.dataentries.formatters.StepsFormatter
35 import com.android.healthconnect.controller.dataentries.formatters.TotalCaloriesBurnedFormatter
36 import com.android.healthconnect.controller.datasources.api.ILoadLastDateWithPriorityDataUseCase
37 import com.android.healthconnect.controller.datasources.api.ILoadMostRecentAggregationsUseCase
38 import com.android.healthconnect.controller.datasources.api.ILoadPotentialPriorityListUseCase
39 import com.android.healthconnect.controller.datasources.api.ILoadPriorityEntriesUseCase
40 import com.android.healthconnect.controller.datasources.api.ISleepSessionHelper
41 import com.android.healthconnect.controller.datasources.api.IUpdatePriorityListUseCase
42 import com.android.healthconnect.controller.datasources.api.LoadLastDateWithPriorityDataUseCase
43 import com.android.healthconnect.controller.datasources.api.LoadMostRecentAggregationsUseCase
44 import com.android.healthconnect.controller.datasources.api.LoadPotentialPriorityListUseCase
45 import com.android.healthconnect.controller.datasources.api.LoadPriorityEntriesUseCase
46 import com.android.healthconnect.controller.datasources.api.SleepSessionHelper
47 import com.android.healthconnect.controller.datasources.api.UpdatePriorityListUseCase
48 import com.android.healthconnect.controller.exportimport.api.HealthDataExportManager
49 import com.android.healthconnect.controller.exportimport.api.HealthDataImportManager
50 import com.android.healthconnect.controller.exportimport.api.ILoadExportSettingsUseCase
51 import com.android.healthconnect.controller.exportimport.api.ILoadImportStatusUseCase
52 import com.android.healthconnect.controller.exportimport.api.ILoadScheduledExportStatusUseCase
53 import com.android.healthconnect.controller.exportimport.api.IQueryDocumentProvidersUseCase
54 import com.android.healthconnect.controller.exportimport.api.IUpdateExportSettingsUseCase
55 import com.android.healthconnect.controller.exportimport.api.LoadExportSettingsUseCase
56 import com.android.healthconnect.controller.exportimport.api.LoadImportStatusUseCase
57 import com.android.healthconnect.controller.exportimport.api.LoadScheduledExportStatusUseCase
58 import com.android.healthconnect.controller.exportimport.api.QueryDocumentProvidersUseCase
59 import com.android.healthconnect.controller.exportimport.api.UpdateExportSettingsUseCase
60 import com.android.healthconnect.controller.permissions.additionalaccess.ILoadExerciseRoutePermissionUseCase
61 import com.android.healthconnect.controller.permissions.additionalaccess.LoadDeclaredHealthPermissionUseCase
62 import com.android.healthconnect.controller.permissions.additionalaccess.LoadExerciseRoutePermissionUseCase
63 import com.android.healthconnect.controller.permissions.api.GetGrantedHealthPermissionsUseCase
64 import com.android.healthconnect.controller.permissions.api.GetHealthPermissionsFlagsUseCase
65 import com.android.healthconnect.controller.permissions.api.HealthPermissionManager
66 import com.android.healthconnect.controller.permissions.api.IGetGrantedHealthPermissionsUseCase
67 import com.android.healthconnect.controller.permissions.connectedapps.ILoadHealthPermissionApps
68 import com.android.healthconnect.controller.permissions.connectedapps.LoadHealthPermissionApps
69 import com.android.healthconnect.controller.permissions.shared.IQueryRecentAccessLogsUseCase
70 import com.android.healthconnect.controller.permissions.shared.QueryRecentAccessLogsUseCase
71 import com.android.healthconnect.controller.permissiontypes.api.ILoadPriorityListUseCase
72 import com.android.healthconnect.controller.permissiontypes.api.LoadPriorityListUseCase
73 import com.android.healthconnect.controller.recentaccess.ILoadRecentAccessUseCase
74 import com.android.healthconnect.controller.recentaccess.LoadRecentAccessUseCase
75 import com.android.healthconnect.controller.shared.HealthPermissionReader
76 import com.android.healthconnect.controller.shared.app.AppInfoReader
77 import com.android.healthconnect.controller.shared.app.GetContributorAppInfoUseCase
78 import com.android.healthconnect.controller.shared.app.IGetContributorAppInfoUseCase
79 import com.android.healthconnect.controller.utils.TimeSource
80 import dagger.Module
81 import dagger.Provides
82 import dagger.hilt.InstallIn
83 import dagger.hilt.android.qualifiers.ApplicationContext
84 import dagger.hilt.components.SingletonComponent
85 import kotlinx.coroutines.CoroutineDispatcher
86 
87 @Module
88 @InstallIn(SingletonComponent::class)
89 class UseCaseModule {
90     @Provides
providesLoadRecentAccessUseCasenull91     fun providesLoadRecentAccessUseCase(
92         manager: HealthConnectManager,
93         @IoDispatcher dispatcher: CoroutineDispatcher,
94         timeSource: TimeSource
95     ): ILoadRecentAccessUseCase {
96         return LoadRecentAccessUseCase(manager, dispatcher, timeSource)
97     }
98 
99     @Provides
providesLoadHealthPermissionAppsUseCasenull100     fun providesLoadHealthPermissionAppsUseCase(
101         healthPermissionReader: HealthPermissionReader,
102         loadGrantedPermissionsUseCase: GetGrantedHealthPermissionsUseCase,
103         getContributorAppInfoUseCase: GetContributorAppInfoUseCase,
104         queryRecentAccessUseCase: QueryRecentAccessLogsUseCase,
105         appInfoReader: AppInfoReader,
106         @IoDispatcher dispatcher: CoroutineDispatcher
107     ): ILoadHealthPermissionApps {
108         return LoadHealthPermissionApps(
109             healthPermissionReader,
110             loadGrantedPermissionsUseCase,
111             getContributorAppInfoUseCase,
112             queryRecentAccessUseCase,
113             appInfoReader,
114             dispatcher)
115     }
116 
117     @Provides
providesLoadDataEntriesUseCasenull118     fun providesLoadDataEntriesUseCase(
119         @IoDispatcher dispatcher: CoroutineDispatcher,
120         loadEntriesHelper: LoadEntriesHelper
121     ): ILoadDataEntriesUseCase {
122         return LoadDataEntriesUseCase(dispatcher, loadEntriesHelper)
123     }
124 
125     @Provides
providesExerciseRoutePermissionUseCasenull126     fun providesExerciseRoutePermissionUseCase(
127         loadDeclaredHealthPermissionUseCase: LoadDeclaredHealthPermissionUseCase,
128         getHealthPermissionsFlagsUseCase: GetHealthPermissionsFlagsUseCase,
129         getGrantedHealthPermissionsUseCase: IGetGrantedHealthPermissionsUseCase,
130         @IoDispatcher dispatcher: CoroutineDispatcher
131     ): ILoadExerciseRoutePermissionUseCase {
132         return LoadExerciseRoutePermissionUseCase(
133             loadDeclaredHealthPermissionUseCase,
134             getHealthPermissionsFlagsUseCase,
135             getGrantedHealthPermissionsUseCase,
136             dispatcher)
137     }
138 
139     @Provides
providesLoadDataAggregationsUseCasenull140     fun providesLoadDataAggregationsUseCase(
141         @IoDispatcher dispatcher: CoroutineDispatcher,
142         stepsFormatter: StepsFormatter,
143         totalCaloriesBurnedFormatter: TotalCaloriesBurnedFormatter,
144         distanceFormatter: DistanceFormatter,
145         sleepSessionFormatter: SleepSessionFormatter,
146         healthConnectManager: HealthConnectManager,
147         appInfoReader: AppInfoReader,
148         loadEntriesHelper: LoadEntriesHelper
149     ): ILoadDataAggregationsUseCase {
150         return LoadDataAggregationsUseCase(
151             loadEntriesHelper,
152             stepsFormatter,
153             totalCaloriesBurnedFormatter,
154             distanceFormatter,
155             sleepSessionFormatter,
156             healthConnectManager,
157             appInfoReader,
158             dispatcher)
159     }
160 
161     @Provides
providesLoadMenstruationDataUseCasenull162     fun providesLoadMenstruationDataUseCase(
163         @IoDispatcher dispatcher: CoroutineDispatcher,
164         menstruationPeriodFormatter: MenstruationPeriodFormatter,
165         loadEntriesHelper: LoadEntriesHelper
166     ): ILoadMenstruationDataUseCase {
167         return LoadMenstruationDataUseCase(
168             loadEntriesHelper, menstruationPeriodFormatter, dispatcher)
169     }
170 
171     @Provides
providesMostRecentAggregationsUseCasenull172     fun providesMostRecentAggregationsUseCase(
173         loadDataAggregationsUseCase: LoadDataAggregationsUseCase,
174         loadLastDateWithPriorityDataUseCase: LoadLastDateWithPriorityDataUseCase,
175         sleepSessionHelper: SleepSessionHelper,
176         @IoDispatcher dispatcher: CoroutineDispatcher
177     ): ILoadMostRecentAggregationsUseCase {
178         return LoadMostRecentAggregationsUseCase(
179             loadDataAggregationsUseCase,
180             loadLastDateWithPriorityDataUseCase,
181             sleepSessionHelper,
182             dispatcher)
183     }
184 
185     @Provides
providesSleepSessionHelpernull186     fun providesSleepSessionHelper(
187         loadPriorityEntriesUseCase: LoadPriorityEntriesUseCase,
188         @IoDispatcher dispatcher: CoroutineDispatcher
189     ): ISleepSessionHelper {
190         return SleepSessionHelper(loadPriorityEntriesUseCase, dispatcher)
191     }
192 
193     @Provides
providesLoadPriorityEntriesUseCasenull194     fun providesLoadPriorityEntriesUseCase(
195         loadEntriesHelper: LoadEntriesHelper,
196         loadPriorityListUseCase: LoadPriorityListUseCase,
197         @IoDispatcher dispatcher: CoroutineDispatcher
198     ): ILoadPriorityEntriesUseCase {
199         return LoadPriorityEntriesUseCase(loadEntriesHelper, loadPriorityListUseCase, dispatcher)
200     }
201 
202     @Provides
providesLoadPotentialPriorityListUseCasenull203     fun providesLoadPotentialPriorityListUseCase(
204         appInfoReader: AppInfoReader,
205         healthConnectManager: HealthConnectManager,
206         healthPermissionReader: HealthPermissionReader,
207         loadGrantedHealthPermissionsUseCase: GetGrantedHealthPermissionsUseCase,
208         loadPriorityListUseCase: LoadPriorityListUseCase,
209         @IoDispatcher dispatcher: CoroutineDispatcher
210     ): ILoadPotentialPriorityListUseCase {
211         return LoadPotentialPriorityListUseCase(
212             appInfoReader,
213             healthConnectManager,
214             healthPermissionReader,
215             loadGrantedHealthPermissionsUseCase,
216             loadPriorityListUseCase,
217             dispatcher)
218     }
219 
220     @Provides
providesLoadLastDateWithPriorityDataUseCasenull221     fun providesLoadLastDateWithPriorityDataUseCase(
222         healthConnectManager: HealthConnectManager,
223         loadEntriesHelper: LoadEntriesHelper,
224         loadPriorityListUseCase: LoadPriorityListUseCase,
225         timeSource: TimeSource,
226         @IoDispatcher dispatcher: CoroutineDispatcher
227     ): ILoadLastDateWithPriorityDataUseCase {
228         return LoadLastDateWithPriorityDataUseCase(
229             healthConnectManager,
230             loadEntriesHelper,
231             loadPriorityListUseCase,
232             timeSource,
233             dispatcher)
234     }
235 
236     @Provides
providesPriorityListUseCasenull237     fun providesPriorityListUseCase(
238         appInfoReader: AppInfoReader,
239         healthConnectManager: HealthConnectManager,
240         @IoDispatcher dispatcher: CoroutineDispatcher
241     ): ILoadPriorityListUseCase {
242         return LoadPriorityListUseCase(healthConnectManager, appInfoReader, dispatcher)
243     }
244 
245     @Provides
updatePriorityListUseCasenull246     fun updatePriorityListUseCase(
247         healthConnectManager: HealthConnectManager,
248         @IoDispatcher dispatcher: CoroutineDispatcher
249     ): IUpdatePriorityListUseCase {
250         return UpdatePriorityListUseCase(healthConnectManager, dispatcher)
251     }
252 
253     @Provides
providesLoadAccessUseCasenull254     fun providesLoadAccessUseCase(
255         loadPermissionTypeContributorAppsUseCase: ILoadPermissionTypeContributorAppsUseCase,
256         loadGrantedHealthPermissionsUseCase: IGetGrantedHealthPermissionsUseCase,
257         healthPermissionReader: HealthPermissionReader,
258         appInfoReader: AppInfoReader,
259         @IoDispatcher dispatcher: CoroutineDispatcher
260     ): ILoadAccessUseCase {
261         return LoadAccessUseCase(
262             loadPermissionTypeContributorAppsUseCase,
263             loadGrantedHealthPermissionsUseCase,
264             healthPermissionReader,
265             appInfoReader,
266             dispatcher)
267     }
268 
269     @Provides
providesLoadPermissionTypeContributorAppsUseCasenull270     fun providesLoadPermissionTypeContributorAppsUseCase(
271         appInfoReader: AppInfoReader,
272         healthConnectManager: HealthConnectManager,
273         @IoDispatcher dispatcher: CoroutineDispatcher
274     ): ILoadPermissionTypeContributorAppsUseCase {
275         return LoadPermissionTypeContributorAppsUseCase(
276             appInfoReader, healthConnectManager, dispatcher)
277     }
278 
279     @Provides
providesGetGrantedHealthPermissionsUseCasenull280     fun providesGetGrantedHealthPermissionsUseCase(
281         healthPermissionManager: HealthPermissionManager
282     ): IGetGrantedHealthPermissionsUseCase {
283         return GetGrantedHealthPermissionsUseCase(healthPermissionManager)
284     }
285 
286     @Provides
providesQueryRecentAccessLogsUseCasenull287     fun providesQueryRecentAccessLogsUseCase(
288         healthConnectManager: HealthConnectManager,
289         @IoDispatcher dispatcher: CoroutineDispatcher
290     ): IQueryRecentAccessLogsUseCase {
291         return QueryRecentAccessLogsUseCase(healthConnectManager, dispatcher)
292     }
293 
294     @Provides
providesGetContributorAppInfoUseCasenull295     fun providesGetContributorAppInfoUseCase(
296         healthConnectManager: HealthConnectManager,
297         @ApplicationContext context: Context,
298         @IoDispatcher dispatcher: CoroutineDispatcher
299     ): IGetContributorAppInfoUseCase {
300         return GetContributorAppInfoUseCase(healthConnectManager, context, dispatcher)
301     }
302 
303     @Provides
providesLoadExportSettingsUseCasenull304     fun providesLoadExportSettingsUseCase(
305         healthDataExportManager: HealthDataExportManager
306     ): ILoadExportSettingsUseCase {
307         return LoadExportSettingsUseCase(healthDataExportManager)
308     }
309 
310     @Provides
providesUpdateExportSettingsUseCasenull311     fun providesUpdateExportSettingsUseCase(
312         healthDataExportManager: HealthDataExportManager
313     ): IUpdateExportSettingsUseCase {
314         return UpdateExportSettingsUseCase(healthDataExportManager)
315     }
316 
317     @Provides
providesLoadScheduledExportStatusUseCasenull318     fun providesLoadScheduledExportStatusUseCase(
319         healthDataExportManager: HealthDataExportManager
320     ): ILoadScheduledExportStatusUseCase {
321         return LoadScheduledExportStatusUseCase(healthDataExportManager)
322     }
323 
324     @Provides
providesQueryDocumentProvidersUseCasenull325     fun providesQueryDocumentProvidersUseCase(
326         healthDataExportManager: HealthDataExportManager
327     ): IQueryDocumentProvidersUseCase {
328         return QueryDocumentProvidersUseCase(healthDataExportManager)
329     }
330 
331     @Provides
providesLoadImportStatusUseCasenull332     fun providesLoadImportStatusUseCase(
333         healthDataImportManager: HealthDataImportManager
334     ): ILoadImportStatusUseCase {
335         return LoadImportStatusUseCase(healthDataImportManager)
336     }
337 }
338