Browse Source

[android,ui] driver management: fixed driver add/removal unsync

pull/3757/head
xbzk 4 days ago
committed by crueter
parent
commit
acc3f87891
  1. 13
      src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt
  2. 21
      src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt

13
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt

@ -29,7 +29,6 @@ import org.yuzu.yuzu_emu.databinding.FragmentDriverManagerBinding
import org.yuzu.yuzu_emu.features.settings.model.Settings import org.yuzu.yuzu_emu.features.settings.model.Settings
import org.yuzu.yuzu_emu.features.settings.model.StringSetting import org.yuzu.yuzu_emu.features.settings.model.StringSetting
import org.yuzu.yuzu_emu.features.settings.ui.SettingsSubscreen import org.yuzu.yuzu_emu.features.settings.ui.SettingsSubscreen
import org.yuzu.yuzu_emu.model.Driver.Companion.toDriver
import org.yuzu.yuzu_emu.model.DriverViewModel import org.yuzu.yuzu_emu.model.DriverViewModel
import org.yuzu.yuzu_emu.model.HomeViewModel import org.yuzu.yuzu_emu.model.HomeViewModel
import org.yuzu.yuzu_emu.utils.FileUtil import org.yuzu.yuzu_emu.utils.FileUtil
@ -216,19 +215,23 @@ class DriverManagerFragment : Fragment() {
val driverData = GpuDriverHelper.getMetadataFromZip(driverFile) val driverData = GpuDriverHelper.getMetadataFromZip(driverFile)
val driverInList = val driverInList =
driverViewModel.driverData.firstOrNull { it.second == driverData }
driverViewModel.driverData.firstOrNull {
it.first == driverPath || it.second == driverData
}
if (driverInList != null) { if (driverInList != null) {
return@newInstance getString(R.string.driver_already_installed) return@newInstance getString(R.string.driver_already_installed)
} else { } else {
driverViewModel.onDriverAdded(Pair(driverPath, driverData)) driverViewModel.onDriverAdded(Pair(driverPath, driverData))
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
if (_binding != null) { if (_binding != null) {
refreshDriverList()
val adapter = binding.listDrivers.adapter as DriverAdapter val adapter = binding.listDrivers.adapter as DriverAdapter
adapter.addItem(driverData.toDriver())
adapter.selectItem(adapter.currentList.indices.last)
val selectedPosition = adapter.currentList
.indexOfFirst { it.selected }
.let { if (it == -1) 0 else it }
driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global) driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
binding.listDrivers binding.listDrivers
.smoothScrollToPosition(adapter.currentList.indices.last)
.smoothScrollToPosition(selectedPosition)
} }
} }
} }

21
src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt

@ -154,15 +154,30 @@ class DriverViewModel : ViewModel() {
} }
fun onDriverRemoved(removedPosition: Int, selectedPosition: Int) { fun onDriverRemoved(removedPosition: Int, selectedPosition: Int) {
driversToDelete.add(driverData[removedPosition - 1].first)
driverData.removeAt(removedPosition - 1)
onDriverSelected(selectedPosition)
val driverIndex = removedPosition - 1
if (driverIndex !in driverData.indices) {
updateDriverList()
return
}
driversToDelete.add(driverData[driverIndex].first)
driverData.removeAt(driverIndex)
val safeSelectedPosition = selectedPosition.coerceIn(0, driverData.size)
onDriverSelected(safeSelectedPosition)
} }
fun onDriverAdded(driver: Pair<String, GpuDriverMetadata>) { fun onDriverAdded(driver: Pair<String, GpuDriverMetadata>) {
if (driversToDelete.contains(driver.first)) { if (driversToDelete.contains(driver.first)) {
driversToDelete.remove(driver.first) driversToDelete.remove(driver.first)
} }
val existingDriverIndex = driverData.indexOfFirst {
it.first == driver.first || it.second == driver.second
}
if (existingDriverIndex != -1) {
onDriverSelected(existingDriverIndex + 1)
return
}
driverData.add(driver) driverData.add(driver)
onDriverSelected(driverData.size) onDriverSelected(driverData.size)
} }

Loading…
Cancel
Save