mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 21:32:34 +00:00
Add full SVG support
This commit is contained in:
@@ -26,6 +26,7 @@ dependencies {
|
||||
implementation(projects.libraries.designsystem)
|
||||
implementation(libs.coil.compose)
|
||||
implementation(libs.coil.gif)
|
||||
implementation(libs.coil.svg)
|
||||
implementation(libs.coil.network.okhttp)
|
||||
|
||||
testCommonDependencies(libs, true)
|
||||
|
||||
+16
-3
@@ -13,6 +13,7 @@ import coil3.decode.ImageSource
|
||||
import coil3.fetch.FetchResult
|
||||
import coil3.fetch.Fetcher
|
||||
import coil3.fetch.SourceFetchResult
|
||||
import io.element.android.libraries.matrix.api.exception.isNetworkError
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||
import io.element.android.libraries.matrix.api.media.toFile
|
||||
@@ -34,7 +35,19 @@ internal class CoilMediaFetcher(
|
||||
}
|
||||
return when (val kind = mediaData.kind) {
|
||||
is MediaRequestData.Kind.Content -> fetchContent(mediaSource)
|
||||
is MediaRequestData.Kind.Thumbnail -> fetchThumbnail(mediaSource, kind)
|
||||
is MediaRequestData.Kind.Thumbnail -> {
|
||||
val thumbnailResult = fetchThumbnail(mediaSource, kind)
|
||||
if (thumbnailResult.isSuccess) {
|
||||
thumbnailResult.getOrThrow()
|
||||
} else {
|
||||
val error = thumbnailResult.exceptionOrNull()
|
||||
if (error?.isNetworkError() == true) {
|
||||
null
|
||||
} else {
|
||||
fetchContent(mediaSource)
|
||||
}
|
||||
}
|
||||
}
|
||||
is MediaRequestData.Kind.File -> fetchFile(mediaSource, kind)
|
||||
}
|
||||
}
|
||||
@@ -74,7 +87,7 @@ internal class CoilMediaFetcher(
|
||||
}.getOrNull()
|
||||
}
|
||||
|
||||
private suspend fun fetchThumbnail(mediaSource: MediaSource, kind: MediaRequestData.Kind.Thumbnail): FetchResult? {
|
||||
private suspend fun fetchThumbnail(mediaSource: MediaSource, kind: MediaRequestData.Kind.Thumbnail): Result<FetchResult> {
|
||||
return mediaLoader.loadMediaThumbnail(
|
||||
source = mediaSource,
|
||||
width = kind.width,
|
||||
@@ -83,7 +96,7 @@ internal class CoilMediaFetcher(
|
||||
byteArray.asSourceResult()
|
||||
}.onFailure {
|
||||
Timber.e(it)
|
||||
}.getOrNull()
|
||||
}
|
||||
}
|
||||
|
||||
private fun ByteArray.asSourceResult(): SourceFetchResult {
|
||||
|
||||
+4
@@ -14,6 +14,7 @@ import coil3.ImageLoader
|
||||
import coil3.gif.AnimatedImageDecoder
|
||||
import coil3.gif.GifDecoder
|
||||
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
|
||||
import coil3.svg.SvgDecoder
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.di.annotations.ApplicationContext
|
||||
@@ -41,6 +42,7 @@ class DefaultImageLoaderFactory(
|
||||
return ImageLoader.Builder(context)
|
||||
.components {
|
||||
add(okHttpNetworkFetcherFactory)
|
||||
add(SvgDecoder.Factory())
|
||||
}
|
||||
.build()
|
||||
}
|
||||
@@ -49,6 +51,8 @@ class DefaultImageLoaderFactory(
|
||||
return ImageLoader.Builder(context)
|
||||
.components {
|
||||
add(okHttpNetworkFetcherFactory)
|
||||
// Add svg support
|
||||
add(SvgDecoder.Factory())
|
||||
// Add gif support
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
add(AnimatedImageDecoder.Factory())
|
||||
|
||||
Reference in New Issue
Block a user