forked from suyu/suyu
android: Refactor DriverAdapter to use AbstractSingleSelectionList
This commit is contained in:
parent
b17db2b462
commit
93239f191a
1 changed files with 23 additions and 73 deletions
|
@ -7,65 +7,34 @@ import android.text.TextUtils
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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.databinding.CardDriverOptionBinding
|
||||||
|
import org.yuzu.yuzu_emu.model.Driver
|
||||||
import org.yuzu.yuzu_emu.model.DriverViewModel
|
import org.yuzu.yuzu_emu.model.DriverViewModel
|
||||||
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
|
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
|
||||||
import org.yuzu.yuzu_emu.utils.GpuDriverMetadata
|
|
||||||
|
|
||||||
class DriverAdapter(private val driverViewModel: DriverViewModel) :
|
class DriverAdapter(private val driverViewModel: DriverViewModel) :
|
||||||
ListAdapter<Pair<String, GpuDriverMetadata>, DriverAdapter.DriverViewHolder>(
|
AbstractSingleSelectionList<Driver, DriverAdapter.DriverViewHolder>(
|
||||||
AsyncDifferConfig.Builder(DiffCallback()).build()
|
driverViewModel.driverList.value
|
||||||
) {
|
) {
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DriverViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DriverViewHolder {
|
||||||
val binding =
|
CardDriverOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
CardDriverOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
.also { return DriverViewHolder(it) }
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class DriverViewHolder(val binding: CardDriverOptionBinding) :
|
inner class DriverViewHolder(val binding: CardDriverOptionBinding) :
|
||||||
RecyclerView.ViewHolder(binding.root) {
|
AbstractViewHolder<Driver>(binding) {
|
||||||
private lateinit var driverData: Pair<String, GpuDriverMetadata>
|
override fun bind(model: Driver) {
|
||||||
|
|
||||||
fun bind(driverData: Pair<String, GpuDriverMetadata>) {
|
|
||||||
this.driverData = driverData
|
|
||||||
val driver = driverData.second
|
|
||||||
|
|
||||||
binding.apply {
|
binding.apply {
|
||||||
radioButton.isChecked = driverViewModel.selectedDriver == bindingAdapterPosition
|
radioButton.isChecked = model.selected
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
onSelectDriver(bindingAdapterPosition)
|
selectItem(bindingAdapterPosition) { driverViewModel.onDriverSelected(it) }
|
||||||
}
|
}
|
||||||
buttonDelete.setOnClickListener {
|
buttonDelete.setOnClickListener {
|
||||||
onDeleteDriver(driverData, bindingAdapterPosition)
|
removeSelectableItem(
|
||||||
|
bindingAdapterPosition
|
||||||
|
) { removedPosition: Int, selectedPosition: Int ->
|
||||||
|
driverViewModel.onDriverRemoved(removedPosition, selectedPosition)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delay marquee by 3s
|
// Delay marquee by 3s
|
||||||
|
@ -80,38 +49,19 @@ class DriverAdapter(private val driverViewModel: DriverViewModel) :
|
||||||
},
|
},
|
||||||
3000
|
3000
|
||||||
)
|
)
|
||||||
if (driver.name == null) {
|
title.text = model.title
|
||||||
title.setText(R.string.system_gpu_driver)
|
version.text = model.version
|
||||||
description.text = ""
|
description.text = model.description
|
||||||
version.text = ""
|
if (model.description.isNotEmpty()) {
|
||||||
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
|
|
||||||
version.visibility = View.VISIBLE
|
version.visibility = View.VISIBLE
|
||||||
description.visibility = View.VISIBLE
|
description.visibility = View.VISIBLE
|
||||||
buttonDelete.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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue