|
@@ -14,6 +14,11 @@ import eu.kanade.tachiyomi.ui.base.fragment.BaseRxFragment
|
|
|
import eu.kanade.tachiyomi.util.toast
|
|
|
import kotlinx.android.synthetic.main.fragment_backup.*
|
|
|
import nucleus.factory.RequiresPresenter
|
|
|
+import rx.Observable
|
|
|
+import rx.android.schedulers.AndroidSchedulers
|
|
|
+import rx.internal.util.SubscriptionList
|
|
|
+import rx.schedulers.Schedulers
|
|
|
+import timber.log.Timber
|
|
|
import java.io.File
|
|
|
import java.text.SimpleDateFormat
|
|
|
import java.util.*
|
|
@@ -28,11 +33,16 @@ class BackupFragment : BaseRxFragment<BackupPresenter>() {
|
|
|
private var backupDialog: Dialog? = null
|
|
|
private var restoreDialog: Dialog? = null
|
|
|
|
|
|
+ private lateinit var subscriptions: SubscriptionList
|
|
|
+
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedState: Bundle?): View {
|
|
|
return inflater.inflate(R.layout.fragment_backup, container, false)
|
|
|
}
|
|
|
|
|
|
override fun onViewCreated(view: View, savedState: Bundle?) {
|
|
|
+ baseActivity.requestPermissionsOnMarshmallow()
|
|
|
+ subscriptions = SubscriptionList()
|
|
|
+
|
|
|
backup_button.setOnClickListener {
|
|
|
val today = SimpleDateFormat("yyyy-MM-dd").format(Date())
|
|
|
val file = File(activity.externalCacheDir, "tachiyomi-$today.json")
|
|
@@ -48,11 +58,16 @@ class BackupFragment : BaseRxFragment<BackupPresenter>() {
|
|
|
val intent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
intent.addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
intent.type = "application/octet-stream"
|
|
|
- val chooser = Intent.createChooser(intent, getString(R.string.file_select_cover))
|
|
|
+ val chooser = Intent.createChooser(intent, getString(R.string.file_select_backup))
|
|
|
startActivityForResult(chooser, REQUEST_BACKUP_OPEN)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ override fun onDestroyView() {
|
|
|
+ subscriptions.unsubscribe()
|
|
|
+ super.onDestroyView()
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Called from the presenter when the backup is completed.
|
|
|
*
|
|
@@ -99,8 +114,18 @@ class BackupFragment : BaseRxFragment<BackupPresenter>() {
|
|
|
.progress(true, 0)
|
|
|
.show()
|
|
|
|
|
|
- val stream = context.contentResolver.openInputStream(data.data)
|
|
|
- presenter.restoreBackup(stream)
|
|
|
+ // When using cloud services, we have to open the input stream in a background thread.
|
|
|
+ Observable.fromCallable { context.contentResolver.openInputStream(data.data) }
|
|
|
+ .subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread())
|
|
|
+ .subscribe({
|
|
|
+ presenter.restoreBackup(it)
|
|
|
+ }, {
|
|
|
+ context.toast(it.message)
|
|
|
+ Timber.e(it, it.message)
|
|
|
+ })
|
|
|
+ .apply { subscriptions.add(this) }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|