diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 8e2e799..2fd70a9 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -14,6 +14,10 @@ android { versionCode = providers.gradleProperty("kvitt.versionCode").orElse("1").get().toInt() versionName = providers.gradleProperty("kvitt.versionName").orElse("dev").get() } + // BuildConfig carries versionCode, versionName and DEBUG into AppBuildInfo (:data, D-041). + buildFeatures { + buildConfig = true + } buildTypes { debug { applicationIdSuffix = ".debug" diff --git a/android/app/src/main/kotlin/se/hagstedt/kvitt/di/AppBuildInfoModule.kt b/android/app/src/main/kotlin/se/hagstedt/kvitt/di/AppBuildInfoModule.kt new file mode 100644 index 0000000..ba4b12e --- /dev/null +++ b/android/app/src/main/kotlin/se/hagstedt/kvitt/di/AppBuildInfoModule.kt @@ -0,0 +1,24 @@ +package se.hagstedt.kvitt.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import se.hagstedt.kvitt.BuildConfig +import se.hagstedt.kvitt.data.di.AppBuildInfo +import javax.inject.Singleton + +/** + * Both variants: the app's version (ยง10.6) and build type for `:data`'s `DataModule`, which Hilt installs in debug and + * release alike (it binds no `:core:model` interface, D-041). + */ +@Module +@InstallIn(SingletonComponent::class) +object AppBuildInfoModule { + @Provides @Singleton + fun buildInfo(): AppBuildInfo = AppBuildInfo( + versionCode = BuildConfig.VERSION_CODE, + versionName = BuildConfig.VERSION_NAME, + debug = BuildConfig.DEBUG, + ) +} diff --git a/android/app/src/release/kotlin/se/hagstedt/kvitt/release/ReleaseDataModule.kt b/android/app/src/release/kotlin/se/hagstedt/kvitt/release/ReleaseDataModule.kt new file mode 100644 index 0000000..6f69aab --- /dev/null +++ b/android/app/src/release/kotlin/se/hagstedt/kvitt/release/ReleaseDataModule.kt @@ -0,0 +1,14 @@ +package se.hagstedt.kvitt.release + +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import se.hagstedt.kvitt.data.di.DataBindingsModule + +/** + * Release builds only (src/release): binds every `:core:model` repository interface to its `:data` implementation by + * including [DataBindingsModule] (`@DisableInstallInCheck`, D-041). Debug binds the fakes instead (`DebugFakesModule`). + */ +@Module(includes = [DataBindingsModule::class]) +@InstallIn(SingletonComponent::class) +interface ReleaseDataModule