diff options
4 files changed, 43 insertions, 3 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 0013e8512..f9f88a1d2 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 @@ -4,7 +4,8 @@  package org.yuzu.yuzu_emu.adapters  import android.content.Intent -import android.graphics.drawable.BitmapDrawable +import android.graphics.Bitmap +import android.graphics.drawable.LayerDrawable  import android.net.Uri  import android.text.TextUtils  import android.view.LayoutInflater @@ -15,7 +16,10 @@ import android.widget.Toast  import androidx.appcompat.app.AppCompatActivity  import androidx.core.content.pm.ShortcutInfoCompat  import androidx.core.content.pm.ShortcutManagerCompat +import androidx.core.content.res.ResourcesCompat  import androidx.core.graphics.drawable.IconCompat +import androidx.core.graphics.drawable.toBitmap +import androidx.core.graphics.drawable.toDrawable  import androidx.documentfile.provider.DocumentFile  import androidx.lifecycle.ViewModelProvider  import androidx.navigation.findNavController @@ -87,11 +91,24 @@ class GameAdapter(private val activity: AppCompatActivity) :              action = Intent.ACTION_VIEW              data = Uri.parse(holder.game.path)          } + +        val layerDrawable = ResourcesCompat.getDrawable( +            YuzuApplication.appContext.resources, +            R.drawable.shortcut, +            null +        ) as LayerDrawable +        layerDrawable.setDrawableByLayerId( +            R.id.shortcut_foreground, +            GameIconUtils.getGameIcon(holder.game).toDrawable(YuzuApplication.appContext.resources) +        ) +        val inset = YuzuApplication.appContext.resources +            .getDimensionPixelSize(R.dimen.icon_inset) +        layerDrawable.setLayerInset(1, inset, inset, inset, inset)          val shortcut = ShortcutInfoCompat.Builder(YuzuApplication.appContext, holder.game.path)              .setShortLabel(holder.game.title)              .setIcon( -                IconCompat.createWithBitmap( -                    (holder.binding.imageGameScreen.drawable as BitmapDrawable).bitmap +                IconCompat.createWithAdaptiveBitmap( +                    layerDrawable.toBitmap(config = Bitmap.Config.ARGB_8888)                  )              )              .setIntent(openIntent) 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 c0fe596d7..9fe99fab1 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 @@ -6,9 +6,11 @@ package org.yuzu.yuzu_emu.utils  import android.graphics.Bitmap  import android.graphics.BitmapFactory  import android.widget.ImageView +import androidx.core.graphics.drawable.toBitmap  import androidx.core.graphics.drawable.toDrawable  import coil.ImageLoader  import coil.decode.DataSource +import coil.executeBlocking  import coil.fetch.DrawableResult  import coil.fetch.FetchResult  import coil.fetch.Fetcher @@ -74,4 +76,13 @@ object GameIconUtils {              .build()          imageLoader.enqueue(request)      } + +    fun getGameIcon(game: Game): Bitmap { +        val request = ImageRequest.Builder(YuzuApplication.appContext) +            .data(game) +            .error(R.drawable.default_icon) +            .build() +        return imageLoader.executeBlocking(request) +            .drawable!!.toBitmap(config = Bitmap.Config.ARGB_8888) +    }  } diff --git a/src/android/app/src/main/res/drawable/shortcut.xml b/src/android/app/src/main/res/drawable/shortcut.xml new file mode 100644 index 000000000..c749e5d72 --- /dev/null +++ b/src/android/app/src/main/res/drawable/shortcut.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + +    <item> +        <color android:color="@android:color/white" /> +    </item> +    <item android:id="@+id/shortcut_foreground"> +        <bitmap android:src="@drawable/default_icon" /> +    </item> + +</layer-list> diff --git a/src/android/app/src/main/res/values/dimens.xml b/src/android/app/src/main/res/values/dimens.xml index 00757e5e8..7b2296d95 100644 --- a/src/android/app/src/main/res/values/dimens.xml +++ b/src/android/app/src/main/res/values/dimens.xml @@ -12,6 +12,7 @@      <dimen name="spacing_refresh_end">72dp</dimen>      <dimen name="menu_width">256dp</dimen>      <dimen name="card_width">165dp</dimen> +    <dimen name="icon_inset">24dp</dimen>      <dimen name="dialog_margin">20dp</dimen>      <dimen name="elevated_app_bar">3dp</dimen> | 
