summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Lothian <mike@fireburn.co.uk>2025-12-24 12:36:21 +0000
committerMike Lothian <mike@fireburn.co.uk>2025-12-24 13:16:37 +0000
commit81c39d732380ca88806684b37d4b3313e647b8fd (patch)
treec9b481c8fbc6b4eaa5dd2e87c334061f332a1d63
parent1ec18536f5a32571b9ee52cfe6b7c11d8103625b (diff)
Migrate to Coil3HEADmain
-rw-r--r--src/android/app/build.gradle.kts2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt55
2 files changed, 40 insertions, 17 deletions
diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts
index 5ac7669d7..410e98afe 100644
--- a/src/android/app/build.gradle.kts
+++ b/src/android/app/build.gradle.kts
@@ -234,7 +234,7 @@ dependencies {
implementation("com.google.android.material:material:1.13.0")
implementation("androidx.preference:preference-ktx:1.2.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0")
- implementation("io.coil-kt:coil:2.7.0")
+ implementation("io.coil-kt.coil3:coil:3.1.0")
implementation("androidx.core:core-splashscreen:1.2.0")
implementation("androidx.window:window:1.5.1")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0")
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt
index d05020560..63a8c5846 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt
@@ -12,15 +12,21 @@ import androidx.core.graphics.drawable.IconCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.drawable.toDrawable
import androidx.lifecycle.LifecycleOwner
-import coil.ImageLoader
-import coil.decode.DataSource
-import coil.fetch.DrawableResult
-import coil.fetch.FetchResult
-import coil.fetch.Fetcher
-import coil.key.Keyer
-import coil.memory.MemoryCache
-import coil.request.ImageRequest
-import coil.request.Options
+import coil3.ImageLoader
+import coil3.asImage
+import coil3.decode.DataSource
+import coil3.fetch.FetchResult
+import coil3.fetch.Fetcher
+import coil3.fetch.ImageFetchResult
+import coil3.key.Keyer
+import coil3.memory.MemoryCache
+import coil3.request.ImageRequest
+import coil3.request.Options
+import coil3.request.SuccessResult
+import coil3.request.error
+import coil3.request.lifecycle
+import coil3.request.target
+import coil3.toBitmap
import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.YuzuApplication
import org.yuzu.yuzu_emu.model.Game
@@ -30,8 +36,11 @@ class GameIconFetcher(
private val options: Options
) : Fetcher {
override suspend fun fetch(): FetchResult {
- return DrawableResult(
- drawable = decodeGameIcon(game.path)!!.toDrawable(options.context.resources),
+ val bitmap = decodeGameIcon(game.path)!!
+ val image = bitmap.asImage()
+
+ return ImageFetchResult(
+ image = image,
isSampled = false,
dataSource = DataSource.DISK
)
@@ -64,8 +73,8 @@ object GameIconUtils {
add(GameIconFetcher.Factory())
}
.memoryCache {
- MemoryCache.Builder(YuzuApplication.appContext)
- .maxSizePercent(0.25)
+ MemoryCache.Builder()
+ .maxSizePercent(YuzuApplication.appContext, 0.25)
.build()
}
.build()
@@ -85,8 +94,19 @@ object GameIconUtils {
.lifecycle(lifecycleOwner)
.error(R.drawable.default_icon)
.build()
- return imageLoader.execute(request)
- .drawable!!.toBitmap(config = Bitmap.Config.ARGB_8888)
+
+ val result = imageLoader.execute(request)
+
+ return if (result is SuccessResult) {
+ result.image.toBitmap()
+ } else {
+ val default = ResourcesCompat.getDrawable(
+ YuzuApplication.appContext.resources,
+ R.drawable.default_icon,
+ null
+ )
+ default!!.toBitmap()
+ }
}
suspend fun getShortcutIcon(lifecycleOwner: LifecycleOwner, game: Game): IconCompat {
@@ -95,9 +115,12 @@ object GameIconUtils {
R.drawable.shortcut,
null
) as LayerDrawable
+
+ val iconBitmap = getGameIcon(lifecycleOwner, game)
+
layerDrawable.setDrawableByLayerId(
R.id.shortcut_foreground,
- getGameIcon(lifecycleOwner, game).toDrawable(YuzuApplication.appContext.resources)
+ iconBitmap.toDrawable(YuzuApplication.appContext.resources)
)
val inset = YuzuApplication.appContext.resources
.getDimensionPixelSize(R.dimen.icon_inset)