From 86d26914a2e7b250d346a8aad84783aef1a6850b Mon Sep 17 00:00:00 2001 From: t895 Date: Tue, 12 Dec 2023 17:06:47 -0500 Subject: [PATCH] android: Rework InstallableProperty view with icon --- .../adapters/GamePropertiesAdapter.kt | 13 ++- .../fragments/GamePropertiesFragment.kt | 1 + .../org/yuzu/yuzu_emu/model/GameProperties.kt | 8 +- .../app/src/main/res/drawable/ic_save.xml | 9 +- .../layout-w1000dp/card_installable_icon.xml | 82 +++++++++++++++++ .../main/res/layout/card_installable_icon.xml | 89 +++++++++++++++++++ 6 files changed, 191 insertions(+), 11 deletions(-) create mode 100644 src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml create mode 100644 src/android/app/src/main/res/layout/card_installable_icon.xml diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt index ff6270fa8..95841d786 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt @@ -14,7 +14,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.RecyclerView import kotlinx.coroutines.launch -import org.yuzu.yuzu_emu.databinding.CardInstallableBinding +import org.yuzu.yuzu_emu.databinding.CardInstallableIconBinding import org.yuzu.yuzu_emu.databinding.CardSimpleOutlinedBinding import org.yuzu.yuzu_emu.model.GameProperty import org.yuzu.yuzu_emu.model.InstallableProperty @@ -42,7 +42,7 @@ class GamePropertiesAdapter( } else -> InstallablePropertyViewHolder( - CardInstallableBinding.inflate( + CardInstallableIconBinding.inflate( inflater, parent, false @@ -107,13 +107,20 @@ class GamePropertiesAdapter( } } - inner class InstallablePropertyViewHolder(val binding: CardInstallableBinding) : + inner class InstallablePropertyViewHolder(val binding: CardInstallableIconBinding) : GamePropertyViewHolder(binding.root) { override fun bind(property: GameProperty) { val installableProperty = property as InstallableProperty binding.title.setText(installableProperty.titleId) binding.description.setText(installableProperty.descriptionId) + binding.icon.setImageDrawable( + ResourcesCompat.getDrawable( + binding.icon.context.resources, + installableProperty.iconId, + binding.icon.context.theme + ) + ) if (installableProperty.install != null) { binding.buttonInstall.visibility = View.VISIBLE diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt index 6ede3f85c..b1d3c0040 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt @@ -194,6 +194,7 @@ class GamePropertiesFragment : Fragment() { InstallableProperty( R.string.save_data, R.string.save_data_description, + R.drawable.ic_save, { MessageDialogFragment.newInstance( requireActivity(), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProperties.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProperties.kt index bb3df5bd0..0135a95be 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProperties.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProperties.kt @@ -10,17 +10,18 @@ import kotlinx.coroutines.flow.StateFlow interface GameProperty { @get:StringRes val titleId: Int - get() = -1 @get:StringRes val descriptionId: Int - get() = -1 + + @get:DrawableRes + val iconId: Int } data class SubmenuProperty( override val titleId: Int, override val descriptionId: Int, - @DrawableRes val iconId: Int, + override val iconId: Int, val details: (() -> String)? = null, val detailsFlow: StateFlow? = null, val action: () -> Unit @@ -29,6 +30,7 @@ data class SubmenuProperty( data class InstallableProperty( override val titleId: Int, override val descriptionId: Int, + override val iconId: Int, val install: (() -> Unit)? = null, val export: (() -> Unit)? = null ) : GameProperty diff --git a/src/android/app/src/main/res/drawable/ic_save.xml b/src/android/app/src/main/res/drawable/ic_save.xml index a9af3d9cf..5acc2bbab 100644 --- a/src/android/app/src/main/res/drawable/ic_save.xml +++ b/src/android/app/src/main/res/drawable/ic_save.xml @@ -1,10 +1,9 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:fillColor="?attr/colorControlNormal" + android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z" /> diff --git a/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml b/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml new file mode 100644 index 000000000..59ee1aad3 --- /dev/null +++ b/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + +