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