From 82c845dc2fef9ab29baa9fb0c08131a16384cd0f Mon Sep 17 00:00:00 2001
From: Charles Lombardo <clombardo169@gmail.com>
Date: Fri, 13 Oct 2023 13:50:38 -0400
Subject: [PATCH] android: Fix incorrect assumption for driver installation
 validation

The driver was assumed to be installed at this point before I made a refactor. Now we just check if the copy operation was successful and delete the file if it fails.
---
 .../fragments/DriverManagerFragment.kt        | 25 ++++++++++---------
 1 file changed, 13 insertions(+), 12 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 10b1d35476..df21d74b2c 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
@@ -26,6 +26,7 @@ import org.yuzu.yuzu_emu.model.DriverViewModel
 import org.yuzu.yuzu_emu.model.HomeViewModel
 import org.yuzu.yuzu_emu.utils.FileUtil
 import org.yuzu.yuzu_emu.utils.GpuDriverHelper
+import java.io.File
 import java.io.IOException
 
 class DriverManagerFragment : Fragment() {
@@ -154,29 +155,29 @@ class DriverManagerFragment : Fragment() {
                 R.string.installing_driver,
                 false
             ) {
+                val driverPath =
+                    "${GpuDriverHelper.driverStoragePath}/${FileUtil.getFilename(result)}"
+                val driverFile = File(driverPath)
+
                 // Ignore file exceptions when a user selects an invalid zip
                 try {
-                    GpuDriverHelper.copyDriverToInternalStorage(result)
+                    if (!GpuDriverHelper.copyDriverToInternalStorage(result)) {
+                        throw IOException("Driver failed validation!")
+                    }
                 } catch (_: IOException) {
+                    if (driverFile.exists()) {
+                        driverFile.delete()
+                    }
                     return@newInstance getString(R.string.select_gpu_driver_error)
                 }
 
-                val driverData = GpuDriverHelper.customDriverData
-                if (driverData.name == null) {
-                    return@newInstance getString(R.string.select_gpu_driver_error)
-                }
-
+                val driverData = GpuDriverHelper.getMetadataFromZip(driverFile)
                 val driverInList =
                     driverViewModel.driverList.value.firstOrNull { it.second == driverData }
                 if (driverInList != null) {
                     return@newInstance getString(R.string.driver_already_installed)
                 } else {
-                    driverViewModel.addDriver(
-                        Pair(
-                            "${GpuDriverHelper.driverStoragePath}/${FileUtil.getFilename(result)}",
-                            driverData
-                        )
-                    )
+                    driverViewModel.addDriver(Pair(driverPath, driverData))
                     driverViewModel.setNewDriverInstalled(true)
                 }
                 return@newInstance Any()