summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt33
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/viewholder/AbstractViewHolder.kt18
2 files changed, 51 insertions, 0 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
new file mode 100644
index 000000000..f006f9e3d
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/AbstractDiffAdapter.kt
@@ -0,0 +1,33 @@
1// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4package org.yuzu.yuzu_emu.adapters
5
6import android.annotation.SuppressLint
7import androidx.recyclerview.widget.AsyncDifferConfig
8import androidx.recyclerview.widget.DiffUtil
9import androidx.recyclerview.widget.ListAdapter
10import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
11import androidx.recyclerview.widget.RecyclerView
12
13/**
14 * Generic adapter that implements an [AsyncDifferConfig] and covers some of the basic boilerplate
15 * code used in every [RecyclerView].
16 * Type assigned to [Model] must inherit from [Object] in order to be compared properly.
17 */
18abstract class AbstractDiffAdapter<Model : Any, Holder : AbstractViewHolder<Model>> :
19 ListAdapter<Model, Holder>(AsyncDifferConfig.Builder(DiffCallback<Model>()).build()) {
20 override fun onBindViewHolder(holder: Holder, position: Int) =
21 holder.bind(currentList[position])
22
23 private class DiffCallback<Model> : DiffUtil.ItemCallback<Model>() {
24 override fun areItemsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean {
25 return oldItem === newItem
26 }
27
28 @SuppressLint("DiffUtilEquals")
29 override fun areContentsTheSame(oldItem: Model & Any, newItem: Model & Any): Boolean {
30 return oldItem == newItem
31 }
32 }
33}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/viewholder/AbstractViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/viewholder/AbstractViewHolder.kt
new file mode 100644
index 000000000..7101ad434
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/viewholder/AbstractViewHolder.kt
@@ -0,0 +1,18 @@
1// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4package org.yuzu.yuzu_emu.viewholder
5
6import androidx.recyclerview.widget.RecyclerView
7import androidx.viewbinding.ViewBinding
8import org.yuzu.yuzu_emu.adapters.AbstractDiffAdapter
9import org.yuzu.yuzu_emu.adapters.AbstractListAdapter
10
11/**
12 * [RecyclerView.ViewHolder] meant to work together with a [AbstractDiffAdapter] or a
13 * [AbstractListAdapter] so we can run [bind] on each list item without needing a manual hookup.
14 */
15abstract class AbstractViewHolder<Model>(binding: ViewBinding) :
16 RecyclerView.ViewHolder(binding.root) {
17 abstract fun bind(model: Model)
18}