From 2650d220575d3a62243b6eaaa5091475966e9386 Mon Sep 17 00:00:00 2001 From: xbzk Date: Thu, 19 Mar 2026 03:54:13 +0100 Subject: [PATCH] [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 Co-authored-by: xbzk Co-committed-by: xbzk --- .../fragments/DriverManagerFragment.kt | 11 ++++++ .../yuzu/yuzu_emu/model/DriverViewModel.kt | 35 ++++++++++--------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt index 89a6362dc6..877097dc80 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverManagerFragment.kt @@ -142,6 +142,17 @@ class DriverManagerFragment : Fragment() { 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() = ViewCompat.setOnApplyWindowInsetsListener( binding.root diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt index cd5792b33a..fc7fbc9bfc 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/DriverViewModel.kt @@ -71,6 +71,8 @@ class DriverViewModel : ViewModel() { fun reloadDriverData() { _areDriversLoading.value = true driverData = GpuDriverHelper.getDrivers() + .filterNot { driversToDelete.contains(it.first) } + .toMutableList() updateDriverList() _areDriversLoading.value = false } @@ -167,26 +169,25 @@ class DriverViewModel : ViewModel() { fun onCloseDriverManager(game: Game?) { _isDeletingDrivers.value = true - updateDriverNameForGame(game) - if (game == null) { - NativeConfig.saveGlobalConfig() - } else { - NativeConfig.savePerGameConfig() - NativeConfig.unloadPerGameConfig() - NativeConfig.reloadGlobalConfig() - } + try { + updateDriverNameForGame(game) + if (game == null) { + NativeConfig.saveGlobalConfig() + } else { + NativeConfig.savePerGameConfig() + NativeConfig.unloadPerGameConfig() + NativeConfig.reloadGlobalConfig() + } - viewModelScope.launch { - withContext(Dispatchers.IO) { - driversToDelete.forEach { - val driver = File(it) - if (driver.exists()) { - driver.delete() - } + driversToDelete.forEach { + val driver = File(it) + if (driver.exists()) { + driver.delete() } - driversToDelete.clear() - _isDeletingDrivers.value = false } + driversToDelete.clear() + } finally { + _isDeletingDrivers.value = false } }