diff --git a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt index 80e673d2..8558267d 100644 --- a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt +++ b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt @@ -1,69 +1,28 @@ package com.ahmadkharfan.androidstudiolite.di -import com.ahmadkharfan.androidstudiolite.core.environment.IdeEnvironmentPaths -import com.ahmadkharfan.androidstudiolite.feature.onboarding.data.AndroidOnboardingRepository -import com.ahmadkharfan.androidstudiolite.domain.repository.OnboardingRepository -import com.ahmadkharfan.androidstudiolite.feature.projects.createproject.CreateProjectViewModel -import com.ahmadkharfan.androidstudiolite.feature.editor.EditorViewModel -import com.ahmadkharfan.androidstudiolite.feature.editor.aichat.AiChatViewModel -import com.ahmadkharfan.androidstudiolite.feature.projects.folderpicker.FolderPickerViewModel -import com.ahmadkharfan.androidstudiolite.feature.projects.hub.HubViewModel -import com.ahmadkharfan.androidstudiolite.feature.onboarding.complete.CompleteViewModel -import com.ahmadkharfan.androidstudiolite.feature.onboarding.permissions.PermissionsViewModel -import com.ahmadkharfan.androidstudiolite.feature.projects.openproject.OpenProjectViewModel -import com.ahmadkharfan.androidstudiolite.feature.settings.aiagent.AiAgentViewModel -import com.ahmadkharfan.androidstudiolite.feature.settings.buildrun.BuildRunViewModel -import com.ahmadkharfan.androidstudiolite.feature.settings.editor.EditorSettingsViewModel -import com.ahmadkharfan.androidstudiolite.feature.settings.general.GeneralViewModel -import com.ahmadkharfan.androidstudiolite.feature.settings.root.SettingsRootViewModel -import com.ahmadkharfan.androidstudiolite.feature.terminal.TerminalViewModel + import com.ahmadkharfan.androidstudiolite.core.network.NetworkMonitor +import com.ahmadkharfan.androidstudiolite.feature.editor.di.editorModule +import com.ahmadkharfan.androidstudiolite.feature.onboarding.di.onboardingModule +import com.ahmadkharfan.androidstudiolite.feature.projects.di.projectsModule +import com.ahmadkharfan.androidstudiolite.feature.settings.di.settingsModule +import com.ahmadkharfan.androidstudiolite.feature.terminal.di.terminalFeatureModule import org.koin.android.ext.koin.androidContext -import org.koin.core.module.dsl.viewModel -import org.koin.core.module.dsl.viewModelOf import org.koin.dsl.module - +/** Only genuinely app-scoped bindings live here; each feature declares its own. */ val dataModule = module { - single { AndroidOnboardingRepository(androidContext()) } single { NetworkMonitor(androidContext()) } } -val viewModelModule = module { - viewModelOf(::PermissionsViewModel) - viewModelOf(::CompleteViewModel) - viewModelOf(::HubViewModel) - viewModelOf(::OpenProjectViewModel) +private val featureModules = listOf( + onboardingModule, + settingsModule, + projectsModule, + terminalFeatureModule, + editorModule, +) - viewModel { - CreateProjectViewModel( - templateRepository = get(), - projectRepository = get(), - defaultLocation = IdeEnvironmentPaths.projectsDir(androidContext()).absolutePath, - ) - } - - viewModel { params -> AiChatViewModel(get(), get(), get(), projectId = params.get()) } - viewModelOf(::TerminalViewModel) - viewModelOf(::FolderPickerViewModel) - viewModelOf(::SettingsRootViewModel) - viewModelOf(::GeneralViewModel) - viewModelOf(::EditorSettingsViewModel) - viewModelOf(::AiAgentViewModel) - viewModelOf(::BuildRunViewModel) - viewModel { params -> - EditorViewModel( - projectId = params.get(), - projectRepository = get(), - fileTreeRepository = get(), - fileContentRepository = get(), - preferencesRepository = get(), - gradleProjectReader = get(), - buildRunCoordinator = get(), - networkMonitor = get(), - ) - } -} -val appModules = listOf(dataModule, viewModelModule, gradleModule) +val appModules = listOf(dataModule, gradleModule) -val allModules = appModules + localDataModule + templatesModule + preferencesModule + - terminalModule + gitModule + remoteModule + buildRunModule + aiModule +val allModules = appModules + featureModules + localDataModule + templatesModule + + preferencesModule + terminalModule + gitModule + remoteModule + buildRunModule + aiModule diff --git a/feature/editor/src/main/java/com/ahmadkharfan/androidstudiolite/feature/editor/di/EditorModule.kt b/feature/editor/src/main/java/com/ahmadkharfan/androidstudiolite/feature/editor/di/EditorModule.kt new file mode 100644 index 00000000..121c7ffc --- /dev/null +++ b/feature/editor/src/main/java/com/ahmadkharfan/androidstudiolite/feature/editor/di/EditorModule.kt @@ -0,0 +1,22 @@ +package com.ahmadkharfan.androidstudiolite.feature.editor.di + +import com.ahmadkharfan.androidstudiolite.feature.editor.EditorViewModel +import com.ahmadkharfan.androidstudiolite.feature.editor.aichat.AiChatViewModel +import org.koin.core.module.dsl.viewModel +import org.koin.dsl.module + +val editorModule = module { + viewModel { params -> AiChatViewModel(get(), get(), get(), projectId = params.get()) } + viewModel { params -> + EditorViewModel( + projectId = params.get(), + projectRepository = get(), + fileTreeRepository = get(), + fileContentRepository = get(), + preferencesRepository = get(), + gradleProjectReader = get(), + buildRunCoordinator = get(), + networkMonitor = get(), + ) + } +} diff --git a/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/feature/onboarding/di/OnboardingModule.kt b/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/feature/onboarding/di/OnboardingModule.kt new file mode 100644 index 00000000..ace632c8 --- /dev/null +++ b/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/feature/onboarding/di/OnboardingModule.kt @@ -0,0 +1,16 @@ +package com.ahmadkharfan.androidstudiolite.feature.onboarding.di + +import com.ahmadkharfan.androidstudiolite.domain.repository.OnboardingRepository +import com.ahmadkharfan.androidstudiolite.feature.onboarding.complete.CompleteViewModel +import com.ahmadkharfan.androidstudiolite.feature.onboarding.data.AndroidOnboardingRepository +import com.ahmadkharfan.androidstudiolite.feature.onboarding.permissions.PermissionsViewModel +import org.koin.android.ext.koin.androidContext +import org.koin.core.module.dsl.viewModelOf +import org.koin.dsl.module + +/** Everything :feature:onboarding contributes to the graph, declared by the feature that owns it. */ +val onboardingModule = module { + single { AndroidOnboardingRepository(androidContext()) } + viewModelOf(::PermissionsViewModel) + viewModelOf(::CompleteViewModel) +} diff --git a/feature/projects/src/main/java/com/ahmadkharfan/androidstudiolite/feature/projects/di/ProjectsModule.kt b/feature/projects/src/main/java/com/ahmadkharfan/androidstudiolite/feature/projects/di/ProjectsModule.kt new file mode 100644 index 00000000..69f454f5 --- /dev/null +++ b/feature/projects/src/main/java/com/ahmadkharfan/androidstudiolite/feature/projects/di/ProjectsModule.kt @@ -0,0 +1,24 @@ +package com.ahmadkharfan.androidstudiolite.feature.projects.di + +import com.ahmadkharfan.androidstudiolite.core.environment.IdeEnvironmentPaths +import com.ahmadkharfan.androidstudiolite.feature.projects.createproject.CreateProjectViewModel +import com.ahmadkharfan.androidstudiolite.feature.projects.folderpicker.FolderPickerViewModel +import com.ahmadkharfan.androidstudiolite.feature.projects.hub.HubViewModel +import com.ahmadkharfan.androidstudiolite.feature.projects.openproject.OpenProjectViewModel +import org.koin.android.ext.koin.androidContext +import org.koin.core.module.dsl.viewModel +import org.koin.core.module.dsl.viewModelOf +import org.koin.dsl.module + +val projectsModule = module { + viewModelOf(::HubViewModel) + viewModelOf(::OpenProjectViewModel) + viewModelOf(::FolderPickerViewModel) + viewModel { + CreateProjectViewModel( + templateRepository = get(), + projectRepository = get(), + defaultLocation = IdeEnvironmentPaths.projectsDir(androidContext()).absolutePath, + ) + } +} diff --git a/feature/settings/src/main/java/com/ahmadkharfan/androidstudiolite/feature/settings/di/SettingsModule.kt b/feature/settings/src/main/java/com/ahmadkharfan/androidstudiolite/feature/settings/di/SettingsModule.kt new file mode 100644 index 00000000..7977ae67 --- /dev/null +++ b/feature/settings/src/main/java/com/ahmadkharfan/androidstudiolite/feature/settings/di/SettingsModule.kt @@ -0,0 +1,17 @@ +package com.ahmadkharfan.androidstudiolite.feature.settings.di + +import com.ahmadkharfan.androidstudiolite.feature.settings.aiagent.AiAgentViewModel +import com.ahmadkharfan.androidstudiolite.feature.settings.buildrun.BuildRunViewModel +import com.ahmadkharfan.androidstudiolite.feature.settings.editor.EditorSettingsViewModel +import com.ahmadkharfan.androidstudiolite.feature.settings.general.GeneralViewModel +import com.ahmadkharfan.androidstudiolite.feature.settings.root.SettingsRootViewModel +import org.koin.core.module.dsl.viewModelOf +import org.koin.dsl.module + +val settingsModule = module { + viewModelOf(::SettingsRootViewModel) + viewModelOf(::GeneralViewModel) + viewModelOf(::EditorSettingsViewModel) + viewModelOf(::AiAgentViewModel) + viewModelOf(::BuildRunViewModel) +} diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/di/TerminalFeatureModule.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/di/TerminalFeatureModule.kt new file mode 100644 index 00000000..f94102b8 --- /dev/null +++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/di/TerminalFeatureModule.kt @@ -0,0 +1,9 @@ +package com.ahmadkharfan.androidstudiolite.feature.terminal.di + +import com.ahmadkharfan.androidstudiolite.feature.terminal.TerminalViewModel +import org.koin.core.module.dsl.viewModelOf +import org.koin.dsl.module + +val terminalFeatureModule = module { + viewModelOf(::TerminalViewModel) +}