Convert LoggedInImageLoaderFactory to an interface and add DefaultLoggedInImageLoaderFactory

This commit is contained in:
Benoit Marty
2024-06-24 14:22:46 +02:00
parent 4faa563e81
commit 8b1ca62f78
2 changed files with 14 additions and 16 deletions

View File

@@ -22,18 +22,24 @@ import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.ApplicationContext
import io.element.android.libraries.matrix.api.MatrixClient
import okhttp3.OkHttpClient
import javax.inject.Inject
import javax.inject.Provider
class LoggedInImageLoaderFactory(
private val context: Context,
private val matrixClient: MatrixClient,
interface LoggedInImageLoaderFactory {
fun newImageLoader(matrixClient: MatrixClient): ImageLoader
}
@ContributesBinding(AppScope::class)
class DefaultLoggedInImageLoaderFactory @Inject constructor(
@ApplicationContext private val context: Context,
private val okHttpClient: Provider<OkHttpClient>,
) : ImageLoaderFactory {
override fun newImageLoader(): ImageLoader {
) : LoggedInImageLoaderFactory {
override fun newImageLoader(matrixClient: MatrixClient): ImageLoader {
return ImageLoader
.Builder(context)
.okHttpClient { okHttpClient.get() }

View File

@@ -16,19 +16,15 @@
package io.element.android.libraries.matrix.ui.media
import android.content.Context
import coil.ImageLoader
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.ApplicationContext
import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
import okhttp3.OkHttpClient
import javax.inject.Inject
import javax.inject.Provider
interface ImageLoaderHolder {
fun get(client: MatrixClient): ImageLoader
@@ -38,8 +34,7 @@ interface ImageLoaderHolder {
@ContributesBinding(AppScope::class)
@SingleIn(AppScope::class)
class DefaultImageLoaderHolder @Inject constructor(
@ApplicationContext private val context: Context,
private val okHttpClient: Provider<OkHttpClient>,
private val loggedInImageLoaderFactory: LoggedInImageLoaderFactory,
private val sessionObserver: SessionObserver,
) : ImageLoaderHolder {
private val map = mutableMapOf<SessionId, ImageLoader>()
@@ -61,11 +56,8 @@ class DefaultImageLoaderHolder @Inject constructor(
override fun get(client: MatrixClient): ImageLoader {
return synchronized(map) {
map.getOrPut(client.sessionId) {
LoggedInImageLoaderFactory(
context = context,
matrixClient = client,
okHttpClient = okHttpClient,
).newImageLoader()
loggedInImageLoaderFactory
.newImageLoader(client)
}
}
}