mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 16:27:06 +05:30
android: fix most untagged OkHttp sockets
This commit is contained in:
parent
bb88d50a31
commit
d8332d6b90
2 changed files with 67 additions and 0 deletions
|
@ -1,12 +1,16 @@
|
|||
package dev.msfjarvis.claw.android.injection
|
||||
|
||||
import android.content.Context
|
||||
import android.net.TrafficStats
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dagger.multibindings.IntoSet
|
||||
import dev.msfjarvis.claw.android.network.DelegatingSocketFactory
|
||||
import java.net.Socket
|
||||
import javax.net.SocketFactory
|
||||
import okhttp3.Cache
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
|
@ -20,15 +24,27 @@ object OkHttpModule {
|
|||
return Cache(context.cacheDir, 10 * 1024 * 1024)
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun provideSocketFactory(): SocketFactory {
|
||||
return object : DelegatingSocketFactory(getDefault()) {
|
||||
override fun configureSocket(socket: Socket): Socket {
|
||||
TrafficStats.setThreadStatsTag(0x000090000)
|
||||
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()
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
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
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue