diff options
Diffstat (limited to 'src/android/app/src/main/java')
3 files changed, 82 insertions, 1 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index 22af9e435..4be9ade14 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -227,6 +227,8 @@ object NativeLibrary { external fun setAppDirectory(directory: String) + external fun installFileToNand(filename: String): Int + external fun initializeGpuDriver( hookLibDir: String?, customDriverDir: String?, @@ -507,4 +509,15 @@ object NativeLibrary { const val RELEASED = 0 const val PRESSED = 1 } + + /** + * Result from installFileToNand + */ + object InstallFileToNandResult { + const val Success = 0 + const val SuccessFileOverwritten = 1 + const val Error = 2 + const val ErrorBaseGame = 3 + const val ErrorFilenameExtension = 4 + } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt index bdc337501..536163eb6 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt @@ -95,6 +95,11 @@ class HomeSettingsFragment : Fragment() { R.drawable.ic_nfc ) { mainActivity.getAmiiboKey.launch(arrayOf("*/*")) }, HomeSetting( + R.string.install_game_content, + R.string.install_game_content_description, + R.drawable.ic_system_update_alt + ) { mainActivity.installGameUpdate.launch(arrayOf("*/*")) }, + HomeSetting( R.string.select_games_folder, R.string.select_games_folder_description, R.drawable.ic_add @@ -103,7 +108,12 @@ class HomeSettingsFragment : Fragment() { R.string.manage_save_data, R.string.import_export_saves_description, R.drawable.ic_save - ) { ImportExportSavesFragment().show(parentFragmentManager, ImportExportSavesFragment.TAG) }, + ) { + ImportExportSavesFragment().show( + parentFragmentManager, + ImportExportSavesFragment.TAG + ) + }, HomeSetting( R.string.install_prod_keys, R.string.install_prod_keys_description, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt index 124f62f08..82fc9e04e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt @@ -467,4 +467,62 @@ class MainActivity : AppCompatActivity(), ThemeProvider { } } } + + val installGameUpdate = + registerForActivityResult(ActivityResultContracts.OpenDocument()) { + if (it == null) + return@registerForActivityResult + + IndeterminateProgressDialogFragment.newInstance( + this@MainActivity, + R.string.install_game_content + ) { + val result = NativeLibrary.installFileToNand(it.toString()) + lifecycleScope.launch { + withContext(Dispatchers.Main) { + when (result) { + NativeLibrary.InstallFileToNandResult.Success -> { + Toast.makeText( + applicationContext, + R.string.install_game_content_success, + Toast.LENGTH_SHORT + ).show() + } + + NativeLibrary.InstallFileToNandResult.SuccessFileOverwritten -> { + Toast.makeText( + applicationContext, + R.string.install_game_content_success_overwrite, + Toast.LENGTH_SHORT + ).show() + } + + NativeLibrary.InstallFileToNandResult.ErrorBaseGame -> { + MessageDialogFragment.newInstance( + R.string.install_game_content_failure, + R.string.install_game_content_failure_base + ).show(supportFragmentManager, MessageDialogFragment.TAG) + } + + NativeLibrary.InstallFileToNandResult.ErrorFilenameExtension -> { + MessageDialogFragment.newInstance( + R.string.install_game_content_failure, + R.string.install_game_content_failure_file_extension, + R.string.install_game_content_help_link + ).show(supportFragmentManager, MessageDialogFragment.TAG) + } + + else -> { + MessageDialogFragment.newInstance( + R.string.install_game_content_failure, + R.string.install_game_content_failure_description, + R.string.install_game_content_help_link + ).show(supportFragmentManager, MessageDialogFragment.TAG) + } + } + } + } + return@newInstance result + }.show(supportFragmentManager, IndeterminateProgressDialogFragment.TAG) + } } |