android: Only compare game contents for GameAdapter
This commit is contained in:
		| @@ -14,16 +14,21 @@ import androidx.recyclerview.widget.RecyclerView | |||||||
|  * Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate |  * Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate | ||||||
|  * code used in every [RecyclerView]. |  * code used in every [RecyclerView]. | ||||||
|  * Type assigned to [Model] must inherit from [Object] in order to be compared properly. |  * 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>> : | abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>>( | ||||||
|     ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>()).build()) { |     exact: Boolean = true | ||||||
|  | ) : ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>(exact)).build()) { | ||||||
|     override fun onBindViewHolder(holder: Holder, position: Int) = |     override fun onBindViewHolder(holder: Holder, position: Int) = | ||||||
|         holder.bind(currentList[position]) |         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 { |         override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { | ||||||
|  |             if (exact) { | ||||||
|                 return oldItem === newItem |                 return oldItem === newItem | ||||||
|             } |             } | ||||||
|  |             return oldItem == newItem | ||||||
|  |         } | ||||||
|  |  | ||||||
|         @SuppressLint("DiffUtilEquals") |         @SuppressLint("DiffUtilEquals") | ||||||
|         override fun areContentsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { |         override fun areContentsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ import org.yuzu.yuzu_emu.utils.GameIconUtils | |||||||
| import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder | import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder | ||||||
|  |  | ||||||
| class GameAdapter(private val activity: AppCompatActivity) : | class GameAdapter(private val activity: AppCompatActivity) : | ||||||
|     AbstractDiffAdapter<Game, GameAdapter.GameViewHolder>() { |     AbstractDiffAdapter<Game, GameAdapter.GameViewHolder>(exact = false) { | ||||||
|     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { |     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder { | ||||||
|         CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false) |         CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false) | ||||||
|             .also { return GameViewHolder(it) } |             .also { return GameViewHolder(it) } | ||||||
|   | |||||||
| @@ -70,11 +70,19 @@ class Game( | |||||||
|         } |         } | ||||||
|  |  | ||||||
|     override fun equals(other: Any?): Boolean { |     override fun equals(other: Any?): Boolean { | ||||||
|         if (other !is Game) { |         if (this === other) return true | ||||||
|             return false |         if (javaClass != other?.javaClass) return false | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return hashCode() == other.hashCode() |         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 true | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     override fun hashCode(): Int { |     override fun hashCode(): Int { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user