android: add Hilt module for LobstersApi

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-06-07 11:13:43 +05:30
parent 294052e309
commit 8f4d270c87
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
5 changed files with 81 additions and 0 deletions

View file

@ -2,15 +2,20 @@ plugins {
id("org.jetbrains.compose") version "0.4.0"
id("com.android.application")
kotlin("android")
kotlin("kapt")
id("dagger.hilt.android.plugin")
}
dependencies {
kapt(libs.dagger.hilt.compiler)
implementation(projects.api)
implementation(projects.common)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.paging.compose)
implementation(libs.dagger.hilt.android)
implementation(libs.retrofit.moshiConverter)
implementation(libs.moshix.metadatareflect)
}
android {

View file

@ -0,0 +1,51 @@
package dev.msfjarvis.claw.android.injection
import android.util.Log
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.claw.api.LobstersApi
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
fun provideClient(): OkHttpClient {
return OkHttpClient.Builder()
.addNetworkInterceptor { chain ->
val request = chain.request()
Log.d("LobstersApi", "${request.method()}: ${request.url()}")
chain.proceed(request)
}
.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>,
): Retrofit {
return Retrofit.Builder()
.client(client.get())
.baseUrl("https://lobste.rs/")
.addConverterFactory(MoshiConverterFactory.create(moshi.get()))
.build()
}
@Provides
fun provideApi(retrofit: Retrofit): LobstersApi {
return retrofit.create()
}
}

View file

@ -0,0 +1,19 @@
package dev.msfjarvis.claw.android.injection
import com.squareup.moshi.Moshi
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory
@Module
@InstallIn(SingletonComponent::class)
object MoshiModule {
@Provides
@Reusable
fun provideMoshi(): Moshi {
return Moshi.Builder().add(MetadataKotlinJsonAdapterFactory()).build()
}
}