From c8053b2eb6664f5a1161febf0db47a1620f7a474 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 12 Apr 2023 19:50:12 +0300 Subject: [PATCH] Import backup from import dialog --- .../kotatsu/local/ui/ImportDialogFragment.kt | 13 +++++++++++++ .../org/koitharu/kotatsu/utils/ext/ViewExt.kt | 3 +++ app/src/main/res/drawable/ic_backup_restore.xml | 12 ++++++++++++ app/src/main/res/layout/dialog_import.xml | 17 +++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 46 insertions(+) create mode 100644 app/src/main/res/drawable/ic_backup_restore.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/local/ui/ImportDialogFragment.kt b/app/src/main/java/org/koitharu/kotatsu/local/ui/ImportDialogFragment.kt index ddc5a4cf6..b72f82200 100644 --- a/app/src/main/java/org/koitharu/kotatsu/local/ui/ImportDialogFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/local/ui/ImportDialogFragment.kt @@ -12,6 +12,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.AlertDialogFragment import org.koitharu.kotatsu.databinding.DialogImportBinding +import org.koitharu.kotatsu.settings.backup.BackupDialogFragment +import org.koitharu.kotatsu.settings.backup.RestoreDialogFragment class ImportDialogFragment : AlertDialogFragment(), View.OnClickListener { @@ -21,6 +23,9 @@ class ImportDialogFragment : AlertDialogFragment(), View.On private val importDirCall = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { startImport(listOfNotNull(it)) } + private val backupSelectCall = registerForActivityResult(ActivityResultContracts.OpenDocument()) { + restoreBackup(it) + } override fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): DialogImportBinding { return DialogImportBinding.inflate(inflater, container, false) @@ -37,12 +42,14 @@ class ImportDialogFragment : AlertDialogFragment(), View.On super.onViewCreated(view, savedInstanceState) binding.buttonDir.setOnClickListener(this) binding.buttonFile.setOnClickListener(this) + binding.buttonBackup.setOnClickListener(this) } override fun onClick(v: View) { when (v.id) { R.id.button_file -> importFileCall.launch(arrayOf("*/*")) R.id.button_dir -> importDirCall.launch(null) + R.id.button_backup -> backupSelectCall.launch(arrayOf("*/*")) } } @@ -56,6 +63,12 @@ class ImportDialogFragment : AlertDialogFragment(), View.On dismiss() } + private fun restoreBackup(uri: Uri?) { + RestoreDialogFragment.newInstance(uri ?: return) + .show(parentFragmentManager, BackupDialogFragment.TAG) + dismiss() + } + companion object { private const val TAG = "ImportDialogFragment" diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt index 5d00f4a11..95d55f40d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt @@ -165,6 +165,9 @@ fun RecyclerView.invalidateNestedItemDecorations() { } } +val View.parentView: ViewGroup? + get() = parent as? ViewGroup + val View.parents: Sequence get() = sequence { var p: ViewParent? = parent diff --git a/app/src/main/res/drawable/ic_backup_restore.xml b/app/src/main/res/drawable/ic_backup_restore.xml new file mode 100644 index 000000000..d2066791d --- /dev/null +++ b/app/src/main/res/drawable/ic_backup_restore.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/dialog_import.xml b/app/src/main/res/layout/dialog_import.xml index 0541b5581..9171b8793 100644 --- a/app/src/main/res/layout/dialog_import.xml +++ b/app/src/main/res/layout/dialog_import.xml @@ -32,4 +32,21 @@ app:subtitle="@string/folder_with_images_import_description" app:title="@string/folder_with_images" /> + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70fa95c06..920408313 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -431,4 +431,5 @@ You can select one or more .cbz or .zip files, each file will be recognized as a separate manga. You can select a directory with archives or images. Each archive (or subdirectory) will be recognized as a chapter. Speed + Import a previously created backup of user data