From 47ef47a146ced243bb17acc0759a8e8eebb46521 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 22 Nov 2022 14:15:38 +0100 Subject: [PATCH] Improve images on timeline --- .../java/io/element/android/x/ElementXApplication.kt | 3 +-- .../components/MessagesTimelineItemImageView.kt | 11 ++++++++--- .../MessagesTimelineItemInformativeView.kt | 2 +- .../main/java/io/element/android/x/matrix/Matrix.kt | 12 ++++++++++-- .../element/android/x/matrix/media/MediaFetcher.kt | 2 +- .../io/element/android/x/matrix/media/MediaKeyer.kt | 10 ++++++++++ 6 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaKeyer.kt diff --git a/app/src/main/java/io/element/android/x/ElementXApplication.kt b/app/src/main/java/io/element/android/x/ElementXApplication.kt index a2dd80299d..715b6c215b 100644 --- a/app/src/main/java/io/element/android/x/ElementXApplication.kt +++ b/app/src/main/java/io/element/android/x/ElementXApplication.kt @@ -5,7 +5,6 @@ import coil.ImageLoader import coil.ImageLoaderFactory import com.airbnb.mvrx.Mavericks import io.element.android.x.matrix.MatrixInstance -import io.element.android.x.matrix.media.MediaFetcher import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.MainScope import kotlinx.coroutines.plus @@ -26,7 +25,7 @@ class ElementXApplication : Application(), ImageLoaderFactory { return ImageLoader .Builder(this) .components { - add(MediaFetcher.Factory(MatrixInstance.getInstance())) + MatrixInstance.getInstance().registerComponents(this) } .build() } diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt index a9387bdfd6..1829a6a06b 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemImageView.kt @@ -1,6 +1,10 @@ +@file:OptIn(ExperimentalFoundationApi::class) + package io.element.android.x.features.messages.components +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale @@ -12,12 +16,13 @@ fun MessagesTimelineItemImageView( content: MessagesTimelineItemImageContent, modifier: Modifier = Modifier ) { - Box(modifier) { + Box( + modifier = Modifier.fillMaxSize() + ) { AsyncImage( model = content.imageMeta, contentDescription = null, - contentScale = ContentScale.Crop, - modifier = modifier + contentScale = ContentScale.Crop ) } } \ No newline at end of file diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt index 327b4b6e1c..dbfe9ccf96 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/components/MessagesTimelineItemInformativeView.kt @@ -36,7 +36,7 @@ fun MessagesTimelineItemInformativeView( Text( fontStyle = FontStyle.Italic, color = MaterialTheme.colorScheme.secondary, - fontSize = 12.sp, + fontSize = 14.sp, text = text ) } diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt index 323b837e13..2dcbac4d63 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/Matrix.kt @@ -1,7 +1,10 @@ package io.element.android.x.matrix import android.content.Context +import coil.ComponentRegistry import io.element.android.x.core.coroutine.CoroutineDispatchers +import io.element.android.x.matrix.media.MediaFetcher +import io.element.android.x.matrix.media.MediaKeyer import io.element.android.x.matrix.session.SessionStore import io.element.android.x.matrix.util.logError import kotlinx.coroutines.CoroutineScope @@ -55,6 +58,11 @@ class Matrix( return matrixClient.value.get() } + fun registerComponents(builder: ComponentRegistry.Builder) { + builder.add(MediaKeyer()) + builder.add(MediaFetcher.Factory(this)) + } + suspend fun restoreSession() = withContext(coroutineDispatchers.io) { sessionStore.getLatestSession() ?.let { session -> @@ -88,8 +96,8 @@ class Matrix( withContext(coroutineDispatchers.io) { val client = try { authService.login(username, password, "ElementX", null) - }catch (failure:Throwable){ - Timber.e(failure,"Fail login") + } catch (failure: Throwable) { + Timber.e(failure, "Fail login") throw failure } sessionStore.storeData(client.session()) diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt index 010d42102a..7ed5f3c7e9 100644 --- a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaFetcher.kt @@ -7,7 +7,7 @@ import coil.request.Options import io.element.android.x.matrix.Matrix import java.nio.ByteBuffer -class MediaFetcher( +internal class MediaFetcher( private val mediaResolver: MediaResolver, private val meta: MediaResolver.Meta, private val options: Options, diff --git a/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaKeyer.kt b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaKeyer.kt new file mode 100644 index 0000000000..4bc77018fa --- /dev/null +++ b/libraries/matrix/src/main/java/io/element/android/x/matrix/media/MediaKeyer.kt @@ -0,0 +1,10 @@ +package io.element.android.x.matrix.media + +import coil.key.Keyer +import coil.request.Options + +internal class MediaKeyer : Keyer { + override fun key(data: MediaResolver.Meta, options: Options): String? { + return "${data.source.url()}_${data.kind}" + } +} \ No newline at end of file