android: Fix crash on importing invalid save

This commit is contained in:
Charles Lombardo 2023-06-02 14:23:25 -04:00 committed by bunnei
parent db6737f2ba
commit a789046127

View File

@ -11,6 +11,7 @@ import android.provider.DocumentsContract
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -49,6 +50,7 @@ class ImportExportSavesFragment : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val activity = requireActivity() as AppCompatActivity
val activityResultRegistry = requireActivity().activityResultRegistry val activityResultRegistry = requireActivity().activityResultRegistry
startForResultExportSave = activityResultRegistry.register( startForResultExportSave = activityResultRegistry.register(
@ -61,7 +63,7 @@ class ImportExportSavesFragment : DialogFragment() {
"documentPickerKey", "documentPickerKey",
ActivityResultContracts.OpenDocument() ActivityResultContracts.OpenDocument()
) { ) {
it?.let { uri -> importSave(uri) } it?.let { uri -> importSave(uri, activity) }
} }
} }
@ -183,7 +185,7 @@ class ImportExportSavesFragment : DialogFragment() {
* Imports the save files contained in the zip file, and replaces any existing ones with the new save file. * Imports the save files contained in the zip file, and replaces any existing ones with the new save file.
* @param zipUri The Uri of the zip file containing the save file(s) to import. * @param zipUri The Uri of the zip file containing the save file(s) to import.
*/ */
private fun importSave(zipUri: Uri) { private fun importSave(zipUri: Uri, activity: AppCompatActivity) {
val inputZip = context.contentResolver.openInputStream(zipUri) val inputZip = context.contentResolver.openInputStream(zipUri)
// A zip needs to have at least one subfolder named after a TitleId in order to be considered valid. // A zip needs to have at least one subfolder named after a TitleId in order to be considered valid.
var validZip = false var validZip = false
@ -214,7 +216,7 @@ class ImportExportSavesFragment : DialogFragment() {
MessageDialogFragment.newInstance( MessageDialogFragment.newInstance(
R.string.save_file_invalid_zip_structure, R.string.save_file_invalid_zip_structure,
R.string.save_file_invalid_zip_structure_description R.string.save_file_invalid_zip_structure_description
).show(childFragmentManager, MessageDialogFragment.TAG) ).show(activity.supportFragmentManager, MessageDialogFragment.TAG)
return@withContext return@withContext
} }
Toast.makeText( Toast.makeText(