浏览代码

Show an error if backup file URI isn't returned to app when attempting restore

Related to #10028
arkon 1 年之前
父节点
当前提交
e572abb041

+ 17 - 14
app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBackupScreen.kt

@@ -238,7 +238,7 @@ object SettingsBackupScreen : SearchableSettings {
                     AlertDialog(
                         onDismissRequest = onDismissRequest,
                         title = { Text(text = stringResource(R.string.invalid_backup_file)) },
-                        text = { Text(text = "${err.uri}\n\n${err.message}") },
+                        text = { Text(text = listOfNotNull(err.uri, err.message).joinToString("\n\n")) },
                         dismissButton = {
                             TextButton(
                                 onClick = {
@@ -310,21 +310,24 @@ object SettingsBackupScreen : SearchableSettings {
                 }
             },
         ) {
-            if (it != null) {
-                val results = try {
-                    BackupFileValidator().validate(context, it)
-                } catch (e: Exception) {
-                    error = InvalidRestore(it, e.message.toString())
-                    return@rememberLauncherForActivityResult
-                }
+            if (it == null) {
+                error = InvalidRestore(message = context.getString(R.string.file_null_uri_error))
+                return@rememberLauncherForActivityResult
+            }
 
-                if (results.missingSources.isEmpty() && results.missingTrackers.isEmpty()) {
-                    BackupRestoreJob.start(context, it)
-                    return@rememberLauncherForActivityResult
-                }
+            val results = try {
+                BackupFileValidator().validate(context, it)
+            } catch (e: Exception) {
+                error = InvalidRestore(it, e.message.toString())
+                return@rememberLauncherForActivityResult
+            }
 
-                error = MissingRestoreComponents(it, results.missingSources, results.missingTrackers)
+            if (results.missingSources.isEmpty() && results.missingTrackers.isEmpty()) {
+                BackupRestoreJob.start(context, it)
+                return@rememberLauncherForActivityResult
             }
+
+            error = MissingRestoreComponents(it, results.missingSources, results.missingTrackers)
         }
 
         return Preference.PreferenceItem.TextPreference(
@@ -421,6 +424,6 @@ private data class MissingRestoreComponents(
 )
 
 private data class InvalidRestore(
-    val uri: Uri,
+    val uri: Uri? = null,
     val message: String,
 )

+ 1 - 0
i18n/src/main/res/values/strings.xml

@@ -871,6 +871,7 @@
     <string name="file_select_cover">Select cover image</string>
     <string name="file_select_backup">Select backup file</string>
     <string name="file_picker_error">No file picker app found</string>
+    <string name="file_null_uri_error">File picker failed to return file to app</string>
 
     <!--UpdateCheck-->
     <string name="update_check_confirm">Download</string>