@ -23,41 +23,36 @@ import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.network.interceptors.FormattedJsonHttpLogger
import io.element.android.libraries.network.interceptors.FormattedJsonHttpLogger
import kotlinx.serialization.json.Json
import okhttp3.OkHttpClient
import okhttp3.OkHttpClient
import okhttp3.Protocol
import okhttp3.logging.HttpLoggingInterceptor
import okhttp3.logging.HttpLoggingInterceptor
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeUnit
@Module
@Module
@ContributesTo ( AppScope :: class )
@ContributesTo ( AppScope :: class )
object NetworkModule {
object NetworkModule {
@Provides
@Provides
@JvmStatic
@SingleIn ( AppScope :: class )
fun providesHttpLoggingInterceptor ( buildMeta : BuildMeta ) : HttpLoggingInterceptor {
fun providesOkHttpClient (
val loggingLevel = if ( buildMeta . isDebuggable ) {
buildMeta : BuildMeta ,
HttpLoggingInterceptor . Level . BODY
) : OkHttpClient = OkHttpClient . Builder ( ) . apply {
} else {
connectTimeout ( 30 , TimeUnit . SECONDS )
HttpLoggingInterceptor . Level . BASIC
readTimeout ( 60 , TimeUnit . SECONDS )
}
writeTimeout ( 60 , TimeUnit . SECONDS )
val logger = FormattedJsonHttpLogger ( loggingLevel )
if ( buildMeta . isDebuggable ) addInterceptor ( providesHttpLoggingInterceptor ( ) )
val interceptor = HttpLoggingInterceptor ( logger )
} . build ( )
interceptor . level = loggingLevel
return interceptor
}
@Provides
@Provides
@SingleIn ( AppScope :: class )
@SingleIn ( AppScope :: class )
fun providesOkHttpClient (
fun providesJson ( ) : Json = Json {
httpLoggingInterceptor : HttpLoggingInterceptor ,
ignoreUnknownKeys = true
) : OkHttpClient {
return OkHttpClient . Builder ( )
// workaround for #4669
. protocols ( listOf ( Protocol . HTTP _1 _1 ) )
. connectTimeout ( 30 , TimeUnit . SECONDS )
. readTimeout ( 60 , TimeUnit . SECONDS )
. writeTimeout ( 60 , TimeUnit . SECONDS )
. addInterceptor ( httpLoggingInterceptor )
. build ( )
}
}
}
}
private fun providesHttpLoggingInterceptor ( ) : HttpLoggingInterceptor {
val loggingLevel = HttpLoggingInterceptor . Level . BODY
val logger = FormattedJsonHttpLogger ( loggingLevel )
val interceptor = HttpLoggingInterceptor ( logger )
interceptor . level = loggingLevel
return interceptor
}