mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 22:37:03 +05:30
src: add hilt and update hilt modules
Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
This commit is contained in:
parent
9c4c0b1e56
commit
9e943c82b9
5 changed files with 36 additions and 10 deletions
|
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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)!!
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue