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 androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.documentfile.provider.DocumentFile
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -49,6 +50,7 @@ class ImportExportSavesFragment : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val activity = requireActivity() as AppCompatActivity
val activityResultRegistry = requireActivity().activityResultRegistry
startForResultExportSave = activityResultRegistry.register(
@ -61,7 +63,7 @@ class ImportExportSavesFragment : DialogFragment() {
"documentPickerKey",
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.
* @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)
// A zip needs to have at least one subfolder named after a TitleId in order to be considered valid.
var validZip = false
@ -214,7 +216,7 @@ class ImportExportSavesFragment : DialogFragment() {
MessageDialogFragment.newInstance(
R.string.save_file_invalid_zip_structure,
R.string.save_file_invalid_zip_structure_description
).show(childFragmentManager, MessageDialogFragment.TAG)
).show(activity.supportFragmentManager, MessageDialogFragment.TAG)
return@withContext
}
Toast.makeText(