anytype-kotlin-wild/app/src/main/java/com/anytypeio/anytype/di/feature/settings/ProfileDI.kt
Evgenii Kozlov 5886fc1ae5
DROID-1654 App | Feature | Multispaces + Misc. enhancements (#300)
Co-authored-by: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com>
2023-10-24 12:41:32 +02:00

119 lines
3.7 KiB
Kotlin

package com.anytypeio.anytype.di.feature.settings
import com.anytypeio.anytype.analytics.base.Analytics
import com.anytypeio.anytype.core_utils.di.scope.PerScreen
import com.anytypeio.anytype.domain.account.DeleteAccount
import com.anytypeio.anytype.domain.auth.interactor.Logout
import com.anytypeio.anytype.domain.auth.repo.AuthRepository
import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers
import com.anytypeio.anytype.domain.block.repo.BlockRepository
import com.anytypeio.anytype.domain.config.ConfigStorage
import com.anytypeio.anytype.domain.config.UserSettingsRepository
import com.anytypeio.anytype.domain.debugging.DebugSpace
import com.anytypeio.anytype.domain.icon.SetDocumentImageIcon
import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.`object`.SetObjectDetails
import com.anytypeio.anytype.domain.workspace.SpaceManager
import com.anytypeio.anytype.presentation.spaces.SpaceGradientProvider
import com.anytypeio.anytype.ui.settings.ProfileFragment
import com.anytypeio.anytype.ui_settings.account.ProfileViewModel
import dagger.Module
import dagger.Provides
import dagger.Subcomponent
@Subcomponent(modules = [ProfileModule::class])
@PerScreen
interface ProfileSubComponent {
@Subcomponent.Builder
interface Builder {
fun module(module: ProfileModule): Builder
fun build(): ProfileSubComponent
}
fun inject(fragment: ProfileFragment)
}
@Module(includes = [ProfileModule.Bindings::class])
object ProfileModule {
@JvmStatic
@Provides
@PerScreen
fun provideViewModelFactory(
deleteAccount: DeleteAccount,
analytics: Analytics,
storelessSubscriptionContainer: StorelessSubscriptionContainer,
setObjectDetails: SetObjectDetails,
configStorage: ConfigStorage,
urlBuilder: UrlBuilder,
setDocumentImageIcon: SetDocumentImageIcon,
spaceGradientProvider: SpaceGradientProvider
): ProfileViewModel.Factory = ProfileViewModel.Factory(
deleteAccount = deleteAccount,
analytics = analytics,
storelessSubscriptionContainer = storelessSubscriptionContainer,
setObjectDetails = setObjectDetails,
configStorage = configStorage,
urlBuilder = urlBuilder,
setDocumentImageIcon = setDocumentImageIcon,
spaceGradientProvider = spaceGradientProvider
)
@Provides
@PerScreen
fun provideSpaceGradientProvider(): SpaceGradientProvider = SpaceGradientProvider.Default
@Provides
@PerScreen
fun provideDebugSync(
repo: BlockRepository,
dispatchers: AppCoroutineDispatchers
): DebugSpace = DebugSpace(repo = repo, dispatchers = dispatchers)
@JvmStatic
@PerScreen
@Provides
fun provideLogoutUseCase(
repo: AuthRepository,
provider: ConfigStorage,
user: UserSettingsRepository,
dispatchers: AppCoroutineDispatchers,
spaceManager: SpaceManager
): Logout = Logout(
repo = repo,
config = provider,
user = user,
dispatchers = dispatchers,
spaceManager = spaceManager
)
@JvmStatic
@Provides
@PerScreen
fun deleteAccount(repo: AuthRepository): DeleteAccount = DeleteAccount(repo)
@JvmStatic
@Provides
@PerScreen
fun provideSetObjectDetails(
repo: BlockRepository,
dispatchers: AppCoroutineDispatchers
): SetObjectDetails = SetObjectDetails(
repo,
dispatchers
)
@JvmStatic
@Provides
@PerScreen
fun provideSetDocumentImageIcon(
repo: BlockRepository
): SetDocumentImageIcon = SetDocumentImageIcon(repo)
@Module
interface Bindings {
// Add bindings if needed
}
}