summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.recyclerview.widget.AsyncDifferConfig
-import androidx.recyclerview.widget.DiffUtil
-import androidx.recyclerview.widget.ListAdapter
-import androidx.recyclerview.widget.RecyclerView
-import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.databinding.CardDriverOptionBinding
+import org.yuzu.yuzu_emu.model.Driver
import org.yuzu.yuzu_emu.model.DriverViewModel
-import org.yuzu.yuzu_emu.utils.GpuDriverHelper
-import org.yuzu.yuzu_emu.utils.GpuDriverMetadata
+import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
class DriverAdapter(private val driverViewModel: DriverViewModel) :
- ListAdapter<Pair<String, GpuDriverMetadata>, DriverAdapter.DriverViewHolder>(
- AsyncDifferConfig.Builder(DiffCallback()).build()
+ AbstractSingleSelectionList<Driver, DriverAdapter.DriverViewHolder>(
+ driverViewModel.driverList.value
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DriverViewHolder {
- val binding =
- CardDriverOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
- return DriverViewHolder(binding)
- }
-
- override fun getItemCount(): Int = currentList.size
-
- override fun onBindViewHolder(holder: DriverViewHolder, position: Int) =
- holder.bind(currentList[position])
-
- private fun onSelectDriver(position: Int) {
- driverViewModel.setSelectedDriverIndex(position)
- notifyItemChanged(driverViewModel.previouslySelectedDriver)
- notifyItemChanged(driverViewModel.selectedDriver)
- }
-
- private fun onDeleteDriver(driverData: Pair<String, GpuDriverMetadata>, position: Int) {
- if (driverViewModel.selectedDriver > position) {
- driverViewModel.setSelectedDriverIndex(driverViewModel.selectedDriver - 1)
- }
- if (GpuDriverHelper.customDriverSettingData == driverData.second) {
- driverViewModel.setSelectedDriverIndex(0)
- }
- driverViewModel.driversToDelete.add(driverData.first)
- driverViewModel.removeDriver(driverData)
- notifyItemRemoved(position)
- notifyItemChanged(driverViewModel.selectedDriver)
+ CardDriverOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ .also { return DriverViewHolder(it) }
}
inner class DriverViewHolder(val binding: CardDriverOptionBinding) :
- RecyclerView.ViewHolder(binding.root) {
- private lateinit var driverData: Pair<String, GpuDriverMetadata>
-
- fun bind(driverData: Pair<String, GpuDriverMetadata>) {
- this.driverData = driverData
- val driver = driverData.second
-
+ AbstractViewHolder<Driver>(binding) {
+ override fun bind(model: Driver) {
binding.apply {
- radioButton.isChecked = driverViewModel.selectedDriver == bindingAdapterPosition
+ radioButton.isChecked = model.selected
root.setOnClickListener {
- onSelectDriver(bindingAdapterPosition)
+ selectItem(bindingAdapterPosition) { driverViewModel.onDriverSelected(it) }
}
buttonDelete.setOnClickListener {
- onDeleteDriver(driverData, bindingAdapterPosition)
+ removeSelectableItem(
+ bindingAdapterPosition
+ ) { removedPosition: Int, selectedPosition: Int ->
+ driverViewModel.onDriverRemoved(removedPosition, selectedPosition)
+ }
}
// Delay marquee by 3s
@@ -80,38 +49,19 @@ class DriverAdapter(private val driverViewModel: DriverViewModel) :
},
3000
)
- if (driver.name == null) {
- title.setText(R.string.system_gpu_driver)
- description.text = ""
- version.text = ""
- version.visibility = View.GONE
- description.visibility = View.GONE
- buttonDelete.visibility = View.GONE
- } else {
- title.text = driver.name
- version.text = driver.version
- description.text = driver.description
+ title.text = model.title
+ version.text = model.version
+ description.text = model.description
+ if (model.description.isNotEmpty()) {
version.visibility = View.VISIBLE
description.visibility = View.VISIBLE
buttonDelete.visibility = View.VISIBLE
+ } else {
+ version.visibility = View.GONE
+ description.visibility = View.GONE
+ buttonDelete.visibility = View.GONE
}
}
}
}
-
- private class DiffCallback : DiffUtil.ItemCallback<Pair<String, GpuDriverMetadata>>() {
- override fun areItemsTheSame(
- oldItem: Pair<String, GpuDriverMetadata>,
- newItem: Pair<String, GpuDriverMetadata>
- ): Boolean {
- return oldItem.first == newItem.first
- }
-
- override fun areContentsTheSame(
- oldItem: Pair<String, GpuDriverMetadata>,
- newItem: Pair<String, GpuDriverMetadata>
- ): Boolean {
- return oldItem.second == newItem.second
- }
- }
}