2 changed files with 79 additions and 22 deletions
-
24src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt
-
77src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt
@ -0,0 +1,77 @@ |
|||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
package org.yuzu.yuzu_emu.utils |
|||
|
|||
import android.graphics.Bitmap |
|||
import android.graphics.BitmapFactory |
|||
import android.widget.ImageView |
|||
import androidx.core.graphics.drawable.toDrawable |
|||
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 org.yuzu.yuzu_emu.NativeLibrary |
|||
import org.yuzu.yuzu_emu.R |
|||
import org.yuzu.yuzu_emu.YuzuApplication |
|||
import org.yuzu.yuzu_emu.model.Game |
|||
|
|||
class GameIconFetcher( |
|||
private val game: Game, |
|||
private val options: Options |
|||
) : Fetcher { |
|||
override suspend fun fetch(): FetchResult { |
|||
return DrawableResult( |
|||
drawable = decodeGameIcon(game.path)!!.toDrawable(options.context.resources), |
|||
isSampled = false, |
|||
dataSource = DataSource.DISK |
|||
) |
|||
} |
|||
|
|||
private fun decodeGameIcon(uri: String): Bitmap? { |
|||
val data = NativeLibrary.getIcon(uri) |
|||
return BitmapFactory.decodeByteArray( |
|||
data, |
|||
0, |
|||
data.size, |
|||
BitmapFactory.Options() |
|||
) |
|||
} |
|||
|
|||
class Factory : Fetcher.Factory<Game> { |
|||
override fun create(data: Game, options: Options, imageLoader: ImageLoader): Fetcher = |
|||
GameIconFetcher(data, options) |
|||
} |
|||
} |
|||
|
|||
class GameIconKeyer : Keyer<Game> { |
|||
override fun key(data: Game, options: Options): String = data.path |
|||
} |
|||
|
|||
object GameIconUtils { |
|||
private val imageLoader = ImageLoader.Builder(YuzuApplication.appContext) |
|||
.components { |
|||
add(GameIconKeyer()) |
|||
add(GameIconFetcher.Factory()) |
|||
} |
|||
.memoryCache { |
|||
MemoryCache.Builder(YuzuApplication.appContext) |
|||
.maxSizePercent(0.25) |
|||
.build() |
|||
} |
|||
.build() |
|||
|
|||
fun loadGameIcon(game: Game, imageView: ImageView) { |
|||
val request = ImageRequest.Builder(YuzuApplication.appContext) |
|||
.data(game) |
|||
.target(imageView) |
|||
.error(R.drawable.default_icon) |
|||
.build() |
|||
imageLoader.enqueue(request) |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue