From 3804896788383e927a7ff013b0f904f89f362b38 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 6 Jul 2021 20:25:04 +0300 Subject: [PATCH] Save backup instead of sharing --- .../settings/backup/BackupDialogFragment.kt | 36 ++++++++++++++++--- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt index 5cd21c629..4d9003f3b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt @@ -1,27 +1,41 @@ package org.koitharu.kotatsu.settings.backup +import android.net.Uri import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible import org.koin.androidx.viewmodel.ext.android.viewModel import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.AlertDialogFragment import org.koitharu.kotatsu.databinding.DialogProgressBinding -import org.koitharu.kotatsu.utils.ShareHelper import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.progress.Progress import java.io.File +import java.io.FileOutputStream class BackupDialogFragment : AlertDialogFragment() { private val viewModel by viewModel(mode = LazyThreadSafetyMode.NONE) + private var backup: File? = null + private val saveFileContract = + registerForActivityResult(ActivityResultContracts.CreateDocument()) { uri -> + val file = backup + if (uri != null && file != null) { + saveBackup(file, uri) + } else { + dismiss() + } + } + override fun onInflateView( inflater: LayoutInflater, - container: ViewGroup? + container: ViewGroup?, ) = DialogProgressBinding.inflate(inflater, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -60,8 +74,22 @@ class BackupDialogFragment : AlertDialogFragment() { } private fun onBackupDone(file: File) { - ShareHelper(context ?: return).shareBackup(file) - dismiss() + this.backup = file + saveFileContract.launch(file.name) + } + + private fun saveBackup(file: File, output: Uri) { + try { + requireContext().contentResolver.openFileDescriptor(output, "w")?.use { fd -> + FileOutputStream(fd.fileDescriptor).use { + it.write(file.readBytes()) + } + } + Toast.makeText(requireContext(), R.string.backup_saved, Toast.LENGTH_LONG).show() + dismiss() + } catch (e: Exception) { + onError(e) + } } companion object { diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 54e3c6178..6ea7fbeca 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -211,4 +211,5 @@ Языки Добро пожаловать Вы действительно хотите удалить все недавние поисковые запросы? Это действие не может быть отменено. + Резервная копия успешно сохранена \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8112a0029..feea85a79 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -213,4 +213,5 @@ Other Languages Welcome + Backup saved succesfully \ No newline at end of file