diff options
| author | 2024-01-25 14:19:32 -0500 | |
|---|---|---|
| committer | 2024-01-25 14:19:32 -0500 | |
| commit | 6e67b25af902868d1eb6abba6d1c991816a515f7 (patch) | |
| tree | b94836556db2642a12b399eacb17c5ec034693b1 /src | |
| parent | Merge pull request #12786 from t895/driver-overlay (diff) | |
| parent | android: Only compare game contents for GameAdapter (diff) | |
| download | yuzu-6e67b25af902868d1eb6abba6d1c991816a515f7.tar.gz yuzu-6e67b25af902868d1eb6abba6d1c991816a515f7.tar.xz yuzu-6e67b25af902868d1eb6abba6d1c991816a515f7.zip | |
Merge pull request #12787 from t895/game-list-refresh
android: Only compare game contents for GameAdapter
Diffstat (limited to 'src')
3 files changed, 22 insertions, 9 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt index f006f9e3d..0ab1b46c3 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt | |||
| @@ -14,15 +14,20 @@ import androidx.recyclerview.widget.RecyclerView | |||
| 14 | * Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate | 14 | * Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate |
| 15 | * code used in every [RecyclerView]. | 15 | * code used in every [RecyclerView]. |
| 16 | * Type assigned to [Model] must inherit from [Object] in order to be compared properly. | 16 | * Type assigned to [Model] must inherit from [Object] in order to be compared properly. |
| 17 | * @param exact Decides whether each item will be compared by reference or by their contents | ||
| 17 | */ | 18 | */ |
| 18 | abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>> : | 19 | abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>>( |
| 19 | ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>()).build()) { | 20 | exact: Boolean = true |
| 21 | ) : ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>(exact)).build()) { | ||
| 20 | override fun onBindViewHolder(holder: Holder, position: Int) = | 22 | override fun onBindViewHolder(holder: Holder, position: Int) = |
| 21 | holder.bind(currentList[position]) | 23 | holder.bind(currentList[position]) |
| 22 | 24 | ||
| 23 | private class DiffCallback<Model> : DiffUtil.ItemCallback<Model>() { | 25 | private class DiffCallback<Model>(val exact: Boolean) : DiffUtil.ItemCallback<Model>() { |
| 24 | override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { | 26 | override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { |
| 25 | return oldItem === newItem | 27 | if (exact) { |
| 28 | return oldItem === newItem | ||
| 29 | } | ||
| 30 | return oldItem == newItem | ||
| 26 | } | 31 | } |
| 27 | 32 | ||
| 28 | @SuppressLint("DiffUtilEquals") | 33 | @SuppressLint("DiffUtilEquals") |
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 b4f4d950f..85c8249e6 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 | |||
| @@ -30,7 +30,7 @@ import org.yuzu.yuzu_emu.utils.GameIconUtils | |||
| 30 | import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder | 30 | import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder |
| 31 | 31 | ||
| 32 | class GameAdapter(private val activity: AppCompatActivity) : | 32 | class GameAdapter(private val activity: AppCompatActivity) : |
| 33 | AbstractDiffAdapter<Game, GameAdapter.GameViewHolder>() { | 33 | AbstractDiffAdapter<Game, GameAdapter.GameViewHolder>(exact = false) { |
| 34 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { | 34 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { |
| 35 | CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false) | 35 | CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false) |
| 36 | .also { return GameViewHolder(it) } | 36 | .also { return GameViewHolder(it) } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt index c8a4a2d17..6859b7780 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt | |||
| @@ -70,11 +70,19 @@ class Game( | |||
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | override fun equals(other: Any?): Boolean { | 72 | override fun equals(other: Any?): Boolean { |
| 73 | if (other !is Game) { | 73 | if (this === other) return true |
| 74 | return false | 74 | if (javaClass != other?.javaClass) return false |
| 75 | } | 75 | |
| 76 | other as Game | ||
| 77 | |||
| 78 | if (title != other.title) return false | ||
| 79 | if (path != other.path) return false | ||
| 80 | if (programId != other.programId) return false | ||
| 81 | if (developer != other.developer) return false | ||
| 82 | if (version != other.version) return false | ||
| 83 | if (isHomebrew != other.isHomebrew) return false | ||
| 76 | 84 | ||
| 77 | return hashCode() == other.hashCode() | 85 | return true |
| 78 | } | 86 | } |
| 79 | 87 | ||
| 80 | override fun hashCode(): Int { | 88 | override fun hashCode(): Int { |