src: add hilt and update hilt modules

Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
This commit is contained in:
Aditya Wasan 2021-01-31 17:51:21 +05:30
parent 9c4c0b1e56
commit 9e943c82b9
No known key found for this signature in database
GPG key ID: 6D6DF3BF15DE79B5
5 changed files with 36 additions and 10 deletions

View file

@ -1,19 +1,31 @@
package dev.msfjarvis.lobsters.injection package dev.msfjarvis.lobsters.injection
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi import com.squareup.moshi.Moshi
import com.squareup.moshi.adapter
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.Reusable
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import dev.msfjarvis.lobsters.model.Submitter
import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory
@Module @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
object MoshiModule { object MoshiModule {
@Provides @Provides
@Reusable
fun provideMoshi(): Moshi { fun provideMoshi(): Moshi {
return Moshi.Builder() return Moshi.Builder()
.add(MetadataKotlinJsonAdapterFactory()) .add(MetadataKotlinJsonAdapterFactory())
.build() .build()
} }
@OptIn(ExperimentalStdlibApi::class)
@Provides
@Reusable
fun provideSubmitterJsonAdapter(moshi: Moshi): JsonAdapter<Submitter> {
return moshi.adapter()
}
} }

View file

@ -44,7 +44,6 @@ dependencies {
implementation(Dependencies.Kotlin.Coroutines.android) implementation(Dependencies.Kotlin.Coroutines.android)
implementation(Dependencies.ThirdParty.accompanist) implementation(Dependencies.ThirdParty.accompanist)
implementation(Dependencies.ThirdParty.Moshi.lib) implementation(Dependencies.ThirdParty.Moshi.lib)
implementation(Dependencies.ThirdParty.SQLDelight.androidDriver)
testImplementation(Dependencies.Testing.junit) testImplementation(Dependencies.Testing.junit)
androidTestImplementation(Dependencies.Testing.daggerHilt) androidTestImplementation(Dependencies.Testing.daggerHilt)
androidTestImplementation(Dependencies.Testing.uiTest) androidTestImplementation(Dependencies.Testing.uiTest)

View file

@ -1,13 +1,17 @@
plugins { plugins {
id("com.android.library") id("com.android.library")
kotlin("android") kotlin("android")
kotlin("kapt")
id("com.squareup.sqldelight") id("com.squareup.sqldelight")
`lobsters-plugin` `lobsters-plugin`
} }
dependencies { dependencies {
kapt(Dependencies.AndroidX.Hilt.daggerCompiler)
implementation(Dependencies.AndroidX.Hilt.dagger)
implementation(Dependencies.ThirdParty.Moshi.lib) implementation(Dependencies.ThirdParty.Moshi.lib)
implementation(Dependencies.ThirdParty.Moshi.moshiMetadataReflect) implementation(Dependencies.ThirdParty.Moshi.moshiMetadataReflect)
implementation(Dependencies.ThirdParty.SQLDelight.androidDriver)
testImplementation(Dependencies.Kotlin.Coroutines.core) testImplementation(Dependencies.Kotlin.Coroutines.core)
testImplementation(Dependencies.ThirdParty.SQLDelight.jvmDriver) testImplementation(Dependencies.ThirdParty.SQLDelight.jvmDriver)
testImplementation(Dependencies.Testing.junit) testImplementation(Dependencies.Testing.junit)

View file

@ -5,6 +5,7 @@ import com.squareup.sqldelight.android.AndroidSqliteDriver
import com.squareup.sqldelight.db.SqlDriver import com.squareup.sqldelight.db.SqlDriver
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.Reusable
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
@ -18,6 +19,12 @@ import javax.inject.Singleton
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
object DatabaseModule { object DatabaseModule {
@Provides
@Reusable
fun providesTagsAdapter(): TagsAdapter {
return TagsAdapter()
}
@Provides @Provides
@Singleton @Singleton
fun providesSqlDriver(@ApplicationContext context: Context): SqlDriver { fun providesSqlDriver(@ApplicationContext context: Context): SqlDriver {
@ -26,7 +33,14 @@ object DatabaseModule {
@Provides @Provides
@Singleton @Singleton
fun providesLobstersDatabase(sqlDriver: SqlDriver): LobstersDatabase { fun providesLobstersDatabase(
return LobstersDatabase(sqlDriver, LobstersPost.Adapter(SubmitterAdapter(), TagsAdapter())) sqlDriver: SqlDriver,
submitterAdapter: SubmitterAdapter,
tagsAdapter: TagsAdapter
): LobstersDatabase {
return LobstersDatabase(
sqlDriver,
LobstersPost.Adapter(submitterAdapter, tagsAdapter)
)
} }
} }

View file

@ -1,14 +1,11 @@
package dev.msfjarvis.lobsters.model package dev.msfjarvis.lobsters.model
import com.squareup.moshi.Moshi import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.adapter
import com.squareup.sqldelight.ColumnAdapter import com.squareup.sqldelight.ColumnAdapter
import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory import javax.inject.Inject
@OptIn(ExperimentalStdlibApi::class) class SubmitterAdapter @Inject constructor(private val submitterJsonAdapter: JsonAdapter<Submitter>) :
class SubmitterAdapter : ColumnAdapter<Submitter, String> { ColumnAdapter<Submitter, String> {
private val moshi = Moshi.Builder().add(MetadataKotlinJsonAdapterFactory()).build()
private val submitterJsonAdapter = moshi.adapter<Submitter>()
override fun decode(databaseValue: String): Submitter { override fun decode(databaseValue: String): Submitter {
return submitterJsonAdapter.fromJson(databaseValue)!! return submitterJsonAdapter.fromJson(databaseValue)!!