Skip to content

Produce VMs by koinViewModel - #325

Merged
Goooler merged 15 commits into
trunkfrom
koin-view-models
Jun 8, 2026
Merged

Goooler merged 15 commits into
trunkfrom
koin-view-models

Conversation

@Goooler

@Goooler Goooler commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Refs #233.

@Goooler Goooler changed the title Adjust Koin dependencies Produce VMs by koinViewModel Jun 8, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates UI ViewModel creation from androidx.lifecycle.viewmodel.compose.viewModel() / AndroidViewModel to Koin’s koinViewModel() + ViewModel, and introduces feature-level Koin modules wired from MainApplication, aligning with the Compose Multiplatform direction in #233.

Changes:

  • Replace AndroidViewModel subclasses with plain ViewModel and inject Application via constructor where needed.
  • Switch Compose screens to obtain ViewModels via org.koin.compose.viewmodel.koinViewModel.
  • Add Koin modules per feature (home/profile/settings/proxy/log/crash) and register them in MainApplication; centralize Koin dependencies via common and root Compose dependency wiring.

Reviewed changes

Copilot reviewed 43 out of 44 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/vm/OverrideSettingsViewModel.kt Convert to ViewModel (note: currently injects unused Application).
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/vm/NetworkSettingsViewModel.kt Convert to ViewModel and use injected Application for stores.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/vm/MetaFeatureSettingsViewModel.kt Convert to ViewModel, replace stored context usage with injected Application.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/vm/AppSettingsViewModel.kt Convert to ViewModel and update Application usages.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/vm/AccessControlViewModel.kt Convert to ViewModel, replace context/service calls with injected Application.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/ui/OverrideSettingsScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/ui/NetworkSettingsScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/ui/MetaFeatureSettingsScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/ui/AppSettingsScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/ui/AccessControlScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/settings/src/main/kotlin/com/github/kr328/clash/settings/di/SettingsModule.kt New Koin module registering settings ViewModels.
ui/settings/build.gradle.kts Remove per-module Koin dependencies (now provided via common/root).
ui/proxy/src/main/kotlin/com/github/kr328/clash/proxy/vm/ProxyViewModel.kt Convert to ViewModel and inject Application.
ui/proxy/src/main/kotlin/com/github/kr328/clash/proxy/ui/ProxyScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/proxy/src/main/kotlin/com/github/kr328/clash/proxy/di/ProxyModule.kt New Koin module registering proxy ViewModel.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/vm/ProvidersViewModel.kt Convert to ViewModel and inject Application.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/vm/PropertiesViewModel.kt Convert to ViewModel and inject Application.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/vm/ProfilesViewModel.kt Convert to ViewModel and inject Application.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/vm/NewProfileViewModel.kt Convert to ViewModel and inject Application.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/vm/FilesViewModel.kt Convert to ViewModel and inject Application.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/ui/ProvidersScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/ui/PropertiesScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/ui/ProfilesScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/ui/NewProfileScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/ui/FilesScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/profile/src/main/kotlin/com/github/kr328/clash/profile/di/ProfileModule.kt New Koin module registering profile ViewModels.
ui/log/src/main/kotlin/com/github/kr328/clash/log/vm/LogsViewModel.kt Convert to ViewModel and inject Application.
ui/log/src/main/kotlin/com/github/kr328/clash/log/vm/LogcatViewModel.kt Convert to ViewModel and inject Application.
ui/log/src/main/kotlin/com/github/kr328/clash/log/ui/LogsScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/log/src/main/kotlin/com/github/kr328/clash/log/ui/LogcatScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/log/src/main/kotlin/com/github/kr328/clash/log/di/LogModule.kt New Koin module registering log ViewModels.
ui/home/src/main/kotlin/com/github/kr328/clash/home/vm/HelpViewModel.kt Convert to ViewModel and inject Application.
ui/home/src/main/kotlin/com/github/kr328/clash/home/ui/HelpScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/home/src/main/kotlin/com/github/kr328/clash/home/di/HomeModule.kt Move to .di package and register HelpViewModel in Koin module.
ui/home/build.gradle.kts Remove per-module Koin dependencies (now provided via common/root).
ui/crash/src/main/kotlin/com/github/kr328/clash/crash/vm/AppCrashedViewModel.kt Convert to ViewModel and inject Application.
ui/crash/src/main/kotlin/com/github/kr328/clash/crash/ui/AppCrashedScreen.kt Swap viewModel() for koinViewModel() when obtaining VM.
ui/crash/src/main/kotlin/com/github/kr328/clash/crash/di/CrashModule.kt New Koin module registering crash ViewModel.
service/build.gradle.kts Remove per-module Koin dependencies (now provided via common).
common/build.gradle.kts Promote Koin BOM + core to api so downstream modules inherit versions/APIs.
build.gradle.kts Add koin-compose-viewmodel to all Compose-enabled modules.
app/src/main/kotlin/com/github/kr328/clash/app/MainApplication.kt Register newly added feature Koin modules during startKoin.
app/build.gradle.kts Remove explicit Koin BOM dependency (version now comes transitively).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Goooler
Goooler merged commit 7083bec into trunk Jun 8, 2026
4 checks passed
@Goooler
Goooler deleted the koin-view-models branch June 8, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants