Convert LoggedInImageLoaderFactory to an interface and add DefaultLoggedInImageLoaderFactory
This commit is contained in:
parent
4faa563e81
commit
8b1ca62f78
2 changed files with 14 additions and 16 deletions
|
|
@ -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() }
|
||||||
|
|
|
||||||
|
|
@ -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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue