mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-28 17:07:07 +02:00
[android,ui] driver management: fixed driver add/removal unsync
This commit is contained in:
parent
c5b519380c
commit
acc3f87891
2 changed files with 26 additions and 8 deletions
|
|
@ -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())
|
val selectedPosition = adapter.currentList
|
||||||
adapter.selectItem(adapter.currentList.indices.last)
|
.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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
val driverIndex = removedPosition - 1
|
||||||
driverData.removeAt(removedPosition - 1)
|
if (driverIndex !in driverData.indices) {
|
||||||
onDriverSelected(selectedPosition)
|
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…
Add table
Add a link
Reference in a new issue