mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	android: Refactor DriverAdapter to use AbstractSingleSelectionList
This commit is contained in:
		
							parent
							
								
									b17db2b462
								
							
						
					
					
						commit
						93239f191a
					
				| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user