|
|
|
@ -12,7 +12,6 @@ import android.widget.Toast
|
|
|
|
|
import androidx.appcompat.app.AlertDialog
|
|
|
|
|
import androidx.core.net.toUri
|
|
|
|
|
import androidx.core.os.bundleOf
|
|
|
|
|
import androidx.documentfile.provider.DocumentFile
|
|
|
|
|
import androidx.preference.PreferenceScreen
|
|
|
|
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
|
|
|
import com.hippo.unifile.UniFile
|
|
|
|
@ -201,26 +200,7 @@ class SettingsBackupController : SettingsController() {
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
CODE_BACKUP_RESTORE -> {
|
|
|
|
|
uri?.path?.let {
|
|
|
|
|
val fileName = DocumentFile.fromSingleUri(activity, uri)?.name ?: uri.toString()
|
|
|
|
|
when {
|
|
|
|
|
fileName.endsWith(".proto.gz") -> {
|
|
|
|
|
RestoreBackupDialog(
|
|
|
|
|
uri,
|
|
|
|
|
BackupConst.BACKUP_TYPE_FULL
|
|
|
|
|
).showDialog(router)
|
|
|
|
|
}
|
|
|
|
|
fileName.endsWith(".json") -> {
|
|
|
|
|
RestoreBackupDialog(
|
|
|
|
|
uri,
|
|
|
|
|
BackupConst.BACKUP_TYPE_LEGACY
|
|
|
|
|
).showDialog(router)
|
|
|
|
|
}
|
|
|
|
|
else -> {
|
|
|
|
|
activity.toast(activity.getString(R.string.invalid_backup_file_type, fileName))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
uri?.let { RestoreBackupDialog(it).showDialog(router) }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -284,32 +264,28 @@ class SettingsBackupController : SettingsController() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class RestoreBackupDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
|
|
|
|
constructor(uri: Uri, type: Int) : this(
|
|
|
|
|
bundleOf(
|
|
|
|
|
KEY_URI to uri,
|
|
|
|
|
KEY_TYPE to type
|
|
|
|
|
)
|
|
|
|
|
constructor(uri: Uri) : this(
|
|
|
|
|
bundleOf(KEY_URI to uri)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
|
|
|
|
val activity = activity!!
|
|
|
|
|
val uri: Uri = args.getParcelable(KEY_URI)!!
|
|
|
|
|
val type: Int = args.getInt(KEY_TYPE)
|
|
|
|
|
|
|
|
|
|
return try {
|
|
|
|
|
var type = BackupConst.BACKUP_TYPE_FULL
|
|
|
|
|
val results = runCatching {
|
|
|
|
|
FullBackupRestoreValidator().validate(activity, uri)
|
|
|
|
|
}.recoverCatching {
|
|
|
|
|
type = BackupConst.BACKUP_TYPE_LEGACY
|
|
|
|
|
LegacyBackupRestoreValidator().validate(activity, uri)
|
|
|
|
|
}.getOrThrow()
|
|
|
|
|
|
|
|
|
|
var message = if (type == BackupConst.BACKUP_TYPE_FULL) {
|
|
|
|
|
activity.getString(R.string.backup_restore_content_full)
|
|
|
|
|
} else {
|
|
|
|
|
activity.getString(R.string.backup_restore_content)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val validator = if (type == BackupConst.BACKUP_TYPE_FULL) {
|
|
|
|
|
FullBackupRestoreValidator()
|
|
|
|
|
} else {
|
|
|
|
|
LegacyBackupRestoreValidator()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val results = validator.validate(activity, uri)
|
|
|
|
|
if (results.missingSources.isNotEmpty()) {
|
|
|
|
|
message += "\n\n${activity.getString(R.string.backup_restore_missing_sources)}\n${results.missingSources.joinToString("\n") { "- $it" }}"
|
|
|
|
|
}
|
|
|
|
@ -336,7 +312,6 @@ class SettingsBackupController : SettingsController() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private const val KEY_URI = "RestoreBackupDialog.uri"
|
|
|
|
|
private const val KEY_TYPE = "RestoreBackupDialog.type"
|
|
|
|
|
|
|
|
|
|
private const val CODE_BACKUP_DIR = 503
|
|
|
|
|
private const val CODE_BACKUP_CREATE = 504
|
|
|
|
|