From 3af7ca9ab009f09212ca6b3909a04148a69f81a7 Mon Sep 17 00:00:00 2001 From: ganfra <francois.ganard@gmail.com> Date: Wed, 6 Nov 2019 20:07:28 +0100 Subject: [PATCH] Retrofit: lazy init okhttp --- .../android/internal/auth/DefaultAuthenticator.kt | 5 +++-- .../android/internal/network/RetrofitFactory.kt | 11 +++++++++-- .../matrix/android/internal/session/SessionModule.kt | 3 ++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticator.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticator.kt index 0192715ae5..1f7caa4fc3 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticator.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/auth/DefaultAuthenticator.kt @@ -17,6 +17,7 @@ package im.vector.matrix.android.internal.auth import android.util.Patterns +import dagger.Lazy import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.auth.Authenticator import im.vector.matrix.android.api.auth.data.Credentials @@ -42,7 +43,7 @@ import javax.inject.Inject import javax.inject.Provider internal class DefaultAuthenticator @Inject constructor(@Unauthenticated - private val okHttpClient: Provider<OkHttpClient>, + private val okHttpClient: Lazy<OkHttpClient>, private val retrofitFactory: RetrofitFactory, private val coroutineDispatchers: MatrixCoroutineDispatchers, private val sessionParamsStore: SessionParamsStore, @@ -133,7 +134,7 @@ internal class DefaultAuthenticator @Inject constructor(@Unauthenticated } private fun buildAuthAPI(homeServerConnectionConfig: HomeServerConnectionConfig): AuthAPI { - val retrofit = retrofitFactory.create(okHttpClient.get(), homeServerConnectionConfig.homeServerUri.toString()) + val retrofit = retrofitFactory.create(okHttpClient, homeServerConnectionConfig.homeServerUri.toString()) return retrofit.create(AuthAPI::class.java) } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/RetrofitFactory.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/RetrofitFactory.kt index 15e6f76381..44ccd7c941 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/RetrofitFactory.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/network/RetrofitFactory.kt @@ -17,17 +17,24 @@ package im.vector.matrix.android.internal.network import com.squareup.moshi.Moshi +import dagger.Lazy +import okhttp3.Call import okhttp3.OkHttpClient +import okhttp3.Request import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory import javax.inject.Inject class RetrofitFactory @Inject constructor(private val moshi: Moshi) { - fun create(okHttpClient: OkHttpClient, baseUrl: String): Retrofit { + fun create(okHttpClient: Lazy<OkHttpClient>, baseUrl: String): Retrofit { return Retrofit.Builder() .baseUrl(baseUrl) - .client(okHttpClient) + .callFactory(object : Call.Factory { + override fun newCall(request: Request): Call { + return okHttpClient.get().newCall(request) + } + }) .addConverterFactory(UnitConverterFactory) .addConverterFactory(MoshiConverterFactory.create(moshi)) .build() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt index d038630a74..0e88894969 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/SessionModule.kt @@ -19,6 +19,7 @@ package im.vector.matrix.android.internal.session import android.content.Context import com.zhuinden.monarchy.Monarchy import dagger.Binds +import dagger.Lazy import dagger.Module import dagger.Provides import dagger.multibindings.IntoSet @@ -132,7 +133,7 @@ internal abstract class SessionModule { @JvmStatic @Provides @SessionScope - fun providesRetrofit(@Authenticated okHttpClient: OkHttpClient, + fun providesRetrofit(@Authenticated okHttpClient: Lazy<OkHttpClient>, sessionParams: SessionParams, retrofitFactory: RetrofitFactory): Retrofit { return retrofitFactory