|
|
@ -0,0 +1,33 @@ |
|
|
|
|
|
// SPDX-FileCopyrightText: 2024 yuzu Emulator Project |
|
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later |
|
|
|
|
|
|
|
|
|
|
|
package org.yuzu.yuzu_emu.adapters |
|
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint |
|
|
|
|
|
import androidx.recyclerview.widget.AsyncDifferConfig |
|
|
|
|
|
import androidx.recyclerview.widget.DiffUtil |
|
|
|
|
|
import androidx.recyclerview.widget.ListAdapter |
|
|
|
|
|
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder |
|
|
|
|
|
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. |
|
|
|
|
|
*/ |
|
|
|
|
|
abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>> : |
|
|
|
|
|
ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>()).build()) { |
|
|
|
|
|
override fun onBindViewHolder(holder: Holder, position: Int) = |
|
|
|
|
|
holder.bind(currentList[position]) |
|
|
|
|
|
|
|
|
|
|
|
private class DiffCallback<Model> : DiffUtil.ItemCallback<Model>() { |
|
|
|
|
|
override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { |
|
|
|
|
|
return oldItem === newItem |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@SuppressLint("DiffUtilEquals") |
|
|
|
|
|
override fun areContentsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean { |
|
|
|
|
|
return oldItem == newItem |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |