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/DriverAdapter.kt96
1 files changed, 23 insertions, 73 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/DriverAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/DriverAdapter.kt
index d290a656c..ca353cea7 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/DriverAdapter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/DriverAdapter.kt
@@ -7,65 +7,34 @@ import android.text.TextUtils
7import android.view.LayoutInflater 7import android.view.LayoutInflater
8import android.view.View 8import android.view.View
9import android.view.ViewGroup 9import android.view.ViewGroup
10import androidx.recyclerview.widget.AsyncDifferConfig
11import androidx.recyclerview.widget.DiffUtil
12import androidx.recyclerview.widget.ListAdapter
13import androidx.recyclerview.widget.RecyclerView
14import org.yuzu.yuzu_emu.R
15import org.yuzu.yuzu_emu.databinding.CardDriverOptionBinding 10import org.yuzu.yuzu_emu.databinding.CardDriverOptionBinding
11import org.yuzu.yuzu_emu.model.Driver
16import org.yuzu.yuzu_emu.model.DriverViewModel 12import org.yuzu.yuzu_emu.model.DriverViewModel
17import org.yuzu.yuzu_emu.utils.GpuDriverHelper 13import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
18import org.yuzu.yuzu_emu.utils.GpuDriverMetadata
19 14
20class DriverAdapter(private val driverViewModel: DriverViewModel) : 15class DriverAdapter(private val driverViewModel: DriverViewModel) :
21 ListAdapter<Pair<String, GpuDriverMetadata>, DriverAdapter.DriverViewHolder>( 16 AbstractSingleSelectionList<Driver, DriverAdapter.DriverViewHolder>(
22 AsyncDifferConfig.Builder(DiffCallback()).build() 17 driverViewModel.driverList.value
23 ) { 18 ) {
24 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DriverViewHolder { 19 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DriverViewHolder {
25 val binding = 20 CardDriverOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
26 CardDriverOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false) 21 .also { return DriverViewHolder(it) }
27 return DriverViewHolder(binding)
28 }
29
30 override fun getItemCount(): Int = currentList.size
31
32 override fun onBindViewHolder(holder: DriverViewHolder, position: Int) =
33 holder.bind(currentList[position])
34
35 private fun onSelectDriver(position: Int) {
36 driverViewModel.setSelectedDriverIndex(position)
37 notifyItemChanged(driverViewModel.previouslySelectedDriver)
38 notifyItemChanged(driverViewModel.selectedDriver)
39 }
40
41 private fun onDeleteDriver(driverData: Pair<String, GpuDriverMetadata>, position: Int) {
42 if (driverViewModel.selectedDriver > position) {
43 driverViewModel.setSelectedDriverIndex(driverViewModel.selectedDriver - 1)
44 }
45 if (GpuDriverHelper.customDriverSettingData == driverData.second) {
46 driverViewModel.setSelectedDriverIndex(0)
47 }
48 driverViewModel.driversToDelete.add(driverData.first)
49 driverViewModel.removeDriver(driverData)
50 notifyItemRemoved(position)
51 notifyItemChanged(driverViewModel.selectedDriver)
52 } 22 }
53 23
54 inner class DriverViewHolder(val binding: CardDriverOptionBinding) : 24 inner class DriverViewHolder(val binding: CardDriverOptionBinding) :
55 RecyclerView.ViewHolder(binding.root) { 25 AbstractViewHolder<Driver>(binding) {
56 private lateinit var driverData: Pair<String, GpuDriverMetadata> 26 override fun bind(model: Driver) {
57
58 fun bind(driverData: Pair<String, GpuDriverMetadata>) {
59 this.driverData = driverData
60 val driver = driverData.second
61
62 binding.apply { 27 binding.apply {
63 radioButton.isChecked = driverViewModel.selectedDriver == bindingAdapterPosition 28 radioButton.isChecked = model.selected
64 root.setOnClickListener { 29 root.setOnClickListener {
65 onSelectDriver(bindingAdapterPosition) 30 selectItem(bindingAdapterPosition) { driverViewModel.onDriverSelected(it) }
66 } 31 }
67 buttonDelete.setOnClickListener { 32 buttonDelete.setOnClickListener {
68 onDeleteDriver(driverData, bindingAdapterPosition) 33 removeSelectableItem(
34 bindingAdapterPosition
35 ) { removedPosition: Int, selectedPosition: Int ->
36 driverViewModel.onDriverRemoved(removedPosition, selectedPosition)
37 }
69 } 38 }
70 39
71 // Delay marquee by 3s 40 // Delay marquee by 3s
@@ -80,38 +49,19 @@ class DriverAdapter(private val driverViewModel: DriverViewModel) :
80 }, 49 },
81 3000 50 3000
82 ) 51 )
83 if (driver.name == null) { 52 title.text = model.title
84 title.setText(R.string.system_gpu_driver) 53 version.text = model.version
85 description.text = "" 54 description.text = model.description
86 version.text = "" 55 if (model.description.isNotEmpty()) {
87 version.visibility = View.GONE
88 description.visibility = View.GONE
89 buttonDelete.visibility = View.GONE
90 } else {
91 title.text = driver.name
92 version.text = driver.version
93 description.text = driver.description
94 version.visibility = View.VISIBLE 56 version.visibility = View.VISIBLE
95 description.visibility = View.VISIBLE 57 description.visibility = View.VISIBLE
96 buttonDelete.visibility = View.VISIBLE 58 buttonDelete.visibility = View.VISIBLE
59 } else {
60 version.visibility = View.GONE
61 description.visibility = View.GONE
62 buttonDelete.visibility = View.GONE
97 } 63 }
98 } 64 }
99 } 65 }
100 } 66 }
101
102 private class DiffCallback : DiffUtil.ItemCallback<Pair<String, GpuDriverMetadata>>() {
103 override fun areItemsTheSame(
104 oldItem: Pair<String, GpuDriverMetadata>,
105 newItem: Pair<String, GpuDriverMetadata>
106 ): Boolean {
107 return oldItem.first == newItem.first
108 }
109
110 override fun areContentsTheSame(
111 oldItem: Pair<String, GpuDriverMetadata>,
112 newItem: Pair<String, GpuDriverMetadata>
113 ): Boolean {
114 return oldItem.second == newItem.second
115 }
116 }
117} 67}