feat(image): migrate to Coil 3.6.0 with OkHttp network fetcher (#996)

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-08-27 15:13:18 +03:00
1 parent 10d7d473fd
commit 14fde03083
7 files changed
+33 -20

No files matched your search

+2 -1
View File
@@ -171,9 +171,10 @@ dependencies {
implementation(libs.latex.parser)
implementation(libs.latex.renderer)
// Image loading
// Image loading (Coil 3)
implementation(libs.coil.compose)
implementation(libs.coil.gif)
implementation(libs.coil.network.okhttp)
// Encrypted storage
implementation(libs.androidx.security.crypto)
@@ -2,10 +2,13 @@ package com.m57.hermescontrol
import android.app.Application
import android.os.Build
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.SingletonImageLoader
import coil3.gif.AnimatedImageDecoder
import coil3.gif.GifDecoder
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
import coil3.request.crossfade
import com.m57.hermescontrol.data.local.AuthManager
import com.m57.hermescontrol.data.remote.NetworkMonitor
import com.m57.hermescontrol.data.remote.OkHttpProvider
@@ -14,7 +17,7 @@ import com.m57.hermescontrol.ui.analytics.AnalyticsPreloader
class HermesControlApp :
Application(),
ImageLoaderFactory {
SingletonImageLoader.Factory {
override fun onCreate() {
super.onCreate()
AuthManager.init(this)
@@ -31,13 +34,17 @@ class HermesControlApp :
UpdateNoticeManager.checkOnLaunch()
}
override fun newImageLoader(): ImageLoader =
override fun newImageLoader(context: PlatformContext): ImageLoader =
ImageLoader
.Builder(this)
.okHttpClient(OkHttpProvider.base)
.Builder(context)
.components {
add(
OkHttpNetworkFetcherFactory(
callFactory = { OkHttpProvider.base },
),
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
add(ImageDecoderDecoder.Factory())
add(AnimatedImageDecoder.Factory())
} else {
add(GifDecoder.Factory())
}
@@ -35,7 +35,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import coil.compose.AsyncImage
import coil3.compose.AsyncImage
import com.m57.hermescontrol.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -60,7 +60,7 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import coil3.compose.AsyncImage
import com.m57.hermescontrol.R
import com.m57.hermescontrol.data.model.Attachment
import com.m57.hermescontrol.data.model.ProfileInfo
@@ -25,10 +25,12 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import coil3.asDrawable
import coil3.compose.AsyncImage
import com.m57.hermescontrol.R
@Composable
@@ -54,6 +56,7 @@ fun GifImageThumbnail(
}
}
val context = LocalContext.current
Box(
modifier =
modifier
@@ -65,7 +68,7 @@ fun GifImageThumbnail(
model = model,
contentDescription = contentDescription,
onSuccess = { result ->
val drawable = result.result.drawable
val drawable = result.result.image.asDrawable(context.resources)
if (drawable is Animatable) {
animatableDrawable = drawable
if (isPlaying) {
@@ -35,8 +35,9 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import coil.request.ImageRequest
import coil3.compose.AsyncImage
import coil3.request.ImageRequest
import coil3.request.crossfade
import com.m57.hermescontrol.data.model.BotAvatarMeta
import com.m57.hermescontrol.theme.StatusGreen
import com.m57.hermescontrol.theme.parseHexColor
+5 -4
View File
@@ -25,7 +25,7 @@ retrofit = "3.0.0"
securityCrypto = "1.0.0"
mockk = "1.14.11"
turbine = "1.2.1"
coil = "2.7.0"
coil = "3.6.0"
room = "3.0.2"
sqlcipher = "4.18.0"
datastore = "1.1.2"
@@ -86,9 +86,10 @@ latex-base = { module = "io.github.huarangmeng:latex-base", version.ref = "latex
latex-parser = { module = "io.github.huarangmeng:latex-parser", version.ref = "latex" }
latex-renderer = { module = "io.github.huarangmeng:latex-renderer", version.ref = "latex" }
# Image loading
coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
coil-gif = { module = "io.coil-kt:coil-gif", version.ref = "coil" }
# Image loading (Coil 3)
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-gif = { module = "io.coil-kt.coil3:coil-gif", version.ref = "coil" }
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }