android: Convert GpuDriverHelper to Kotlin
This commit is contained in:
		| @@ -1,130 +0,0 @@ | |||||||
| package org.yuzu.yuzu_emu.utils; |  | ||||||
|  |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
|  |  | ||||||
| import org.yuzu.yuzu_emu.NativeLibrary; |  | ||||||
|  |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileInputStream; |  | ||||||
| import java.io.FileOutputStream; |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.util.zip.ZipEntry; |  | ||||||
| import java.util.zip.ZipInputStream; |  | ||||||
|  |  | ||||||
| public class GpuDriverHelper { |  | ||||||
|     private static final String META_JSON_FILENAME = "meta.json"; |  | ||||||
|     private static final String DRIVER_INTERNAL_FILENAME = "gpu_driver.zip"; |  | ||||||
|     private static String fileRedirectionPath; |  | ||||||
|     private static String driverInstallationPath; |  | ||||||
|     private static String hookLibPath; |  | ||||||
|  |  | ||||||
|     private static void unzip(String zipFilePath, String destDir) throws IOException { |  | ||||||
|         File dir = new File(destDir); |  | ||||||
|  |  | ||||||
|         // Create output directory if it doesn't exist |  | ||||||
|         if (!dir.exists()) dir.mkdirs(); |  | ||||||
|  |  | ||||||
|         // Unpack the files. |  | ||||||
|         ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath)); |  | ||||||
|         byte[] buffer = new byte[1024]; |  | ||||||
|         ZipEntry ze = zis.getNextEntry(); |  | ||||||
|         while (ze != null) { |  | ||||||
|             String fileName = ze.getName(); |  | ||||||
|             File newFile = new File(destDir + fileName); |  | ||||||
|             newFile.getParentFile().mkdirs(); |  | ||||||
|             FileOutputStream fos = new FileOutputStream(newFile); |  | ||||||
|             int len; |  | ||||||
|             while ((len = zis.read(buffer)) > 0) { |  | ||||||
|                 fos.write(buffer, 0, len); |  | ||||||
|             } |  | ||||||
|             fos.close(); |  | ||||||
|             zis.closeEntry(); |  | ||||||
|             ze = zis.getNextEntry(); |  | ||||||
|         } |  | ||||||
|         zis.closeEntry(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static void initializeDriverParameters(Context context) { |  | ||||||
|         try { |  | ||||||
|             // Initialize the file redirection directory. |  | ||||||
|             fileRedirectionPath = context.getExternalFilesDir(null).getCanonicalPath() + "/gpu/vk_file_redirect/"; |  | ||||||
|  |  | ||||||
|             // Initialize the driver installation directory. |  | ||||||
|             driverInstallationPath = context.getFilesDir().getCanonicalPath() + "/gpu_driver/"; |  | ||||||
|         } catch (IOException e) { |  | ||||||
|             throw new RuntimeException(e); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         // Initialize directories. |  | ||||||
|         initializeDirectories(); |  | ||||||
|  |  | ||||||
|         // Initialize hook libraries directory. |  | ||||||
|         hookLibPath = context.getApplicationInfo().nativeLibraryDir + "/"; |  | ||||||
|  |  | ||||||
|         // Initialize GPU driver. |  | ||||||
|         NativeLibrary.InitializeGpuDriver(hookLibPath, driverInstallationPath, getCustomDriverLibraryName(), fileRedirectionPath); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static void installDefaultDriver(Context context) { |  | ||||||
|         // Removing the installed driver will result in the backend using the default system driver. |  | ||||||
|         File driverInstallationDir = new File(driverInstallationPath); |  | ||||||
|         deleteRecursive(driverInstallationDir); |  | ||||||
|         initializeDriverParameters(context); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static void installCustomDriver(Context context, Uri driverPathUri) { |  | ||||||
|         // Revert to system default in the event the specified driver is bad. |  | ||||||
|         installDefaultDriver(context); |  | ||||||
|  |  | ||||||
|         // Ensure we have directories. |  | ||||||
|         initializeDirectories(); |  | ||||||
|  |  | ||||||
|         // Copy the zip file URI into our private storage. |  | ||||||
|         FileUtil.copyUriToInternalStorage(context, driverPathUri, driverInstallationPath, DRIVER_INTERNAL_FILENAME); |  | ||||||
|  |  | ||||||
|         // Unzip the driver. |  | ||||||
|         try { |  | ||||||
|             unzip(driverInstallationPath + DRIVER_INTERNAL_FILENAME, driverInstallationPath); |  | ||||||
|         } catch (IOException e) { |  | ||||||
|             throw new RuntimeException(e); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         // Initialize the driver parameters. |  | ||||||
|         initializeDriverParameters(context); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static String getCustomDriverName() { |  | ||||||
|         // Parse the custom driver metadata to retrieve the name. |  | ||||||
|         GpuDriverMetadata metadata = new GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME); |  | ||||||
|         return metadata.name; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private static String getCustomDriverLibraryName() { |  | ||||||
|         // Parse the custom driver metadata to retrieve the library name. |  | ||||||
|         GpuDriverMetadata metadata = new GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME); |  | ||||||
|         return metadata.libraryName; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private static void initializeDirectories() { |  | ||||||
|         // Ensure the file redirection directory exists. |  | ||||||
|         File fileRedirectionDir = new File(fileRedirectionPath); |  | ||||||
|         if (!fileRedirectionDir.exists()) { |  | ||||||
|             fileRedirectionDir.mkdirs(); |  | ||||||
|         } |  | ||||||
|         // Ensure the driver installation directory exists. |  | ||||||
|         File driverInstallationDir = new File(driverInstallationPath); |  | ||||||
|         if (!driverInstallationDir.exists()) { |  | ||||||
|             driverInstallationDir.mkdirs(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private static void deleteRecursive(File fileOrDirectory) { |  | ||||||
|         if (fileOrDirectory.isDirectory()) { |  | ||||||
|             for (File child : fileOrDirectory.listFiles()) { |  | ||||||
|                 deleteRecursive(child); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         fileOrDirectory.delete(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -0,0 +1,145 @@ | |||||||
|  | package org.yuzu.yuzu_emu.utils | ||||||
|  |  | ||||||
|  | import android.content.Context | ||||||
|  | import android.net.Uri | ||||||
|  | import org.yuzu.yuzu_emu.NativeLibrary | ||||||
|  | import org.yuzu.yuzu_emu.utils.FileUtil.copyUriToInternalStorage | ||||||
|  | import java.io.File | ||||||
|  | import java.io.FileInputStream | ||||||
|  | import java.io.FileOutputStream | ||||||
|  | import java.io.IOException | ||||||
|  | import java.util.zip.ZipInputStream | ||||||
|  |  | ||||||
|  | object GpuDriverHelper { | ||||||
|  |     private const val META_JSON_FILENAME = "meta.json" | ||||||
|  |     private const val DRIVER_INTERNAL_FILENAME = "gpu_driver.zip" | ||||||
|  |     private var fileRedirectionPath: String? = null | ||||||
|  |     private var driverInstallationPath: String? = null | ||||||
|  |     private var hookLibPath: String? = null | ||||||
|  |  | ||||||
|  |     @Throws(IOException::class) | ||||||
|  |     private fun unzip(zipFilePath: String, destDir: String) { | ||||||
|  |         val dir = File(destDir) | ||||||
|  |  | ||||||
|  |         // Create output directory if it doesn't exist | ||||||
|  |         if (!dir.exists()) dir.mkdirs() | ||||||
|  |  | ||||||
|  |         // Unpack the files. | ||||||
|  |         val zis = ZipInputStream(FileInputStream(zipFilePath)) | ||||||
|  |         val buffer = ByteArray(1024) | ||||||
|  |         var ze = zis.nextEntry | ||||||
|  |         while (ze != null) { | ||||||
|  |             val fileName = ze.name | ||||||
|  |             val newFile = File(destDir + fileName) | ||||||
|  |             newFile.parentFile!!.mkdirs() | ||||||
|  |             val fos = FileOutputStream(newFile) | ||||||
|  |             var len: Int | ||||||
|  |             while (zis.read(buffer).also { len = it } > 0) { | ||||||
|  |                 fos.write(buffer, 0, len) | ||||||
|  |             } | ||||||
|  |             fos.close() | ||||||
|  |             zis.closeEntry() | ||||||
|  |             ze = zis.nextEntry | ||||||
|  |         } | ||||||
|  |         zis.closeEntry() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @JvmStatic | ||||||
|  |     fun initializeDriverParameters(context: Context) { | ||||||
|  |         try { | ||||||
|  |             // Initialize the file redirection directory. | ||||||
|  |             fileRedirectionPath = | ||||||
|  |                 context.getExternalFilesDir(null)!!.canonicalPath + "/gpu/vk_file_redirect/" | ||||||
|  |  | ||||||
|  |             // Initialize the driver installation directory. | ||||||
|  |             driverInstallationPath = context.filesDir.canonicalPath + "/gpu_driver/" | ||||||
|  |         } catch (e: IOException) { | ||||||
|  |             throw RuntimeException(e) | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Initialize directories. | ||||||
|  |         initializeDirectories() | ||||||
|  |  | ||||||
|  |         // Initialize hook libraries directory. | ||||||
|  |         hookLibPath = context.applicationInfo.nativeLibraryDir + "/" | ||||||
|  |  | ||||||
|  |         // Initialize GPU driver. | ||||||
|  |         NativeLibrary.InitializeGpuDriver( | ||||||
|  |             hookLibPath, | ||||||
|  |             driverInstallationPath, | ||||||
|  |             customDriverLibraryName, | ||||||
|  |             fileRedirectionPath | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun installDefaultDriver(context: Context) { | ||||||
|  |         // Removing the installed driver will result in the backend using the default system driver. | ||||||
|  |         val driverInstallationDir = File(driverInstallationPath!!) | ||||||
|  |         deleteRecursive(driverInstallationDir) | ||||||
|  |         initializeDriverParameters(context) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun installCustomDriver(context: Context, driverPathUri: Uri?) { | ||||||
|  |         // Revert to system default in the event the specified driver is bad. | ||||||
|  |         installDefaultDriver(context) | ||||||
|  |  | ||||||
|  |         // Ensure we have directories. | ||||||
|  |         initializeDirectories() | ||||||
|  |  | ||||||
|  |         // Copy the zip file URI into our private storage. | ||||||
|  |         copyUriToInternalStorage( | ||||||
|  |             context, | ||||||
|  |             driverPathUri, | ||||||
|  |             driverInstallationPath!!, | ||||||
|  |             DRIVER_INTERNAL_FILENAME | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         // Unzip the driver. | ||||||
|  |         try { | ||||||
|  |             unzip(driverInstallationPath + DRIVER_INTERNAL_FILENAME, driverInstallationPath!!) | ||||||
|  |         } catch (e: IOException) { | ||||||
|  |             throw RuntimeException(e) | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Initialize the driver parameters. | ||||||
|  |         initializeDriverParameters(context) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Parse the custom driver metadata to retrieve the name. | ||||||
|  |     val customDriverName: String? | ||||||
|  |         get() { | ||||||
|  |             // Parse the custom driver metadata to retrieve the name. | ||||||
|  |             val metadata = GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME) | ||||||
|  |             return metadata.name | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     // Parse the custom driver metadata to retrieve the library name. | ||||||
|  |     private val customDriverLibraryName: String? | ||||||
|  |         get() { | ||||||
|  |             // Parse the custom driver metadata to retrieve the library name. | ||||||
|  |             val metadata = GpuDriverMetadata(driverInstallationPath + META_JSON_FILENAME) | ||||||
|  |             return metadata.libraryName | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     private fun initializeDirectories() { | ||||||
|  |         // Ensure the file redirection directory exists. | ||||||
|  |         val fileRedirectionDir = File(fileRedirectionPath!!) | ||||||
|  |         if (!fileRedirectionDir.exists()) { | ||||||
|  |             fileRedirectionDir.mkdirs() | ||||||
|  |         } | ||||||
|  |         // Ensure the driver installation directory exists. | ||||||
|  |         val driverInstallationDir = File(driverInstallationPath!!) | ||||||
|  |         if (!driverInstallationDir.exists()) { | ||||||
|  |             driverInstallationDir.mkdirs() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private fun deleteRecursive(fileOrDirectory: File) { | ||||||
|  |         if (fileOrDirectory.isDirectory) { | ||||||
|  |             for (child in fileOrDirectory.listFiles()!!) { | ||||||
|  |                 deleteRecursive(child) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         fileOrDirectory.delete() | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user