Browse Source
Merge pull request #12787 from t895/game-list-refresh
android: Only compare game contents for GameAdapter
pull/15/merge
liamwhite
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with
22 additions and
9 deletions
-
src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt
-
src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt
-
src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt
|
|
|
@ -14,15 +14,20 @@ import androidx.recyclerview.widget.RecyclerView |
|
|
|
* Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate |
|
|
|
* code used in every [RecyclerView]. |
|
|
|
* Type assigned to [Model] must inherit from [Object] in order to be compared properly. |
|
|
|
* @param exact Decides whether each item will be compared by reference or by their contents |
|
|
|
*/ |
|
|
|
abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>> : |
|
|
|
ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>()).build()) { |
|
|
|
abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>>( |
|
|
|
exact: Boolean = true |
|
|
|
) : ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>(exact)).build()) { |
|
|
|
override fun onBindViewHolder(holder: Holder, position: Int) = |
|
|
|
holder.bind(currentList[position]) |
|
|
|
|
|
|
|
private class DiffCallback<Model> : DiffUtil.ItemCallback<Model>() { |
|
|
|
private class DiffCallback<Model>(val exact: Boolean) : DiffUtil.ItemCallback<Model>() { |
|
|
|
override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { |
|
|
|
return oldItem === newItem |
|
|
|
if (exact) { |
|
|
|
return oldItem === newItem |
|
|
|
} |
|
|
|
return oldItem == newItem |
|
|
|
} |
|
|
|
|
|
|
|
@SuppressLint("DiffUtilEquals") |
|
|
|
|
|
|
|
@ -30,7 +30,7 @@ import org.yuzu.yuzu_emu.utils.GameIconUtils |
|
|
|
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder |
|
|
|
|
|
|
|
class GameAdapter(private val activity: AppCompatActivity) : |
|
|
|
AbstractDiffAdapter<Game, GameAdapter.GameViewHolder>() { |
|
|
|
AbstractDiffAdapter<Game, GameAdapter.GameViewHolder>(exact = false) { |
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { |
|
|
|
CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false) |
|
|
|
.also { return GameViewHolder(it) } |
|
|
|
|
|
|
|
@ -70,11 +70,19 @@ class Game( |
|
|
|
} |
|
|
|
|
|
|
|
override fun equals(other: Any?): Boolean { |
|
|
|
if (other !is Game) { |
|
|
|
return false |
|
|
|
} |
|
|
|
if (this === other) return true |
|
|
|
if (javaClass != other?.javaClass) return false |
|
|
|
|
|
|
|
other as Game |
|
|
|
|
|
|
|
if (title != other.title) return false |
|
|
|
if (path != other.path) return false |
|
|
|
if (programId != other.programId) return false |
|
|
|
if (developer != other.developer) return false |
|
|
|
if (version != other.version) return false |
|
|
|
if (isHomebrew != other.isHomebrew) return false |
|
|
|
|
|
|
|
return hashCode() == other.hashCode() |
|
|
|
return true |
|
|
|
} |
|
|
|
|
|
|
|
override fun hashCode(): Int { |
|
|
|
|