Import backup from import dialog

pull/340/head
Koitharu 3 years ago
parent 938be67cd3
commit c8053b2eb6
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -12,6 +12,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.ui.AlertDialogFragment import org.koitharu.kotatsu.base.ui.AlertDialogFragment
import org.koitharu.kotatsu.databinding.DialogImportBinding import org.koitharu.kotatsu.databinding.DialogImportBinding
import org.koitharu.kotatsu.settings.backup.BackupDialogFragment
import org.koitharu.kotatsu.settings.backup.RestoreDialogFragment
class ImportDialogFragment : AlertDialogFragment<DialogImportBinding>(), View.OnClickListener { class ImportDialogFragment : AlertDialogFragment<DialogImportBinding>(), View.OnClickListener {
@ -21,6 +23,9 @@ class ImportDialogFragment : AlertDialogFragment<DialogImportBinding>(), View.On
private val importDirCall = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { private val importDirCall = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) {
startImport(listOfNotNull(it)) startImport(listOfNotNull(it))
} }
private val backupSelectCall = registerForActivityResult(ActivityResultContracts.OpenDocument()) {
restoreBackup(it)
}
override fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): DialogImportBinding { override fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): DialogImportBinding {
return DialogImportBinding.inflate(inflater, container, false) return DialogImportBinding.inflate(inflater, container, false)
@ -37,12 +42,14 @@ class ImportDialogFragment : AlertDialogFragment<DialogImportBinding>(), View.On
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
binding.buttonDir.setOnClickListener(this) binding.buttonDir.setOnClickListener(this)
binding.buttonFile.setOnClickListener(this) binding.buttonFile.setOnClickListener(this)
binding.buttonBackup.setOnClickListener(this)
} }
override fun onClick(v: View) { override fun onClick(v: View) {
when (v.id) { when (v.id) {
R.id.button_file -> importFileCall.launch(arrayOf("*/*")) R.id.button_file -> importFileCall.launch(arrayOf("*/*"))
R.id.button_dir -> importDirCall.launch(null) R.id.button_dir -> importDirCall.launch(null)
R.id.button_backup -> backupSelectCall.launch(arrayOf("*/*"))
} }
} }
@ -56,6 +63,12 @@ class ImportDialogFragment : AlertDialogFragment<DialogImportBinding>(), View.On
dismiss() dismiss()
} }
private fun restoreBackup(uri: Uri?) {
RestoreDialogFragment.newInstance(uri ?: return)
.show(parentFragmentManager, BackupDialogFragment.TAG)
dismiss()
}
companion object { companion object {
private const val TAG = "ImportDialogFragment" private const val TAG = "ImportDialogFragment"

@ -165,6 +165,9 @@ fun RecyclerView.invalidateNestedItemDecorations() {
} }
} }
val View.parentView: ViewGroup?
get() = parent as? ViewGroup
val View.parents: Sequence<ViewParent> val View.parents: Sequence<ViewParent>
get() = sequence { get() = sequence {
var p: ViewParent? = parent var p: ViewParent? = parent

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,3A9,9 0 0,0 3,12H0L4,16L8,12H5A7,7 0 0,1 12,5A7,7 0 0,1 19,12A7,7 0 0,1 12,19C10.5,19 9.09,18.5 7.94,17.7L6.5,19.14C8.04,20.3 9.94,21 12,21A9,9 0 0,0 21,12A9,9 0 0,0 12,3M14,12A2,2 0 0,0 12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12Z" />
</vector>

@ -32,4 +32,21 @@
app:subtitle="@string/folder_with_images_import_description" app:subtitle="@string/folder_with_images_import_description"
app:title="@string/folder_with_images" /> app:title="@string/folder_with_images" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="4dp" />
<org.koitharu.kotatsu.base.ui.widgets.TwoLinesItemView
android:id="@+id/button_backup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="?android:listPreferredItemPaddingStart"
android:minHeight="?android:listPreferredItemHeightSmall"
android:paddingStart="?android:listPreferredItemPaddingStart"
android:paddingEnd="?android:listPreferredItemPaddingEnd"
app:icon="@drawable/ic_backup_restore"
app:subtitle="@string/restore_backup_description"
app:title="@string/restore_backup" />
</LinearLayout> </LinearLayout>

@ -431,4 +431,5 @@
<string name="comics_archive_import_description">You can select one or more .cbz or .zip files, each file will be recognized as a separate manga.</string> <string name="comics_archive_import_description">You can select one or more .cbz or .zip files, each file will be recognized as a separate manga.</string>
<string name="folder_with_images_import_description">You can select a directory with archives or images. Each archive (or subdirectory) will be recognized as a chapter.</string> <string name="folder_with_images_import_description">You can select a directory with archives or images. Each archive (or subdirectory) will be recognized as a chapter.</string>
<string name="speed">Speed</string> <string name="speed">Speed</string>
<string name="restore_backup_description">Import a previously created backup of user data</string>
</resources> </resources>

Loading…
Cancel
Save