refactor(android): merge all OkHttp bindings into a single class

This commit is contained in:
Harsh Shandilya 2022-09-06 18:21:33 +05:30
parent ffce663f6f
commit cffb2bdbb2
No known key found for this signature in database
2 changed files with 41 additions and 50 deletions

View file

@ -1,20 +0,0 @@
package dev.msfjarvis.claw.android.injection
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dagger.multibindings.IntoSet
import dev.msfjarvis.claw.android.network.NapierLogger
import dev.msfjarvis.claw.android.network.UserAgentInterceptor
import okhttp3.Interceptor
import okhttp3.logging.HttpLoggingInterceptor
@Module
@InstallIn(SingletonComponent::class)
interface InterceptorModule {
@Binds fun NapierLogger.bindLogger(): HttpLoggingInterceptor.Logger
@Binds @IntoSet fun UserAgentInterceptor.bindUAInterceptor(): Interceptor
}

View file

@ -2,6 +2,7 @@ package dev.msfjarvis.claw.android.injection
import android.content.Context import android.content.Context
import android.net.TrafficStats import android.net.TrafficStats
import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
@ -9,6 +10,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import dagger.multibindings.IntoSet import dagger.multibindings.IntoSet
import dev.msfjarvis.claw.android.network.DelegatingSocketFactory import dev.msfjarvis.claw.android.network.DelegatingSocketFactory
import dev.msfjarvis.claw.android.network.NapierLogger
import dev.msfjarvis.claw.android.network.UserAgentInterceptor
import java.net.Socket import java.net.Socket
import javax.net.SocketFactory import javax.net.SocketFactory
import okhttp3.Cache import okhttp3.Cache
@ -18,40 +21,48 @@ import okhttp3.logging.HttpLoggingInterceptor
@Module @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
object OkHttpModule { abstract class OkHttpModule {
@Provides
fun provideCache(@ApplicationContext context: Context): Cache {
return Cache(context.cacheDir, 10 * 1024 * 1024)
}
@Provides @Binds abstract fun NapierLogger.bindLogger(): HttpLoggingInterceptor.Logger
fun provideSocketFactory(): SocketFactory {
return object : DelegatingSocketFactory(getDefault()) { @Binds @IntoSet abstract fun UserAgentInterceptor.bindUAInterceptor(): Interceptor
override fun configureSocket(socket: Socket): Socket {
TrafficStats.setThreadStatsTag(0x000090000) companion object {
return super.configureSocket(socket)
} @Provides
fun provideCache(@ApplicationContext context: Context): Cache {
return Cache(context.cacheDir, 10 * 1024 * 1024)
} }
}
@Provides @Provides
fun provideClient( fun provideSocketFactory(): SocketFactory {
cache: Cache, return object : DelegatingSocketFactory(getDefault()) {
socketFactory: SocketFactory, override fun configureSocket(socket: Socket): Socket {
interceptors: Set<@JvmSuppressWildcards Interceptor>, TrafficStats.setThreadStatsTag(0x000090000)
): OkHttpClient { return super.configureSocket(socket)
return OkHttpClient.Builder() }
.apply {
cache(cache)
interceptors.forEach(::addNetworkInterceptor)
socketFactory(socketFactory)
} }
.build() }
}
@Provides
fun provideClient(
cache: Cache,
socketFactory: SocketFactory,
interceptors: Set<@JvmSuppressWildcards Interceptor>,
): OkHttpClient {
return OkHttpClient.Builder()
.apply {
cache(cache)
interceptors.forEach(::addNetworkInterceptor)
socketFactory(socketFactory)
}
.build()
}
@Provides @Provides
@IntoSet @IntoSet
fun provideHttpLoggingInterceptor(logger: HttpLoggingInterceptor.Logger): Interceptor { fun provideHttpLoggingInterceptor(logger: HttpLoggingInterceptor.Logger): Interceptor {
return HttpLoggingInterceptor(logger).setLevel(HttpLoggingInterceptor.Level.HEADERS) return HttpLoggingInterceptor(logger).setLevel(HttpLoggingInterceptor.Level.HEADERS)
}
} }
} }