davidliu
Committed by GitHub

OkHttpClient override (#41)

... ... @@ -2,6 +2,8 @@ package io.livekit.android
import android.content.Context
import io.livekit.android.dagger.DaggerLiveKitComponent
import io.livekit.android.dagger.LiveKitOverrides
import io.livekit.android.dagger.create
import io.livekit.android.room.Room
import io.livekit.android.room.RoomListener
import io.livekit.android.util.LKLog
... ... @@ -29,11 +31,12 @@ class LiveKit {
fun create(
appContext: Context,
options: RoomOptions = RoomOptions(),
overrides: LiveKitOverrides = LiveKitOverrides(),
): Room {
val ctx = appContext.applicationContext
val component = DaggerLiveKitComponent
.factory()
.create(ctx)
.create(ctx, overrides)
val room = component.roomFactory().create(ctx)
... ... @@ -66,9 +69,10 @@ class LiveKit {
token: String,
options: ConnectOptions = ConnectOptions(),
roomOptions: RoomOptions = RoomOptions(),
listener: RoomListener? = null
listener: RoomListener? = null,
overrides: LiveKitOverrides = LiveKitOverrides()
): Room {
val room = create(appContext, roomOptions)
val room = create(appContext, roomOptions, overrides)
room.listener = listener
room.connect(url, token, options)
... ...
... ... @@ -25,4 +25,7 @@ object InjectionNames {
internal const val SIGNAL_JSON_ENABLED = "signal_json_enabled"
internal const val OPTIONS_VIDEO_HW_ACCEL = "options_video_hw_accel"
// Overrides
internal const val OVERRIDE_OKHTTP = "override_okhttp"
}
\ No newline at end of file
... ...
... ... @@ -4,8 +4,11 @@ import android.content.Context
import dagger.BindsInstance
import dagger.Component
import io.livekit.android.room.Room
import okhttp3.OkHttpClient
import org.webrtc.EglBase
import org.webrtc.PeerConnectionFactory
import javax.annotation.Nullable
import javax.inject.Named
import javax.inject.Singleton
@Singleton
... ... @@ -17,7 +20,7 @@ import javax.inject.Singleton
JsonFormatModule::class,
]
)
interface LiveKitComponent {
internal interface LiveKitComponent {
fun roomFactory(): Room.Factory
... ... @@ -27,6 +30,30 @@ interface LiveKitComponent {
@Component.Factory
interface Factory {
fun create(@BindsInstance appContext: Context): LiveKitComponent
fun create(
@BindsInstance appContext: Context,
@BindsInstance
@Named(InjectionNames.OVERRIDE_OKHTTP)
@Nullable
okHttpClientOverride: OkHttpClient?
): LiveKitComponent
}
}
internal fun LiveKitComponent.Factory.create(
context: Context,
overrides: LiveKitOverrides,
): LiveKitComponent {
return create(
appContext = context,
okHttpClientOverride = overrides.okHttpClient
)
}
/**
* Overrides to replace LiveKit internally used component with custom implementations.
*/
data class LiveKitOverrides(
val okHttpClient: OkHttpClient? = null
)
\ No newline at end of file
... ...
... ... @@ -4,14 +4,20 @@ import dagger.Module
import dagger.Provides
import okhttp3.OkHttpClient
import okhttp3.WebSocket
import javax.annotation.Nullable
import javax.inject.Named
import javax.inject.Singleton
@Module
object WebModule {
@Provides
@Singleton
fun okHttpClient(): OkHttpClient {
return OkHttpClient()
fun okHttpClient(
@Named(InjectionNames.OVERRIDE_OKHTTP)
@Nullable
okHttpClientOverride: OkHttpClient?
): OkHttpClient {
return okHttpClientOverride ?: OkHttpClient()
}
@Provides
... ...
... ... @@ -17,7 +17,7 @@ import javax.inject.Singleton
JsonFormatModule::class,
]
)
interface TestLiveKitComponent : LiveKitComponent {
internal interface TestLiveKitComponent : LiveKitComponent {
fun websocketFactory(): MockWebsocketFactory
... ...