mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 03:17:03 +05:30
all: move all Hilt processing to app module
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
cff16d17b5
commit
027e3410d8
9 changed files with 29 additions and 18 deletions
|
@ -0,0 +1,52 @@
|
|||
package dev.msfjarvis.lobsters.injection
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import dagger.Lazy
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dev.msfjarvis.lobsters.data.api.LobstersApi
|
||||
import okhttp3.OkHttpClient
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.moshi.MoshiConverterFactory
|
||||
import retrofit2.create
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object ApiModule {
|
||||
|
||||
@Provides
|
||||
@BaseUrlQualifier
|
||||
fun provideBaseUrl(): String {
|
||||
return LobstersApi.BASE_URL
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideClient(): OkHttpClient {
|
||||
return OkHttpClient.Builder()
|
||||
.build()
|
||||
}
|
||||
|
||||
/**
|
||||
* Using [Lazy] here is a trick I picked up from Zac Sweers, which he explained in more
|
||||
* detail here: https://www.zacsweers.dev/dagger-party-tricks-deferred-okhttp-init/
|
||||
*/
|
||||
@Provides
|
||||
fun provideRetrofit(
|
||||
client: Lazy<OkHttpClient>,
|
||||
moshi: Lazy<Moshi>,
|
||||
@BaseUrlQualifier baseUrl: String
|
||||
): Retrofit {
|
||||
return Retrofit.Builder()
|
||||
.client(client.get())
|
||||
.baseUrl(baseUrl)
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi.get()))
|
||||
.build()
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideApi(retrofit: Retrofit): LobstersApi {
|
||||
return retrofit.create()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package dev.msfjarvis.lobsters.injection
|
||||
|
||||
import javax.inject.Qualifier
|
||||
|
||||
/**
|
||||
* Qualifier for a string value that needs to be provided to the [ApiModule.provideRetrofit] method
|
||||
* as the base URL of our API.
|
||||
*/
|
||||
@Qualifier
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class BaseUrlQualifier
|
|
@ -0,0 +1,54 @@
|
|||
package dev.msfjarvis.lobsters.injection
|
||||
|
||||
import android.content.Context
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
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.Submitter
|
||||
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 providesSubmitterAdapter(jsonAdapter: JsonAdapter<Submitter>): SubmitterAdapter {
|
||||
return SubmitterAdapter(jsonAdapter)
|
||||
}
|
||||
|
||||
@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)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +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<Submitter> {
|
||||
return moshi.adapter()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue