Skip to content

Commit 86e1569

Browse files
lukstbitBrayanDSO
authored andcommitted
Fix exported as text immediate share
Introduces a flag to distinguish between sharing a text file or an apkg file after exporting.
1 parent 11838b5 commit 86e1569

3 files changed

Lines changed: 32 additions & 10 deletions

File tree

AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import com.ichi2.anki.android.input.ShortcutGroup
6262
import com.ichi2.anki.android.input.ShortcutGroupProvider
6363
import com.ichi2.anki.android.input.shortcut
6464
import com.ichi2.anki.common.annotations.LegacyNotifications
65+
import com.ichi2.anki.common.annotations.NeedsTest
6566
import com.ichi2.anki.common.crashreporting.CrashReportService
6667
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
6768
import com.ichi2.anki.compat.CompatHelper
@@ -71,6 +72,7 @@ import com.ichi2.anki.dialogs.DatabaseErrorDialog
7172
import com.ichi2.anki.dialogs.DatabaseErrorDialog.CustomExceptionData
7273
import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType
7374
import com.ichi2.anki.dialogs.DialogHandler
75+
import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.ARG_SHARE_AS_TEXT
7476
import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.KEY_EXPORT_PATH
7577
import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.REQUEST_EXPORT_SAVE
7678
import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.REQUEST_EXPORT_SHARE
@@ -81,6 +83,7 @@ import com.ichi2.anki.preferences.sharedPrefs
8183
import com.ichi2.anki.receiver.SdCardReceiver
8284
import com.ichi2.anki.settings.Prefs
8385
import com.ichi2.anki.snackbar.showSnackbar
86+
import com.ichi2.anki.utils.ext.requireString
8487
import com.ichi2.anki.utils.ext.showDialogFragment
8588
import com.ichi2.anki.workarounds.AppLoadedFromBackupWorkaround.showedActivityFailedScreen
8689
import com.ichi2.compat.customtabs.CustomTabActivityHelper
@@ -152,7 +155,8 @@ open class AnkiActivity(
152155
}
153156
supportFragmentManager.setFragmentResultListener(REQUEST_EXPORT_SHARE, this) { _, bundle ->
154157
shareFile(
155-
bundle.getString(KEY_EXPORT_PATH) ?: error("Missing required exportPath!"),
158+
path = bundle.requireString(KEY_EXPORT_PATH),
159+
asText = bundle.getBoolean(ARG_SHARE_AS_TEXT, false),
156160
)
157161
}
158162
if (savedInstanceState != null) {
@@ -704,7 +708,11 @@ open class AnkiActivity(
704708
super.onSaveInstanceState(outState)
705709
}
706710

707-
private fun shareFile(path: String) {
711+
@NeedsTest("#20993 verify that the proper mime type is used for the share intent")
712+
private fun shareFile(
713+
path: String,
714+
asText: Boolean = false,
715+
) {
708716
// Make sure the file actually exists
709717
val attachment = File(path)
710718
if (!attachment.exists()) {
@@ -723,10 +731,12 @@ open class AnkiActivity(
723731
showThemedToast(this, resources.getString(R.string.apk_share_error), false)
724732
return
725733
}
734+
val targetMimeType = if (asText) "text/plain" else "application/apkg"
735+
726736
val sendIntent =
727737
ShareCompat
728738
.IntentBuilder(this)
729-
.setType("application/apkg")
739+
.setType(targetMimeType)
730740
.setStream(uri)
731741
.setSubject(getString(R.string.export_email_subject, attachment.name))
732742
.setHtmlText(

AnkiDroid/src/main/java/com/ichi2/anki/BackendExporting.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ fun AnkiActivity.exportSelectedNotes(
9090
)
9191
}
9292
}
93-
showAsyncDialogFragment(ExportReadyDialog.newInstance(exportPath))
93+
showAsyncDialogFragment(ExportReadyDialog.newInstance(exportPath, asText = true))
9494
}
9595
}
9696

@@ -110,7 +110,7 @@ fun AnkiActivity.exportSelectedCards(
110110
exportCardsCsv(exportPath, withHtml, limit)
111111
}
112112
}
113-
showAsyncDialogFragment(ExportReadyDialog.newInstance(exportPath))
113+
showAsyncDialogFragment(ExportReadyDialog.newInstance(exportPath, asText = true))
114114
}
115115
}
116116

AnkiDroid/src/main/java/com/ichi2/anki/dialogs/ExportReadyDialog.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import com.ichi2.utils.positiveButton
2929
class ExportReadyDialog : AsyncDialogFragment() {
3030
private val exportPath
3131
get() = requireArguments().getString(KEY_EXPORT_PATH) ?: error("Missing required argument: exportPath!")
32+
private val asText: Boolean
33+
get() = requireArguments().getBoolean(ARG_SHARE_AS_TEXT, false)
3234

3335
override fun onCreateDialog(savedInstanceState: Bundle?): AlertDialog {
3436
val dialog = AlertDialog.Builder(requireActivity())
@@ -43,7 +45,10 @@ class ExportReadyDialog : AsyncDialogFragment() {
4345
}.negativeButton(R.string.export_choice_share) {
4446
parentFragmentManager.setFragmentResult(
4547
REQUEST_EXPORT_SHARE,
46-
bundleOf(KEY_EXPORT_PATH to exportPath),
48+
Bundle().apply {
49+
putString(KEY_EXPORT_PATH, exportPath)
50+
putBoolean(ARG_SHARE_AS_TEXT, asText)
51+
},
4752
)
4853
}
4954

@@ -90,10 +95,17 @@ class ExportReadyDialog : AsyncDialogFragment() {
9095
const val REQUEST_EXPORT_SAVE = "request_export_save"
9196
const val REQUEST_EXPORT_SHARE = "request_export_share"
9297
const val KEY_EXPORT_PATH = "key_export_path"
98+
const val ARG_SHARE_AS_TEXT = "arg_share_as_text"
9399

94-
fun newInstance(exportPath: String) =
95-
ExportReadyDialog().apply {
96-
arguments = bundleOf(KEY_EXPORT_PATH to exportPath)
97-
}
100+
fun newInstance(
101+
exportPath: String,
102+
asText: Boolean = false,
103+
) = ExportReadyDialog().apply {
104+
arguments =
105+
Bundle().apply {
106+
putString(KEY_EXPORT_PATH, exportPath)
107+
putBoolean(ARG_SHARE_AS_TEXT, asText)
108+
}
109+
}
98110
}
99111
}

0 commit comments

Comments
 (0)