@@ -62,6 +62,7 @@ import com.ichi2.anki.android.input.ShortcutGroup
6262import com.ichi2.anki.android.input.ShortcutGroupProvider
6363import com.ichi2.anki.android.input.shortcut
6464import com.ichi2.anki.common.annotations.LegacyNotifications
65+ import com.ichi2.anki.common.annotations.NeedsTest
6566import com.ichi2.anki.common.crashreporting.CrashReportService
6667import com.ichi2.anki.common.utils.annotation.KotlinCleanup
6768import com.ichi2.anki.compat.CompatHelper
@@ -71,6 +72,7 @@ import com.ichi2.anki.dialogs.DatabaseErrorDialog
7172import com.ichi2.anki.dialogs.DatabaseErrorDialog.CustomExceptionData
7273import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType
7374import com.ichi2.anki.dialogs.DialogHandler
75+ import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.ARG_SHARE_AS_TEXT
7476import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.KEY_EXPORT_PATH
7577import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.REQUEST_EXPORT_SAVE
7678import com.ichi2.anki.dialogs.ExportReadyDialog.Companion.REQUEST_EXPORT_SHARE
@@ -81,6 +83,7 @@ import com.ichi2.anki.preferences.sharedPrefs
8183import com.ichi2.anki.receiver.SdCardReceiver
8284import com.ichi2.anki.settings.Prefs
8385import com.ichi2.anki.snackbar.showSnackbar
86+ import com.ichi2.anki.utils.ext.requireString
8487import com.ichi2.anki.utils.ext.showDialogFragment
8588import com.ichi2.anki.workarounds.AppLoadedFromBackupWorkaround.showedActivityFailedScreen
8689import 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(
0 commit comments