mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 05:57:03 +05:30
refactor(di): migrate OkHttp module to core
This commit is contained in:
parent
b8965902ba
commit
9d41b7e819
5 changed files with 13 additions and 15 deletions
|
@ -1,75 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2022 Harsh Shandilya.
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
package dev.msfjarvis.claw.android.injection
|
||||
|
||||
import android.content.Context
|
||||
import android.net.TrafficStats
|
||||
import com.squareup.anvil.annotations.ContributesTo
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.multibindings.IntoSet
|
||||
import dev.msfjarvis.claw.android.network.DelegatingSocketFactory
|
||||
import dev.msfjarvis.claw.android.network.NapierLogger
|
||||
import dev.msfjarvis.claw.android.network.UserAgentInterceptor
|
||||
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||
import java.net.Socket
|
||||
import javax.net.SocketFactory
|
||||
import okhttp3.Cache
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
|
||||
@Module
|
||||
@ContributesTo(AppScope::class)
|
||||
interface OkHttpModule {
|
||||
|
||||
@Binds fun NapierLogger.bindLogger(): HttpLoggingInterceptor.Logger
|
||||
|
||||
@Binds @IntoSet fun UserAgentInterceptor.bindUAInterceptor(): Interceptor
|
||||
|
||||
companion object {
|
||||
private const val CACHE_SIZE_MB = 10L * 1024 * 1024
|
||||
private const val THREAD_STATS_TAG = 0x000090000
|
||||
|
||||
@Provides
|
||||
fun provideCache(context: Context): Cache {
|
||||
return Cache(context.cacheDir, CACHE_SIZE_MB)
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideSocketFactory(): SocketFactory {
|
||||
return object : DelegatingSocketFactory(getDefault()) {
|
||||
override fun configureSocket(socket: Socket): Socket {
|
||||
TrafficStats.setThreadStatsTag(THREAD_STATS_TAG)
|
||||
return super.configureSocket(socket)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@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
|
||||
@IntoSet
|
||||
fun provideHttpLoggingInterceptor(logger: HttpLoggingInterceptor.Logger): Interceptor {
|
||||
return HttpLoggingInterceptor(logger).setLevel(HttpLoggingInterceptor.Level.HEADERS)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2022 Harsh Shandilya.
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
package dev.msfjarvis.claw.android.network
|
||||
|
||||
import java.net.InetAddress
|
||||
import java.net.Socket
|
||||
import javax.net.SocketFactory
|
||||
|
||||
/**
|
||||
* A [SocketFactory] that delegates calls. Sockets can be configured after creation by overriding
|
||||
* [configureSocket].
|
||||
*/
|
||||
open class DelegatingSocketFactory(private val delegate: SocketFactory) : SocketFactory() {
|
||||
override fun createSocket(): Socket {
|
||||
val socket = delegate.createSocket()
|
||||
return configureSocket(socket)
|
||||
}
|
||||
|
||||
override fun createSocket(host: String, port: Int): Socket {
|
||||
val socket = delegate.createSocket(host, port)
|
||||
return configureSocket(socket)
|
||||
}
|
||||
|
||||
override fun createSocket(
|
||||
host: String,
|
||||
port: Int,
|
||||
localAddress: InetAddress,
|
||||
localPort: Int
|
||||
): Socket {
|
||||
val socket = delegate.createSocket(host, port, localAddress, localPort)
|
||||
return configureSocket(socket)
|
||||
}
|
||||
|
||||
override fun createSocket(host: InetAddress, port: Int): Socket {
|
||||
val socket = delegate.createSocket(host, port)
|
||||
return configureSocket(socket)
|
||||
}
|
||||
|
||||
override fun createSocket(
|
||||
host: InetAddress,
|
||||
port: Int,
|
||||
localAddress: InetAddress,
|
||||
localPort: Int
|
||||
): Socket {
|
||||
val socket = delegate.createSocket(host, port, localAddress, localPort)
|
||||
return configureSocket(socket)
|
||||
}
|
||||
|
||||
open fun configureSocket(socket: Socket): Socket {
|
||||
// No-op by default.
|
||||
return socket
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2022 Harsh Shandilya.
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
package dev.msfjarvis.claw.android.network
|
||||
|
||||
import io.github.aakira.napier.Napier
|
||||
import javax.inject.Inject
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
|
||||
/** Implementation of [HttpLoggingInterceptor.Logger] backed by [Napier]. */
|
||||
class NapierLogger @Inject constructor() : HttpLoggingInterceptor.Logger {
|
||||
override fun log(message: String) {
|
||||
Napier.d(tag = "LobstersApi") { message }
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2022 Harsh Shandilya.
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
package dev.msfjarvis.claw.android.network
|
||||
|
||||
import dev.msfjarvis.claw.android.BuildConfig
|
||||
import javax.inject.Inject
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
|
||||
/** An OkHttp [Interceptor] that adds a recognizable User-Agent header to all network requests. */
|
||||
class UserAgentInterceptor @Inject constructor() : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
return chain.proceed(
|
||||
chain
|
||||
.request()
|
||||
.newBuilder()
|
||||
.header("User-Agent", "Claw-Android/${BuildConfig.VERSION_NAME}/msfjarvis")
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue