Merge pull request #12787 from t895/game-list-refresh
android: Only compare game contents for GameAdapter
This commit is contained in:
		@@ -14,15 +14,20 @@ 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 {
 | 
				
			||||||
            return oldItem === newItem
 | 
					            if (exact) {
 | 
				
			||||||
 | 
					                return oldItem === newItem
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return oldItem == newItem
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @SuppressLint("DiffUtilEquals")
 | 
					        @SuppressLint("DiffUtilEquals")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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