Merge pull request #11506 from t895/icon-fix
android: Use resource as shortcut intermediary
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										11
									
								
								src/android/app/src/main/res/drawable/shortcut.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/android/app/src/main/res/drawable/shortcut.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -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> | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user