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
|
package dev.msfjarvis.claw.android.injection
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.net.TrafficStats
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
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 java.net.Socket
|
||||||
|
import javax.net.SocketFactory
|
||||||
import okhttp3.Cache
|
import okhttp3.Cache
|
||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -20,15 +24,27 @@ object OkHttpModule {
|
||||||
return Cache(context.cacheDir, 10 * 1024 * 1024)
|
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
|
@Provides
|
||||||
fun provideClient(
|
fun provideClient(
|
||||||
cache: Cache,
|
cache: Cache,
|
||||||
|
socketFactory: SocketFactory,
|
||||||
interceptors: Set<@JvmSuppressWildcards Interceptor>,
|
interceptors: Set<@JvmSuppressWildcards Interceptor>,
|
||||||
): OkHttpClient {
|
): OkHttpClient {
|
||||||
return OkHttpClient.Builder()
|
return OkHttpClient.Builder()
|
||||||
.apply {
|
.apply {
|
||||||
cache(cache)
|
cache(cache)
|
||||||
interceptors.forEach(::addNetworkInterceptor)
|
interceptors.forEach(::addNetworkInterceptor)
|
||||||
|
socketFactory(socketFactory)
|
||||||
}
|
}
|
||||||
.build()
|
.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