From 9e943c82b9678aed19a3fa732fc1368229e2a8f4 Mon Sep 17 00:00:00 2001 From: Aditya Wasan Date: Sun, 31 Jan 2021 17:51:21 +0530 Subject: [PATCH] src: add hilt and update hilt modules Signed-off-by: Aditya Wasan --- .../lobsters/injection/MoshiModule.kt | 12 ++++++++++++ app/build.gradle.kts | 1 - database/build.gradle.kts | 4 ++++ .../lobsters/injection/DatabaseModule.kt | 18 ++++++++++++++++-- .../lobsters/model/SubmitterAdapter.kt | 11 ++++------- 5 files changed, 36 insertions(+), 10 deletions(-) rename {app => database}/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt (69%) diff --git a/api/src/main/java/dev/msfjarvis/lobsters/injection/MoshiModule.kt b/api/src/main/java/dev/msfjarvis/lobsters/injection/MoshiModule.kt index eaa644cd..750ab673 100644 --- a/api/src/main/java/dev/msfjarvis/lobsters/injection/MoshiModule.kt +++ b/api/src/main/java/dev/msfjarvis/lobsters/injection/MoshiModule.kt @@ -1,19 +1,31 @@ package dev.msfjarvis.lobsters.injection +import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi +import com.squareup.moshi.adapter import dagger.Module import dagger.Provides +import dagger.Reusable import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import dev.msfjarvis.lobsters.model.Submitter import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory @Module @InstallIn(SingletonComponent::class) object MoshiModule { @Provides + @Reusable fun provideMoshi(): Moshi { return Moshi.Builder() .add(MetadataKotlinJsonAdapterFactory()) .build() } + + @OptIn(ExperimentalStdlibApi::class) + @Provides + @Reusable + fun provideSubmitterJsonAdapter(moshi: Moshi): JsonAdapter { + return moshi.adapter() + } } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2aff4fe8..d165467b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -44,7 +44,6 @@ dependencies { implementation(Dependencies.Kotlin.Coroutines.android) implementation(Dependencies.ThirdParty.accompanist) implementation(Dependencies.ThirdParty.Moshi.lib) - implementation(Dependencies.ThirdParty.SQLDelight.androidDriver) testImplementation(Dependencies.Testing.junit) androidTestImplementation(Dependencies.Testing.daggerHilt) androidTestImplementation(Dependencies.Testing.uiTest) diff --git a/database/build.gradle.kts b/database/build.gradle.kts index e0f941a8..305e3af6 100644 --- a/database/build.gradle.kts +++ b/database/build.gradle.kts @@ -1,13 +1,17 @@ plugins { id("com.android.library") kotlin("android") + kotlin("kapt") id("com.squareup.sqldelight") `lobsters-plugin` } dependencies { + kapt(Dependencies.AndroidX.Hilt.daggerCompiler) + implementation(Dependencies.AndroidX.Hilt.dagger) implementation(Dependencies.ThirdParty.Moshi.lib) implementation(Dependencies.ThirdParty.Moshi.moshiMetadataReflect) + implementation(Dependencies.ThirdParty.SQLDelight.androidDriver) testImplementation(Dependencies.Kotlin.Coroutines.core) testImplementation(Dependencies.ThirdParty.SQLDelight.jvmDriver) testImplementation(Dependencies.Testing.junit) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt b/database/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt similarity index 69% rename from app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt rename to database/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt index 8d87065b..96dee0fe 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt +++ b/database/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt @@ -5,6 +5,7 @@ import com.squareup.sqldelight.android.AndroidSqliteDriver import com.squareup.sqldelight.db.SqlDriver import dagger.Module import dagger.Provides +import dagger.Reusable import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent @@ -18,6 +19,12 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) object DatabaseModule { + @Provides + @Reusable + fun providesTagsAdapter(): TagsAdapter { + return TagsAdapter() + } + @Provides @Singleton fun providesSqlDriver(@ApplicationContext context: Context): SqlDriver { @@ -26,7 +33,14 @@ object DatabaseModule { @Provides @Singleton - fun providesLobstersDatabase(sqlDriver: SqlDriver): LobstersDatabase { - return LobstersDatabase(sqlDriver, LobstersPost.Adapter(SubmitterAdapter(), TagsAdapter())) + fun providesLobstersDatabase( + sqlDriver: SqlDriver, + submitterAdapter: SubmitterAdapter, + tagsAdapter: TagsAdapter + ): LobstersDatabase { + return LobstersDatabase( + sqlDriver, + LobstersPost.Adapter(submitterAdapter, tagsAdapter) + ) } } diff --git a/database/src/main/java/dev/msfjarvis/lobsters/model/SubmitterAdapter.kt b/database/src/main/java/dev/msfjarvis/lobsters/model/SubmitterAdapter.kt index 55ba1f04..29f113cf 100644 --- a/database/src/main/java/dev/msfjarvis/lobsters/model/SubmitterAdapter.kt +++ b/database/src/main/java/dev/msfjarvis/lobsters/model/SubmitterAdapter.kt @@ -1,14 +1,11 @@ package dev.msfjarvis.lobsters.model -import com.squareup.moshi.Moshi -import com.squareup.moshi.adapter +import com.squareup.moshi.JsonAdapter import com.squareup.sqldelight.ColumnAdapter -import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory +import javax.inject.Inject -@OptIn(ExperimentalStdlibApi::class) -class SubmitterAdapter : ColumnAdapter { - private val moshi = Moshi.Builder().add(MetadataKotlinJsonAdapterFactory()).build() - private val submitterJsonAdapter = moshi.adapter() +class SubmitterAdapter @Inject constructor(private val submitterJsonAdapter: JsonAdapter) : + ColumnAdapter { override fun decode(databaseValue: String): Submitter { return submitterJsonAdapter.fromJson(databaseValue)!!