Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<OnboardingRepository> { 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
Original file line number Diff line number Diff line change
@@ -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(),
)
}
}
Original file line number Diff line number Diff line change
@@ -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<OnboardingRepository> { AndroidOnboardingRepository(androidContext()) }
viewModelOf(::PermissionsViewModel)
viewModelOf(::CompleteViewModel)
}
Original file line number Diff line number Diff line change
@@ -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,
)
}
}
Original file line number Diff line number Diff line change
@@ -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)
}
Original file line number Diff line number Diff line change
@@ -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)
}
Loading