mirror of
https://github.com/ankidroid/Anki-Android.git
synced 2024-09-19 19:42:17 +02:00
Move exported file saving to a background thread
This avoids the UI being "blocked" while saving the exported collection or apkg, issue which becomes "visible" to the user when dealing with bigger collections.
This commit is contained in:
parent
a73f17330e
commit
c7cbea0b53
@ -30,13 +30,17 @@ import com.google.android.material.snackbar.Snackbar
|
|||||||
import com.ichi2.anki.AnkiActivity
|
import com.ichi2.anki.AnkiActivity
|
||||||
import com.ichi2.anki.R
|
import com.ichi2.anki.R
|
||||||
import com.ichi2.anki.dialogs.ExportReadyDialog.ExportReadyDialogListener
|
import com.ichi2.anki.dialogs.ExportReadyDialog.ExportReadyDialogListener
|
||||||
|
import com.ichi2.anki.launchCatchingTask
|
||||||
import com.ichi2.anki.preferences.sharedPrefs
|
import com.ichi2.anki.preferences.sharedPrefs
|
||||||
import com.ichi2.anki.showThemedToast
|
import com.ichi2.anki.showThemedToast
|
||||||
import com.ichi2.anki.snackbar.showSnackbar
|
import com.ichi2.anki.snackbar.showSnackbar
|
||||||
|
import com.ichi2.anki.withProgress
|
||||||
import com.ichi2.annotations.NeedsTest
|
import com.ichi2.annotations.NeedsTest
|
||||||
import com.ichi2.compat.CompatHelper
|
import com.ichi2.compat.CompatHelper
|
||||||
import com.ichi2.libanki.Collection
|
import com.ichi2.libanki.Collection
|
||||||
import com.ichi2.libanki.utils.TimeManager
|
import com.ichi2.libanki.utils.TimeManager
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
@ -143,13 +147,19 @@ class ActivityExportingDelegate(private val activity: AnkiActivity, private val
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun saveFileCallback(result: ActivityResult) {
|
private fun saveFileCallback(result: ActivityResult) {
|
||||||
val isSuccessful = exportToProvider(result.data!!)
|
activity.launchCatchingTask {
|
||||||
|
activity.withProgress(activity.getString(R.string.export_saving_exported_collection)) {
|
||||||
|
val isSuccessful = withContext(Dispatchers.IO) {
|
||||||
|
exportToProvider(result.data!!)
|
||||||
|
}
|
||||||
|
|
||||||
if (isSuccessful) {
|
if (isSuccessful) {
|
||||||
activity.showSnackbar(R.string.export_save_apkg_successful, Snackbar.LENGTH_SHORT)
|
activity.showSnackbar(R.string.export_save_apkg_successful, Snackbar.LENGTH_SHORT)
|
||||||
saveSuccessfulCollectionExportIfRelevant()
|
saveSuccessfulCollectionExportIfRelevant()
|
||||||
} else {
|
} else {
|
||||||
activity.showSnackbar(R.string.export_save_apkg_unsuccessful)
|
activity.showSnackbar(R.string.export_save_apkg_unsuccessful)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,6 +148,7 @@
|
|||||||
</string>
|
</string>
|
||||||
<string name="export_choice_share">Share</string>
|
<string name="export_choice_share">Share</string>
|
||||||
<string name="export_choice_save_to">Save to</string>
|
<string name="export_choice_save_to">Save to</string>
|
||||||
|
<string name="export_saving_exported_collection">Saving exported file…</string>
|
||||||
<string name="study_options" comment="Name for a preference category in Filtered deck (aka Cram deck, aka Custom study) options">Options</string>
|
<string name="study_options" comment="Name for a preference category in Filtered deck (aka Cram deck, aka Custom study) options">Options</string>
|
||||||
<string name="menu__deck_options">Deck options</string>
|
<string name="menu__deck_options">Deck options</string>
|
||||||
<string name="menu__study_options" comment="Menu item that opens options for a Filtered deck (aka Cram deck, aka Custom study)">Study options</string>
|
<string name="menu__study_options" comment="Menu item that opens options for a Filtered deck (aka Cram deck, aka Custom study)">Study options</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user