From f7e5ef473a2bb052dbc3ed91125d5de959abc3a9 Mon Sep 17 00:00:00 2001 From: Markus Fisch Date: Mon, 13 Nov 2023 20:26:31 +0100 Subject: [PATCH] Add menu item to share scanned contents as a file Because when sharing plain text via Bluetooth, Android explicitly converts anything to HTML, which is not always what we want. Details here: https://stackoverflow.com/q/29907030 This feature is also useful to share binary contents more easily. --- .../android/binaryeye/content/Share.kt | 35 +++++++++++++++++++ .../binaryeye/fragment/DecodeFragment.kt | 11 ++++++ app/src/main/res/menu/fragment_decode.xml | 5 +++ app/src/main/res/values-bg/strings.xml | 1 + app/src/main/res/values-bn/strings.xml | 1 + app/src/main/res/values-cs/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fa/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-ka/strings.xml | 1 + app/src/main/res/values-ko/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-vi/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 27 files changed, 75 insertions(+) diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/content/Share.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/content/Share.kt index 87e1351c..6586e336 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/content/Share.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/content/Share.kt @@ -10,6 +10,8 @@ import de.markusfisch.android.binaryeye.BuildConfig import de.markusfisch.android.binaryeye.R import de.markusfisch.android.binaryeye.widget.toast import java.io.File +import java.io.FileOutputStream +import java.io.IOException fun Context.execShareIntent(intent: Intent): Boolean = if ( !startIntent(intent) @@ -59,6 +61,39 @@ fun Context.shareText(text: String, mimeType: String = "text/plain") { }) } +private const val SHARE_AS_TEXT_FILE_NAME = "barcode_content" +fun Context.wipeShareFile() { + File(externalCacheDir, SHARE_AS_TEXT_FILE_NAME).delete() +} + +fun Context.shareAsFile(content: T) { + val (bytes, mimeType) = when (content) { + is ByteArray -> Pair( + content, + "text/plain" + ) + + is String -> Pair( + content.toByteArray(), + "application/octet-stream" + ) + + else -> throw IllegalArgumentException( + "Unsupported content text for shareAsFile()" + ) + } + val file = File(externalCacheDir, SHARE_AS_TEXT_FILE_NAME) + try { + FileOutputStream(file).use { + it.write(bytes) + } + } catch (e: IOException) { + toast(R.string.error_saving_file) + return + } + shareFile(file, mimeType) +} + fun Context.shareFile(file: File, mimeType: String) { getUriForFile(file)?.let { shareUri(it, mimeType) diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt index 976ebba5..cf363e97 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/DecodeFragment.kt @@ -19,8 +19,10 @@ import de.markusfisch.android.binaryeye.activity.MainActivity import de.markusfisch.android.binaryeye.adapter.prettifyFormatName import de.markusfisch.android.binaryeye.app.* import de.markusfisch.android.binaryeye.content.copyToClipboard +import de.markusfisch.android.binaryeye.content.shareAsFile import de.markusfisch.android.binaryeye.content.shareText import de.markusfisch.android.binaryeye.content.toHexString +import de.markusfisch.android.binaryeye.content.wipeShareFile import de.markusfisch.android.binaryeye.database.Recreation import de.markusfisch.android.binaryeye.database.Scan import de.markusfisch.android.binaryeye.database.toRecreation @@ -124,6 +126,7 @@ class DecodeFragment : Fragment() { override fun onDestroy() { super.onDestroy() parentJob.cancel() + activity?.wipeShareFile() } private fun initContentAndFab(originalContent: String) { @@ -330,6 +333,14 @@ class DecodeFragment : Fragment() { true } + R.id.share_file -> { + context?.apply { + shareAsFile(if (isBinary) originalBytes else content) + maybeBackOrFinish() + } + true + } + R.id.create -> { fragmentManager?.addFragment( EncodeFragment.newInstance( diff --git a/app/src/main/res/menu/fragment_decode.xml b/app/src/main/res/menu/fragment_decode.xml index 11234150..37f148a1 100644 --- a/app/src/main/res/menu/fragment_decode.xml +++ b/app/src/main/res/menu/fragment_decode.xml @@ -23,6 +23,11 @@ android:title="@string/share" android:icon="@drawable/ic_action_share" material:showAsAction="ifRoom"/> + Превключване на светкавицата Грешка при превключването на светкавицата Сподели + Share as file Сподели като? Копиране в клипборда Копирано в клипборда diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 95a5bc0e..b966c4f8 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -31,6 +31,7 @@ আলো Error toggling flash ভাগ করো + Share as file ভাগ করার মাধ্যম ক্লিপবোর্ডে অনুলিপি ক্লিপবোর্ডে অনুলিপিত diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1da5670f..ca24ac66 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -33,6 +33,7 @@ Přepnout blesk Zapnutí/vypnutí blesku selhalo Sdílet + Share as file Sdílet jako Zkopírovat do schránky Zkopírováno do schránky diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 67282afc..dc42b557 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -31,6 +31,7 @@ Slå blitz til/fra Der opstod en fejl ved at slå blitz til/fra Del + Share as file Del som? Kopier til udklipsholder Kopieret til udklipsholder diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3620ea2d..8479b238 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -31,6 +31,7 @@ Licht an/ausschalten Fehler beim ein/ausschalten des Lichts Teilen + Als Datei teilen Teilen als? In die Zwischenablage kopieren Inhalt wurde in die Zwischenablage kopiert diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a6f44639..9403a11c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -31,6 +31,7 @@ Activar el flash Error toggling flash Compartir + Share as file ¿Compartir como? Copiar al portapapeles Copiado al portapapeles diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index f985ff48..7a91f0ba 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -31,6 +31,7 @@ روشن/خاموش کردن چراغ خطا هنگام روشن/خاموش کردن چراغ هم‌رسانی + Share as file هم‌رسانی به عنوان؟ رونوشت به تخه‌گیره به تخته‌گیره رونوشت شد diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index de6c7f78..787c92aa 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -32,6 +32,7 @@ Activer le flash Erreur de basculement du flash Partager + Share as file Partager comme ? Copier dans le presse-papiers Copié dans le presse-papiers diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 64487934..e5b8008f 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -31,6 +31,7 @@ Vaku be- vagy kikapcsolása Hiba a vaku be- vagy kikapcsolásakor Megosztás + Share as file Megosztja másként? Másolás a vágólapra Vágólapra helyezés diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 68c971ea..53e6b106 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -30,6 +30,7 @@ Nyala/matikan blitz Galat nyala/matikan blitz Bagikan + Share as file Bagikan sebagai? Salin ke clipboard Disalin ke clipboard diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d050fad6..d65e176d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -31,6 +31,7 @@ Attiva/disattiva flash Errore durante l\'attivazione/disattivazione del flash Condividi + Share as file Condividi come? Copia negli Appunti Copiato negli Appunti diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index ca5edf80..659a8cf1 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -30,6 +30,7 @@ フラッシュの切り替え フラッシュの切り替えエラー 共有 + Share as file 画像形式を選択 クリップボードにコピー クリップボードにコピーされました diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 1a4fce97..62c41186 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -31,6 +31,7 @@ განათების ჩართვა Error toggling flash გაზიარება + Share as file Share as? გაცვლის ბუფერში კოპირება კოპირებულია გაცვლის ბუფერში diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5441e2ae..6063353b 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -30,6 +30,7 @@ Toggle flash Error toggling flash Share + Share as file Share as? Copy to clipboard Copied to clipboard diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 7c2da7e1..bda6fd69 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -31,6 +31,7 @@ Zaklamp aan/uit Error toggling flash Delen + Share as file Delen als? Naar klembord kopiëren Naar klembord gekopieerd diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 27c0f06e..2e6efde4 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -8,6 +8,7 @@ Dodaj do kalendarza Ustawienia Udostępnij + Share as file Udostępnij jako? Nie można zapisać pliku Wyczyść historię diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index dc780d47..647ee624 100755 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -31,6 +31,7 @@ Ligar lanterna Falha ao ligar a lanterna Compartilhe + Share as file Compartilhar em qual formato? Copiar ao clipboard Copiado ao clipboard diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 17d24fe8..4c5dad56 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -33,6 +33,7 @@ Включить вспышку Ошибка при переключении вспышки Поделиться + Share as file Поделиться как? Скопировать в буфер обмена Скопировано в буфер обмена diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0b29cffc..2897a4e9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -31,6 +31,7 @@ Flaşı aç Flaş açılırken hata oluştu Paylaş + Share as file Şöyle paylaş: Panoya kopyala Panoya kopyalandı diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 365f4f15..3cdd30b1 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -32,6 +32,7 @@ Увімкнути спалах Помилка під час увімкнення спалаху Поділитися + Share as file Поділитися як? Копіювати у буфер обміну Скопійовано у буфер обміну diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 642c7752..21b0e8f9 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -30,6 +30,7 @@ Bật/tắt đèn Error toggling flash Chia sẻ + Share as file Chia sẻ dưới định dạng? Sao chép Đã sao chép diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 93784f21..30aa4470 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -30,6 +30,7 @@ 开关闪光灯 开关闪光灯出错 分享 + Share as file 以何种方式分享? 复制到剪贴板 已复制到剪贴板 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index be8a1632..fb26c7b6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -30,6 +30,7 @@ 控制閃光燈 控制閃光燈時發生錯誤 分享 + Share as file 您要以何種方式分享? 複製到剪貼簿 已複製到剪貼簿 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 264be617..db0544dd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,7 @@ Toggle flash Error toggling flash Share + Share as file Share as? Copy to clipboard Copied to clipboard