|
|
@@ -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
|
|
|
- }
|
|
|
- }
|
|
|
}
|