Naming convention and use MatrixMediaLoader instead of MatrixClient for Coil factories.
This commit is contained in:
committed by
Benoit Marty
parent
ad770b521e
commit
cabeb19ae1
@@ -57,7 +57,7 @@ interface MatrixClient {
|
||||
val encryptionService: EncryptionService
|
||||
val roomDirectoryService: RoomDirectoryService
|
||||
val mediaPreviewService: MediaPreviewService
|
||||
val mediaLoader: MatrixMediaLoader
|
||||
val matrixMediaLoader: MatrixMediaLoader
|
||||
val sessionCoroutineScope: CoroutineScope
|
||||
val ignoredUsersFlow: StateFlow<ImmutableList<UserId>>
|
||||
val roomMembershipObserver: RoomMembershipObserver
|
||||
|
||||
@@ -213,7 +213,7 @@ class RustMatrixClient(
|
||||
featureFlagService = featureFlagService,
|
||||
)
|
||||
|
||||
override val mediaLoader: MatrixMediaLoader = RustMediaLoader(
|
||||
override val matrixMediaLoader: MatrixMediaLoader = RustMediaLoader(
|
||||
baseCacheDirectory = baseCacheDirectory,
|
||||
dispatchers = dispatchers,
|
||||
innerClient = innerClient,
|
||||
|
||||
@@ -66,7 +66,7 @@ object SessionMatrixModule {
|
||||
|
||||
@Provides
|
||||
fun providesMatrixMediaLoader(matrixClient: MatrixClient): MatrixMediaLoader {
|
||||
return matrixClient.mediaLoader
|
||||
return matrixClient.matrixMediaLoader
|
||||
}
|
||||
|
||||
@SessionCoroutineScope
|
||||
|
||||
@@ -63,7 +63,7 @@ class FakeMatrixClient(
|
||||
private val userAvatarUrl: String? = AN_AVATAR_URL,
|
||||
override val roomListService: RoomListService = FakeRoomListService(),
|
||||
override val spaceService: SpaceService = FakeSpaceService(),
|
||||
override val mediaLoader: MatrixMediaLoader = FakeMatrixMediaLoader(),
|
||||
override val matrixMediaLoader: MatrixMediaLoader = FakeMatrixMediaLoader(),
|
||||
override val sessionVerificationService: FakeSessionVerificationService = FakeSessionVerificationService(),
|
||||
override val pushersService: FakePushersService = FakePushersService(),
|
||||
override val notificationService: FakeNotificationService = FakeNotificationService(),
|
||||
|
||||
@@ -11,10 +11,10 @@ import coil3.ImageLoader
|
||||
import coil3.fetch.Fetcher
|
||||
import coil3.request.Options
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
|
||||
internal class AvatarDataFetcherFactory(
|
||||
private val client: MatrixClient
|
||||
private val matrixMediaLoader: MatrixMediaLoader
|
||||
) : Fetcher.Factory<AvatarData> {
|
||||
override fun create(
|
||||
data: AvatarData,
|
||||
@@ -22,7 +22,7 @@ internal class AvatarDataFetcherFactory(
|
||||
imageLoader: ImageLoader
|
||||
): Fetcher {
|
||||
return CoilMediaFetcher(
|
||||
mediaLoader = client.mediaLoader,
|
||||
mediaLoader = matrixMediaLoader,
|
||||
mediaData = data.toMediaRequestData(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -18,11 +18,11 @@ import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.Inject
|
||||
import dev.zacsweers.metro.Provider
|
||||
import io.element.android.libraries.di.annotations.ApplicationContext
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
interface LoggedInImageLoaderFactory {
|
||||
fun newImageLoader(matrixClient: MatrixClient): ImageLoader
|
||||
fun newImageLoader(matrixMediaLoader: MatrixMediaLoader): ImageLoader
|
||||
}
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
@@ -31,7 +31,7 @@ class DefaultLoggedInImageLoaderFactory(
|
||||
@ApplicationContext private val context: Context,
|
||||
private val okHttpClient: Provider<OkHttpClient>,
|
||||
) : LoggedInImageLoaderFactory {
|
||||
override fun newImageLoader(matrixClient: MatrixClient): ImageLoader {
|
||||
override fun newImageLoader(matrixMediaLoader: MatrixMediaLoader): ImageLoader {
|
||||
return ImageLoader.Builder(context)
|
||||
.components {
|
||||
add(
|
||||
@@ -50,8 +50,8 @@ class DefaultLoggedInImageLoaderFactory(
|
||||
}
|
||||
add(AvatarDataKeyer())
|
||||
add(MediaRequestDataKeyer())
|
||||
add(AvatarDataFetcherFactory(matrixClient))
|
||||
add(MediaRequestDataFetcherFactory(matrixClient))
|
||||
add(AvatarDataFetcherFactory(matrixMediaLoader))
|
||||
add(MediaRequestDataFetcherFactory(matrixMediaLoader))
|
||||
}
|
||||
.build()
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class DefaultImageLoaderHolder(
|
||||
return synchronized(map) {
|
||||
map.getOrPut(client.sessionId) {
|
||||
loggedInImageLoaderFactory
|
||||
.newImageLoader(client)
|
||||
.newImageLoader(client.matrixMediaLoader)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,10 +10,10 @@ package io.element.android.libraries.matrix.ui.media
|
||||
import coil3.ImageLoader
|
||||
import coil3.fetch.Fetcher
|
||||
import coil3.request.Options
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
|
||||
internal class MediaRequestDataFetcherFactory(
|
||||
private val client: MatrixClient
|
||||
private val matrixMediaLoader: MatrixMediaLoader,
|
||||
) : Fetcher.Factory<MediaRequestData> {
|
||||
override fun create(
|
||||
data: MediaRequestData,
|
||||
@@ -21,7 +21,7 @@ internal class MediaRequestDataFetcherFactory(
|
||||
imageLoader: ImageLoader
|
||||
): Fetcher {
|
||||
return CoilMediaFetcher(
|
||||
mediaLoader = client.mediaLoader,
|
||||
mediaLoader = matrixMediaLoader,
|
||||
mediaData = data,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ package io.element.android.libraries.matrix.ui.media
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import coil3.ImageLoader
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||
import io.element.android.libraries.sessionstorage.test.observer.FakeSessionObserver
|
||||
@@ -27,7 +27,7 @@ class DefaultImageLoaderHolderTest {
|
||||
@Test
|
||||
fun `get - returns the same ImageLoader for the same client`() {
|
||||
val context = InstrumentationRegistry.getInstrumentation().context
|
||||
val lambda = lambdaRecorder<MatrixClient, ImageLoader> { ImageLoader.Builder(context).build() }
|
||||
val lambda = lambdaRecorder<MatrixMediaLoader, ImageLoader> { ImageLoader.Builder(context).build() }
|
||||
|
||||
val holder = DefaultImageLoaderHolder(
|
||||
loggedInImageLoaderFactory = FakeLoggedInImageLoaderFactory(lambda),
|
||||
@@ -39,14 +39,14 @@ class DefaultImageLoaderHolderTest {
|
||||
assert(imageLoader1 === imageLoader2)
|
||||
lambda.assertions()
|
||||
.isCalledOnce()
|
||||
.with(value(client))
|
||||
.with(value(client.matrixMediaLoader))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when session is deleted, the image loader is deleted`() = runTest {
|
||||
val context = InstrumentationRegistry.getInstrumentation().context
|
||||
val lambda =
|
||||
lambdaRecorder<MatrixClient, ImageLoader> { ImageLoader.Builder(context).build() }
|
||||
lambdaRecorder<MatrixMediaLoader, ImageLoader> { ImageLoader.Builder(context).build() }
|
||||
val sessionObserver = FakeSessionObserver()
|
||||
val holder = DefaultImageLoaderHolder(
|
||||
loggedInImageLoaderFactory = FakeLoggedInImageLoaderFactory(lambda),
|
||||
@@ -65,7 +65,7 @@ class DefaultImageLoaderHolderTest {
|
||||
fun `when session is created, nothing happen`() = runTest {
|
||||
val context = InstrumentationRegistry.getInstrumentation().context
|
||||
val lambda =
|
||||
lambdaRecorder<MatrixClient, ImageLoader> { ImageLoader.Builder(context).build() }
|
||||
lambdaRecorder<MatrixMediaLoader, ImageLoader> { ImageLoader.Builder(context).build() }
|
||||
val sessionObserver = FakeSessionObserver()
|
||||
DefaultImageLoaderHolder(
|
||||
loggedInImageLoaderFactory = FakeLoggedInImageLoaderFactory(lambda),
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
package io.element.android.libraries.matrix.ui.media
|
||||
|
||||
import coil3.ImageLoader
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
|
||||
class FakeLoggedInImageLoaderFactory(
|
||||
private val newImageLoaderLambda: (MatrixClient) -> ImageLoader
|
||||
private val newImageLoaderLambda: (MatrixMediaLoader) -> ImageLoader
|
||||
) : LoggedInImageLoaderFactory {
|
||||
override fun newImageLoader(matrixClient: MatrixClient): ImageLoader {
|
||||
return newImageLoaderLambda(matrixClient)
|
||||
override fun newImageLoader(matrixMediaLoader: MatrixMediaLoader): ImageLoader {
|
||||
return newImageLoaderLambda(matrixMediaLoader)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ class DefaultNotificationMediaRepo(
|
||||
): DefaultNotificationMediaRepo
|
||||
}
|
||||
|
||||
private val matrixMediaLoader = client.mediaLoader
|
||||
private val matrixMediaLoader = client.matrixMediaLoader
|
||||
|
||||
override suspend fun getMediaFile(
|
||||
mediaSource: MediaSource,
|
||||
|
||||
Reference in New Issue
Block a user