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,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)

View file

@ -0,0 +1,46 @@
package dev.msfjarvis.lobsters.injection
import android.content.Context
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
import dev.msfjarvis.lobsters.data.local.LobstersPost
import dev.msfjarvis.lobsters.database.LobstersDatabase
import dev.msfjarvis.lobsters.model.SubmitterAdapter
import dev.msfjarvis.lobsters.model.TagsAdapter
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object DatabaseModule {
@Provides
@Reusable
fun providesTagsAdapter(): TagsAdapter {
return TagsAdapter()
}
@Provides
@Singleton
fun providesSqlDriver(@ApplicationContext context: Context): SqlDriver {
return AndroidSqliteDriver(LobstersDatabase.Schema, context, "SavedPosts.db")
}
@Provides
@Singleton
fun providesLobstersDatabase(
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
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<Submitter, String> {
private val moshi = Moshi.Builder().add(MetadataKotlinJsonAdapterFactory()).build()
private val submitterJsonAdapter = moshi.adapter<Submitter>()
class SubmitterAdapter @Inject constructor(private val submitterJsonAdapter: JsonAdapter<Submitter>) :
ColumnAdapter<Submitter, String> {
override fun decode(databaseValue: String): Submitter {
return submitterJsonAdapter.fromJson(databaseValue)!!