blob: 5d18819a7a6a206f1048ad1cc789e432f503ac25 [file]
/**
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* ```
* http://www.apache.org/licenses/LICENSE-2.0
* ```
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.healthconnect.controller.service
import android.health.connect.HealthConnectManager
import com.android.healthconnect.controller.data.access.ILoadAccessUseCase
import com.android.healthconnect.controller.data.access.ILoadPermissionTypeContributorAppsUseCase
import com.android.healthconnect.controller.data.access.LoadAccessUseCase
import com.android.healthconnect.controller.data.access.LoadPermissionTypeContributorAppsUseCase
import com.android.healthconnect.controller.data.entries.api.ILoadDataAggregationsUseCase
import com.android.healthconnect.controller.data.entries.api.ILoadDataEntriesUseCase
import com.android.healthconnect.controller.data.entries.api.ILoadMenstruationDataUseCase
import com.android.healthconnect.controller.data.entries.api.LoadDataAggregationsUseCase
import com.android.healthconnect.controller.data.entries.api.LoadDataEntriesUseCase
import com.android.healthconnect.controller.data.entries.api.LoadEntriesHelper
import com.android.healthconnect.controller.data.entries.api.LoadMenstruationDataUseCase
import com.android.healthconnect.controller.dataentries.formatters.DistanceFormatter
import com.android.healthconnect.controller.dataentries.formatters.MenstruationPeriodFormatter
import com.android.healthconnect.controller.dataentries.formatters.SleepSessionFormatter
import com.android.healthconnect.controller.dataentries.formatters.StepsFormatter
import com.android.healthconnect.controller.dataentries.formatters.TotalCaloriesBurnedFormatter
import com.android.healthconnect.controller.datasources.api.ILoadLastDateWithPriorityDataUseCase
import com.android.healthconnect.controller.datasources.api.ILoadMostRecentAggregationsUseCase
import com.android.healthconnect.controller.datasources.api.ILoadPotentialPriorityListUseCase
import com.android.healthconnect.controller.datasources.api.ILoadPriorityEntriesUseCase
import com.android.healthconnect.controller.datasources.api.ISleepSessionHelper
import com.android.healthconnect.controller.datasources.api.IUpdatePriorityListUseCase
import com.android.healthconnect.controller.datasources.api.LoadLastDateWithPriorityDataUseCase
import com.android.healthconnect.controller.datasources.api.LoadMostRecentAggregationsUseCase
import com.android.healthconnect.controller.datasources.api.LoadPotentialPriorityListUseCase
import com.android.healthconnect.controller.datasources.api.LoadPriorityEntriesUseCase
import com.android.healthconnect.controller.datasources.api.SleepSessionHelper
import com.android.healthconnect.controller.datasources.api.UpdatePriorityListUseCase
import com.android.healthconnect.controller.permissions.api.GetGrantedHealthPermissionsUseCase
import com.android.healthconnect.controller.permissions.api.HealthPermissionManager
import com.android.healthconnect.controller.permissions.api.IGetGrantedHealthPermissionsUseCase
import com.android.healthconnect.controller.permissions.connectedapps.ILoadHealthPermissionApps
import com.android.healthconnect.controller.permissions.connectedapps.LoadHealthPermissionApps
import com.android.healthconnect.controller.permissions.shared.QueryRecentAccessLogsUseCase
import com.android.healthconnect.controller.permissiontypes.api.ILoadPriorityListUseCase
import com.android.healthconnect.controller.permissiontypes.api.LoadPriorityListUseCase
import com.android.healthconnect.controller.recentaccess.ILoadRecentAccessUseCase
import com.android.healthconnect.controller.recentaccess.LoadRecentAccessUseCase
import com.android.healthconnect.controller.shared.HealthPermissionReader
import com.android.healthconnect.controller.shared.app.AppInfoReader
import com.android.healthconnect.controller.shared.app.GetContributorAppInfoUseCase
import com.android.healthconnect.controller.utils.TimeSource
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineDispatcher
@Module
@InstallIn(SingletonComponent::class)
class UseCaseModule {
@Provides
fun providesLoadRecentAccessUseCase(
manager: HealthConnectManager,
@IoDispatcher dispatcher: CoroutineDispatcher,
timeSource: TimeSource
): ILoadRecentAccessUseCase {
return LoadRecentAccessUseCase(manager, dispatcher, timeSource)
}
@Provides
fun providesLoadHealthPermissionAppsUseCase(
healthPermissionReader: HealthPermissionReader,
loadGrantedPermissionsUseCase: GetGrantedHealthPermissionsUseCase,
getContributorAppInfoUseCase: GetContributorAppInfoUseCase,
queryRecentAccessUseCase: QueryRecentAccessLogsUseCase,
appInfoReader: AppInfoReader,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadHealthPermissionApps {
return LoadHealthPermissionApps(
healthPermissionReader,
loadGrantedPermissionsUseCase,
getContributorAppInfoUseCase,
queryRecentAccessUseCase,
appInfoReader,
dispatcher)
}
@Provides
fun providesLoadDataEntriesUseCase(
@IoDispatcher dispatcher: CoroutineDispatcher,
loadEntriesHelper: LoadEntriesHelper
): ILoadDataEntriesUseCase {
return LoadDataEntriesUseCase(dispatcher, loadEntriesHelper)
}
@Provides
fun providesLoadDataAggregationsUseCase(
@IoDispatcher dispatcher: CoroutineDispatcher,
stepsFormatter: StepsFormatter,
totalCaloriesBurnedFormatter: TotalCaloriesBurnedFormatter,
distanceFormatter: DistanceFormatter,
sleepSessionFormatter: SleepSessionFormatter,
healthConnectManager: HealthConnectManager,
appInfoReader: AppInfoReader,
loadEntriesHelper: LoadEntriesHelper
): ILoadDataAggregationsUseCase {
return LoadDataAggregationsUseCase(
loadEntriesHelper,
stepsFormatter,
totalCaloriesBurnedFormatter,
distanceFormatter,
sleepSessionFormatter,
healthConnectManager,
appInfoReader,
dispatcher)
}
@Provides
fun providesLoadMenstruationDataUseCase(
@IoDispatcher dispatcher: CoroutineDispatcher,
menstruationPeriodFormatter: MenstruationPeriodFormatter,
loadEntriesHelper: LoadEntriesHelper
): ILoadMenstruationDataUseCase {
return LoadMenstruationDataUseCase(
loadEntriesHelper, menstruationPeriodFormatter, dispatcher)
}
@Provides
fun providesMostRecentAggregationsUseCase(
loadDataAggregationsUseCase: LoadDataAggregationsUseCase,
loadLastDateWithPriorityDataUseCase: LoadLastDateWithPriorityDataUseCase,
sleepSessionHelper: SleepSessionHelper,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadMostRecentAggregationsUseCase {
return LoadMostRecentAggregationsUseCase(
loadDataAggregationsUseCase,
loadLastDateWithPriorityDataUseCase,
sleepSessionHelper,
dispatcher)
}
@Provides
fun providesSleepSessionHelper(
loadPriorityEntriesUseCase: LoadPriorityEntriesUseCase,
@IoDispatcher dispatcher: CoroutineDispatcher
): ISleepSessionHelper {
return SleepSessionHelper(loadPriorityEntriesUseCase, dispatcher)
}
@Provides
fun providesLoadPriorityEntriesUseCase(
loadEntriesHelper: LoadEntriesHelper,
loadPriorityListUseCase: LoadPriorityListUseCase,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadPriorityEntriesUseCase {
return LoadPriorityEntriesUseCase(loadEntriesHelper, loadPriorityListUseCase, dispatcher)
}
@Provides
fun providesLoadPotentialPriorityListUseCase(
appInfoReader: AppInfoReader,
healthConnectManager: HealthConnectManager,
healthPermissionReader: HealthPermissionReader,
loadGrantedHealthPermissionsUseCase: GetGrantedHealthPermissionsUseCase,
loadPriorityListUseCase: LoadPriorityListUseCase,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadPotentialPriorityListUseCase {
return LoadPotentialPriorityListUseCase(
appInfoReader,
healthConnectManager,
healthPermissionReader,
loadGrantedHealthPermissionsUseCase,
loadPriorityListUseCase,
dispatcher)
}
@Provides
fun providesLoadLastDateWithPriorityDataUseCase(
healthConnectManager: HealthConnectManager,
loadEntriesHelper: LoadEntriesHelper,
loadPriorityListUseCase: LoadPriorityListUseCase,
timeSource: TimeSource,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadLastDateWithPriorityDataUseCase {
return LoadLastDateWithPriorityDataUseCase(
healthConnectManager,
loadEntriesHelper,
loadPriorityListUseCase,
timeSource,
dispatcher)
}
@Provides
fun providesPriorityListUseCase(
appInfoReader: AppInfoReader,
healthConnectManager: HealthConnectManager,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadPriorityListUseCase {
return LoadPriorityListUseCase(healthConnectManager, appInfoReader, dispatcher)
}
@Provides
fun updatePriorityListUseCase(
healthConnectManager: HealthConnectManager,
@IoDispatcher dispatcher: CoroutineDispatcher
): IUpdatePriorityListUseCase {
return UpdatePriorityListUseCase(healthConnectManager, dispatcher)
}
@Provides
fun providesLoadAccessUseCase(
loadPermissionTypeContributorAppsUseCase: ILoadPermissionTypeContributorAppsUseCase,
loadGrantedHealthPermissionsUseCase: IGetGrantedHealthPermissionsUseCase,
healthPermissionReader: HealthPermissionReader,
appInfoReader: AppInfoReader,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadAccessUseCase {
return LoadAccessUseCase(
loadPermissionTypeContributorAppsUseCase,
loadGrantedHealthPermissionsUseCase,
healthPermissionReader,
appInfoReader,
dispatcher)
}
@Provides
fun providesLoadPermissionTypeContributorAppsUseCase(
appInfoReader: AppInfoReader,
healthConnectManager: HealthConnectManager,
@IoDispatcher dispatcher: CoroutineDispatcher
): ILoadPermissionTypeContributorAppsUseCase {
return LoadPermissionTypeContributorAppsUseCase(
appInfoReader, healthConnectManager, dispatcher)
}
@Provides
fun providesGetGrantedHealthPermissionsUseCase(
healthPermissionManager: HealthPermissionManager
): IGetGrantedHealthPermissionsUseCase {
return GetGrantedHealthPermissionsUseCase(healthPermissionManager)
}
}