Browse Source

[android,ui] driver management: uninstall and refresh upon install hotfix (#3750)

To fix orphan fragments' black flicker transitions, these fragments were bounded to SettingsSubscreenActivity.
Since driver removal is queued for when leaving driver screen, but new activity dies too soon, old uninstall was being cancelled.
Changed to uninstall directly upon leaving screen. Also fixed the driver list refresh right after driver installation (prolly compromised for the same transition reason).

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3750
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Co-authored-by: xbzk <xbzk@eden-emu.dev>
Co-committed-by: xbzk <xbzk@eden-emu.dev>
pull/3753/head
xbzk 5 days ago
committed by crueter
parent
commit
2650d22057
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 11
      src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt
  2. 7
      src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt

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

@ -142,6 +142,17 @@ class DriverManagerFragment : Fragment() {
driverViewModel.onCloseDriverManager(args.game) driverViewModel.onCloseDriverManager(args.game)
} }
override fun onResume() {
super.onResume()
refreshDriverList()
}
private fun refreshDriverList() {
driverViewModel.reloadDriverData()
(binding.listDrivers.adapter as? DriverAdapter)
?.replaceList(driverViewModel.driverList.value)
}
private fun setInsets() = private fun setInsets() =
ViewCompat.setOnApplyWindowInsetsListener( ViewCompat.setOnApplyWindowInsetsListener(
binding.root binding.root

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

@ -71,6 +71,8 @@ class DriverViewModel : ViewModel() {
fun reloadDriverData() { fun reloadDriverData() {
_areDriversLoading.value = true _areDriversLoading.value = true
driverData = GpuDriverHelper.getDrivers() driverData = GpuDriverHelper.getDrivers()
.filterNot { driversToDelete.contains(it.first) }
.toMutableList()
updateDriverList() updateDriverList()
_areDriversLoading.value = false _areDriversLoading.value = false
} }
@ -167,6 +169,7 @@ class DriverViewModel : ViewModel() {
fun onCloseDriverManager(game: Game?) { fun onCloseDriverManager(game: Game?) {
_isDeletingDrivers.value = true _isDeletingDrivers.value = true
try {
updateDriverNameForGame(game) updateDriverNameForGame(game)
if (game == null) { if (game == null) {
NativeConfig.saveGlobalConfig() NativeConfig.saveGlobalConfig()
@ -176,8 +179,6 @@ class DriverViewModel : ViewModel() {
NativeConfig.reloadGlobalConfig() NativeConfig.reloadGlobalConfig()
} }
viewModelScope.launch {
withContext(Dispatchers.IO) {
driversToDelete.forEach { driversToDelete.forEach {
val driver = File(it) val driver = File(it)
if (driver.exists()) { if (driver.exists()) {
@ -185,10 +186,10 @@ class DriverViewModel : ViewModel() {
} }
} }
driversToDelete.clear() driversToDelete.clear()
} finally {
_isDeletingDrivers.value = false _isDeletingDrivers.value = false
} }
} }
}
// It is the Emulation Fragment's responsibility to load per-game settings so that this function // It is the Emulation Fragment's responsibility to load per-game settings so that this function
// knows what driver to load. // knows what driver to load.

Loading…
Cancel
Save