diff options
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt | 52 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameIconUtils.kt | 7 |
2 files changed, 35 insertions, 24 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt index 0c82cdba8..2ef638559 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt | |||
| @@ -22,12 +22,16 @@ import androidx.core.graphics.drawable.toBitmap | |||
| 22 | import androidx.core.graphics.drawable.toDrawable | 22 | import androidx.core.graphics.drawable.toDrawable |
| 23 | import androidx.documentfile.provider.DocumentFile | 23 | import androidx.documentfile.provider.DocumentFile |
| 24 | import androidx.lifecycle.ViewModelProvider | 24 | import androidx.lifecycle.ViewModelProvider |
| 25 | import androidx.lifecycle.lifecycleScope | ||
| 25 | import androidx.navigation.findNavController | 26 | import androidx.navigation.findNavController |
| 26 | import androidx.preference.PreferenceManager | 27 | import androidx.preference.PreferenceManager |
| 27 | import androidx.recyclerview.widget.AsyncDifferConfig | 28 | import androidx.recyclerview.widget.AsyncDifferConfig |
| 28 | import androidx.recyclerview.widget.DiffUtil | 29 | import androidx.recyclerview.widget.DiffUtil |
| 29 | import androidx.recyclerview.widget.ListAdapter | 30 | import androidx.recyclerview.widget.ListAdapter |
| 30 | import androidx.recyclerview.widget.RecyclerView | 31 | import androidx.recyclerview.widget.RecyclerView |
| 32 | import kotlinx.coroutines.Dispatchers | ||
| 33 | import kotlinx.coroutines.launch | ||
| 34 | import kotlinx.coroutines.withContext | ||
| 31 | import org.yuzu.yuzu_emu.HomeNavigationDirections | 35 | import org.yuzu.yuzu_emu.HomeNavigationDirections |
| 32 | import org.yuzu.yuzu_emu.R | 36 | import org.yuzu.yuzu_emu.R |
| 33 | import org.yuzu.yuzu_emu.YuzuApplication | 37 | import org.yuzu.yuzu_emu.YuzuApplication |
| @@ -92,28 +96,34 @@ class GameAdapter(private val activity: AppCompatActivity) : | |||
| 92 | data = Uri.parse(holder.game.path) | 96 | data = Uri.parse(holder.game.path) |
| 93 | } | 97 | } |
| 94 | 98 | ||
| 95 | val layerDrawable = ResourcesCompat.getDrawable( | 99 | activity.lifecycleScope.launch { |
| 96 | YuzuApplication.appContext.resources, | 100 | withContext(Dispatchers.IO) { |
| 97 | R.drawable.shortcut, | 101 | val layerDrawable = ResourcesCompat.getDrawable( |
| 98 | null | 102 | YuzuApplication.appContext.resources, |
| 99 | ) as LayerDrawable | 103 | R.drawable.shortcut, |
| 100 | layerDrawable.setDrawableByLayerId( | 104 | null |
| 101 | R.id.shortcut_foreground, | 105 | ) as LayerDrawable |
| 102 | GameIconUtils.getGameIcon(holder.game).toDrawable(YuzuApplication.appContext.resources) | 106 | layerDrawable.setDrawableByLayerId( |
| 103 | ) | 107 | R.id.shortcut_foreground, |
| 104 | val inset = YuzuApplication.appContext.resources | 108 | GameIconUtils.getGameIcon(activity, holder.game) |
| 105 | .getDimensionPixelSize(R.dimen.icon_inset) | 109 | .toDrawable(YuzuApplication.appContext.resources) |
| 106 | layerDrawable.setLayerInset(1, inset, inset, inset, inset) | ||
| 107 | val shortcut = ShortcutInfoCompat.Builder(YuzuApplication.appContext, holder.game.path) | ||
| 108 | .setShortLabel(holder.game.title) | ||
| 109 | .setIcon( | ||
| 110 | IconCompat.createWithAdaptiveBitmap( | ||
| 111 | layerDrawable.toBitmap(config = Bitmap.Config.ARGB_8888) | ||
| 112 | ) | 110 | ) |
| 113 | ) | 111 | val inset = YuzuApplication.appContext.resources |
| 114 | .setIntent(openIntent) | 112 | .getDimensionPixelSize(R.dimen.icon_inset) |
| 115 | .build() | 113 | layerDrawable.setLayerInset(1, inset, inset, inset, inset) |
| 116 | ShortcutManagerCompat.pushDynamicShortcut(YuzuApplication.appContext, shortcut) | 114 | val shortcut = |
| 115 | ShortcutInfoCompat.Builder(YuzuApplication.appContext, holder.game.path) | ||
| 116 | .setShortLabel(holder.game.title) | ||
| 117 | .setIcon( | ||
| 118 | IconCompat.createWithAdaptiveBitmap( | ||
| 119 | layerDrawable.toBitmap(config = Bitmap.Config.ARGB_8888) | ||
| 120 | ) | ||
| 121 | ) | ||
| 122 | .setIntent(openIntent) | ||
| 123 | .build() | ||
| 124 | ShortcutManagerCompat.pushDynamicShortcut(YuzuApplication.appContext, shortcut) | ||
| 125 | } | ||
| 126 | } | ||
| 117 | 127 | ||
| 118 | val action = HomeNavigationDirections.actionGlobalEmulationActivity(holder.game) | 128 | val action = HomeNavigationDirections.actionGlobalEmulationActivity(holder.game) |
| 119 | view.findNavController().navigate(action) | 129 | view.findNavController().navigate(action) |
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 654d62f52..2e9b0beb8 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 | |||
| @@ -8,9 +8,9 @@ import android.graphics.BitmapFactory | |||
| 8 | import android.widget.ImageView | 8 | import android.widget.ImageView |
| 9 | import androidx.core.graphics.drawable.toBitmap | 9 | import androidx.core.graphics.drawable.toBitmap |
| 10 | import androidx.core.graphics.drawable.toDrawable | 10 | import androidx.core.graphics.drawable.toDrawable |
| 11 | import androidx.lifecycle.LifecycleOwner | ||
| 11 | import coil.ImageLoader | 12 | import coil.ImageLoader |
| 12 | import coil.decode.DataSource | 13 | import coil.decode.DataSource |
| 13 | import coil.executeBlocking | ||
| 14 | import coil.fetch.DrawableResult | 14 | import coil.fetch.DrawableResult |
| 15 | import coil.fetch.FetchResult | 15 | import coil.fetch.FetchResult |
| 16 | import coil.fetch.Fetcher | 16 | import coil.fetch.Fetcher |
| @@ -76,12 +76,13 @@ object GameIconUtils { | |||
| 76 | imageLoader.enqueue(request) | 76 | imageLoader.enqueue(request) |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | fun getGameIcon(game: Game): Bitmap { | 79 | suspend fun getGameIcon(lifecycleOwner: LifecycleOwner, game: Game): Bitmap { |
| 80 | val request = ImageRequest.Builder(YuzuApplication.appContext) | 80 | val request = ImageRequest.Builder(YuzuApplication.appContext) |
| 81 | .data(game) | 81 | .data(game) |
| 82 | .lifecycle(lifecycleOwner) | ||
| 82 | .error(R.drawable.default_icon) | 83 | .error(R.drawable.default_icon) |
| 83 | .build() | 84 | .build() |
| 84 | return imageLoader.executeBlocking(request) | 85 | return imageLoader.execute(request) |
| 85 | .drawable!!.toBitmap(config = Bitmap.Config.ARGB_8888) | 86 | .drawable!!.toBitmap(config = Bitmap.Config.ARGB_8888) |
| 86 | } | 87 | } |
| 87 | } | 88 | } |