diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3490db4d30..99f4780bb5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -85,6 +85,9 @@ dependencies { implementation(libs.androidx.core) implementation(libs.androidx.activity.compose) + + implementation(platform(libs.koin.bom)) + implementation(libs.koin.android) } val downloadGeoFiles by diff --git a/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt b/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt new file mode 100644 index 0000000000..e20c72a426 --- /dev/null +++ b/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt @@ -0,0 +1,11 @@ +package com.github.kr328.clash + +import android.app.Activity +import com.github.kr328.clash.util.MainActivityClassProvider +import org.koin.dsl.module + +val appModule = module { single { MainActivityClassProviderImpl } } + +private object MainActivityClassProviderImpl : MainActivityClassProvider { + override val mainActivityClass: Class = MainActivity::class.java +} diff --git a/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt b/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt index dcb99834df..c4af0958f7 100644 --- a/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt +++ b/app/src/main/kotlin/com/github/kr328/clash/MainApplication.kt @@ -15,6 +15,9 @@ import com.github.kr328.clash.service.util.sendServiceRecreated import com.github.kr328.clash.store.UiStore import com.github.kr328.clash.util.clashDir import java.io.File +import org.koin.android.ext.koin.androidContext +import org.koin.android.ext.koin.androidLogger +import org.koin.core.context.startKoin class MainApplication : Application() { private val uiStore by lazy(LazyThreadSafetyMode.NONE) { UiStore(this) } @@ -34,6 +37,7 @@ class MainApplication : Application() { Log.d("Process $processName started") if (processName == packageName) { + koin() Remote.launch() setupShortcuts() } else { @@ -41,6 +45,14 @@ class MainApplication : Application() { } } + private fun koin() { + startKoin { + androidLogger() + androidContext(this@MainApplication) + modules(appModule) + } + } + private fun setupShortcuts() { if (uiStore.hideAppIcon) { // Prevent launcher activity not found. diff --git a/glue/build.gradle.kts b/glue/build.gradle.kts index 1c059c7667..37d387815b 100644 --- a/glue/build.gradle.kts +++ b/glue/build.gradle.kts @@ -7,4 +7,7 @@ dependencies { implementation(libs.kotlin.coroutine) implementation(libs.androidx.core) + + implementation(platform(libs.koin.bom)) + implementation(libs.koin.core) } diff --git a/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt index e1e722c1f3..c73c361a56 100644 --- a/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt +++ b/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt @@ -1,7 +1,15 @@ package com.github.kr328.clash.util +import android.app.Activity import android.content.Context import android.content.Intent +import org.koin.mp.KoinPlatform -fun mainIntent(context: Context, action: String? = null) = - Intent(context, Class.forName("com.github.kr328.clash.MainActivity")).setAction(action) +interface MainActivityClassProvider { + val mainActivityClass: Class +} + +fun mainIntent(context: Context, action: String? = null): Intent { + val mainActivityClass = KoinPlatform.getKoin().get().mainActivityClass + return Intent(context, mainActivityClass).setAction(action) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4579761720..ae6872f2aa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,6 +38,10 @@ okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" okhttp-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" } bytesize = "me.saket.bytesize:bytesize:2.2.1" +koin-bom = "io.insert-koin:koin-bom:4.2.1" +koin-core = { module = "io.insert-koin:koin-core" } +koin-android = { module = "io.insert-koin:koin-android" } + composePreference = "me.zhanghai.compose.preference:preference:2.2.0" # Dummy to get renovate updates, the version is used in rootProject build.gradle with spotless.