diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3e1323e..05d8449 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.detekt) alias(libs.plugins.google.secrets.gradle.plugin) alias(libs.plugins.automattic.measure.builds) + alias(libs.plugins.allopen) id("io.kotzilla.kotzilla-plugin") } apply("$rootDir/gradle/report.gradle") @@ -114,6 +115,10 @@ ksp { arg("KOIN_CONFIG_CHECK", "true") } +allOpen { + annotation("org.koin.core.annotation.Monitor") +} + dependencies { implementation(project(":core")) implementation(libs.kotlin.stdlib) @@ -148,7 +153,8 @@ dependencies { implementation(libs.koin.android) implementation(libs.koin.androidx.compose) implementation(libs.koin.androidx.startup) - implementation("io.kotzilla:kotzilla-sdk:1.2.1") + implementation("io.kotzilla:kotzilla-sdk:1.2.3") + //implementation("io.kotzilla:kotzilla-sdk-compose:1.2.3") compileOnly(libs.koin.annotations.core) ksp(libs.koin.annotations.compiler) diff --git a/app/src/main/java/com/santimattius/template/MainApplication.kt b/app/src/main/java/com/santimattius/template/MainApplication.kt index d9bce5e..e247c95 100644 --- a/app/src/main/java/com/santimattius/template/MainApplication.kt +++ b/app/src/main/java/com/santimattius/template/MainApplication.kt @@ -2,30 +2,39 @@ package com.santimattius.template import android.app.Application import android.util.Log +import com.santimattius.core.CoreModule +import com.santimattius.template.di.AppModule +import com.santimattius.template.di.DataModule import io.kotzilla.sdk.analytics.koin.analytics import org.koin.android.ext.koin.androidContext import org.koin.androix.startup.KoinStartup +import org.koin.core.annotation.KoinApplication import org.koin.core.annotation.KoinExperimentalAPI import org.koin.dsl.KoinConfiguration -import org.koin.ksp.generated.com_santimattius_core_CoreModule -import org.koin.ksp.generated.com_santimattius_template_di_AppModule -import org.koin.ksp.generated.com_santimattius_template_di_DataModule -import org.koin.ksp.generated.defaultModule +import org.koin.dsl.module +import org.koin.ksp.generated.defineComSantimattiusTemplateUiComposeHomeComposeViewModel +import org.koin.ksp.generated.defineComSantimattiusTemplateUiXmlHomeHomeViewModel +import org.koin.ksp.generated.koinConfiguration + +@KoinApplication( + configurations = ["default"], + modules = [CoreModule::class, DataModule::class, AppModule::class] +) +object MainKoinApplication @OptIn(KoinExperimentalAPI::class) class MainApplication : Application(), KoinStartup { override fun onKoinStartup(): KoinConfiguration { Log.d(this::class.simpleName, "onKoinStartup: ${Thread.currentThread().name}") - return KoinConfiguration { + val configuration = MainKoinApplication.koinConfiguration { androidContext(this@MainApplication) analytics() - modules( - com_santimattius_core_CoreModule, - com_santimattius_template_di_DataModule, - com_santimattius_template_di_AppModule, - defaultModule - ) + modules(modules = module { + defineComSantimattiusTemplateUiComposeHomeComposeViewModel() + defineComSantimattiusTemplateUiXmlHomeHomeViewModel() + }) } + return KoinConfiguration(configuration) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/santimattius/template/di/AppModule.kt b/app/src/main/java/com/santimattius/template/di/AppModule.kt index 2f6020b..1553dc3 100644 --- a/app/src/main/java/com/santimattius/template/di/AppModule.kt +++ b/app/src/main/java/com/santimattius/template/di/AppModule.kt @@ -1,12 +1,14 @@ package com.santimattius.template.di import com.santimattius.template.BuildConfig +import org.koin.core.annotation.Configuration import org.koin.core.annotation.Module import org.koin.core.annotation.Named import org.koin.core.annotation.Single @Module +@Configuration class AppModule { @Single(createdAtStart = true) diff --git a/app/src/main/java/com/santimattius/template/di/DataModule.kt b/app/src/main/java/com/santimattius/template/di/DataModule.kt index 1b532e8..b5e60b5 100644 --- a/app/src/main/java/com/santimattius/template/di/DataModule.kt +++ b/app/src/main/java/com/santimattius/template/di/DataModule.kt @@ -8,10 +8,12 @@ import com.santimattius.core.data.datasources.implementation.RetrofitMovieNetwor import com.santimattius.core.data.datasources.implementation.RoomMovieLocalDataSource import com.santimattius.core.data.repositories.TMDbRepository import com.santimattius.core.domain.repositories.MovieRepository +import org.koin.core.annotation.Configuration import org.koin.core.annotation.Module import org.koin.core.annotation.Single @Module +@Configuration class DataModule { @Single diff --git a/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeActivity.kt b/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeActivity.kt index b35d840..72f6e4f 100644 --- a/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeActivity.kt +++ b/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeActivity.kt @@ -56,18 +56,19 @@ class HomeComposeActivity : ComponentActivity() { setContent { // This shouldn't be needed, but allows robolectric tests to run successfully // TODO remove once a solution is found or a fix in koin? - CompositionLocalProvider( - LocalKoinScope provides KoinPlatformTools.defaultContext() - .get().scopeRegistry.rootScope, - LocalKoinApplication provides KoinPlatformTools.defaultContext().get() - ) { - AndroidTestingTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background - ) { - HomeRoute(viewModel) - } +// CompositionLocalProvider( +// LocalKoinScope provides KoinPlatformTools.defaultContext() +// .get().scopeRegistry.rootScope, +// LocalKoinApplication provides KoinPlatformTools.defaultContext().get() +// ) { +// +// } + AndroidTestingTheme { + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { + HomeRoute(viewModel) } } } diff --git a/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeViewModel.kt b/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeViewModel.kt index 0ddc0a9..7970f6b 100644 --- a/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeViewModel.kt +++ b/app/src/main/java/com/santimattius/template/ui/compose/HomeComposeViewModel.kt @@ -17,8 +17,12 @@ import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import org.koin.android.annotation.KoinViewModel +import org.koin.core.annotation.Configuration +import org.koin.core.annotation.Monitor @KoinViewModel +@Monitor +@Configuration class HomeComposeViewModel( private val movieRepository: MovieRepository, ) : ViewModel() { diff --git a/build.gradle.kts b/build.gradle.kts index de5ab2b..033a144 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,12 +8,13 @@ plugins { alias(libs.plugins.detekt) apply false alias(libs.plugins.google.secrets.gradle.plugin) apply false alias(libs.plugins.automattic.measure.builds) apply false + alias(libs.plugins.allopen) apply false alias(libs.plugins.room) apply false } buildscript { dependencies { classpath(libs.dep.google.secrets.gradle.plugin) - classpath("io.kotzilla:kotzilla-plugin:1.2.1") + classpath("io.kotzilla:kotzilla-plugin:1.2.3") } } \ No newline at end of file diff --git a/core/src/main/java/com/santimattius/core/CoreModule.kt b/core/src/main/java/com/santimattius/core/CoreModule.kt index 14c81e0..f3b84c4 100644 --- a/core/src/main/java/com/santimattius/core/CoreModule.kt +++ b/core/src/main/java/com/santimattius/core/CoreModule.kt @@ -5,6 +5,7 @@ import com.santimattius.core.data.client.database.TheMovieDataBase import com.santimattius.core.data.client.network.RequestInterceptor import com.santimattius.core.data.client.network.TheMovieDBService import okhttp3.OkHttpClient +import org.koin.core.annotation.Configuration import org.koin.core.annotation.Module import org.koin.core.annotation.Named import org.koin.core.annotation.Single @@ -12,6 +13,7 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory @Module +@Configuration class CoreModule { @Single(createdAtStart = true) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8adc0f3..9006a85 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] # Plugins -androidGradlePlugin = "8.12.2" +androidGradlePlugin = "8.13.0" hamcrest = "3.0" -kotlin = "2.2.10" +kotlin = "2.2.20" detektGradlePlugin = "1.23.8" -ksp = "2.2.10-2.0.2" +ksp = "2.2.20-2.0.2" googleSecretsPlugin = "2.0.1" automatticMeasureBuilds = "3.2.1" @@ -15,23 +15,23 @@ appCompat = "1.7.1" fragmentKtx = "1.8.9" constraintLayout = "2.2.1" recyclerView = "1.4.0" -materialVersion = "1.12.0" -lifecycle = "2.9.3" +materialVersion = "1.13.0" +lifecycle = "2.9.4" retrofit = "3.0.0" -okHttp = "5.1.0" +okHttp = "5.2.0" coroutine = "1.10.2" -gson = "2.13.1" -glide = "5.0.0-rc01" +gson = "2.13.2" +glide = "5.0.5" coil = "2.7.0" -room = "2.7.2" +room = "2.8.1" -androidxComposeBom = "2025.08.01" -activityCompose = "1.10.1" +androidxComposeBom = "2025.09.01" +activityCompose = "1.11.0" -koinBom = "4.1.0" -koinAnnotations = "2.1.0" +koinBom = "4.1.1" +koinAnnotations = "2.2.0" #Testing junit = "4.13.2" @@ -44,10 +44,10 @@ fragmentTesting = "1.8.9" espressoCore = "3.7.0" okhttp3IdlingResource = "1.0.0" -mockk = "1.14.5" +mockk = "1.14.6" robolectric = "4.16" turbine = "1.2.1" -mockitoKotlin = "6.0.0" +mockitoKotlin = "6.1.0" [libraries] # Define the libraries @@ -153,6 +153,7 @@ kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } room = { id = "androidx.room", version.ref = "room"} ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +allopen = { id = "org.jetbrains.kotlin.plugin.allopen", version.ref = "kotlin" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektGradlePlugin" } google-secrets-gradle-plugin = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "googleSecretsPlugin" } automattic-measure-builds = { id = "com.automattic.android.measure-builds", version.ref = "automatticMeasureBuilds" }