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

View file

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