From 01019f1b0ae9635caaa5d1194c0296a6c06d1011 Mon Sep 17 00:00:00 2001 From: Markus Fisch Date: Thu, 23 Jul 2026 19:27:12 +0200 Subject: [PATCH 1/3] Add default camera preference Let users choose which available camera type the scanner opens with. Keep the existing overflow camera switch temporary, while persisting only the startup preference. Populate the setting from available camera types and fall back to the current back-camera behavior by default. --- .../binaryeye/activity/CameraActivity.kt | 36 ++++++----- .../android/binaryeye/camera/Cameras.kt | 59 +++++++++++++++++++ .../binaryeye/fragment/PreferencesFragment.kt | 18 ++++++ .../binaryeye/preference/Preferences.kt | 12 ++++ app/src/main/res/values-ar/strings.xml | 4 ++ app/src/main/res/values-bg/strings.xml | 4 ++ app/src/main/res/values-bn/strings.xml | 4 ++ app/src/main/res/values-cs/strings.xml | 4 ++ app/src/main/res/values-da/strings.xml | 4 ++ app/src/main/res/values-de/strings.xml | 4 ++ app/src/main/res/values-es/strings.xml | 4 ++ app/src/main/res/values-fa/strings.xml | 4 ++ app/src/main/res/values-fr/strings.xml | 4 ++ app/src/main/res/values-hu/strings.xml | 4 ++ app/src/main/res/values-in/strings.xml | 4 ++ app/src/main/res/values-it/strings.xml | 4 ++ app/src/main/res/values-ja/strings.xml | 4 ++ app/src/main/res/values-ka/strings.xml | 4 ++ app/src/main/res/values-ko/strings.xml | 4 ++ app/src/main/res/values-lv/strings.xml | 4 ++ app/src/main/res/values-nl/strings.xml | 4 ++ app/src/main/res/values-pl/strings.xml | 4 ++ app/src/main/res/values-pt-rBR/strings.xml | 4 ++ app/src/main/res/values-ru-rRU/strings.xml | 4 ++ app/src/main/res/values-tr/strings.xml | 4 ++ app/src/main/res/values-uk/strings.xml | 4 ++ app/src/main/res/values-vi/strings.xml | 4 ++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++ app/src/main/res/values-zh-rTW/strings.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ app/src/main/res/xml-v33/preferences.xml | 4 ++ app/src/main/res/xml/preferences.xml | 4 ++ 32 files changed, 222 insertions(+), 15 deletions(-) create mode 100644 app/src/main/kotlin/de/markusfisch/android/binaryeye/camera/Cameras.kt diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt index fd4f3a0d..8b2d62e0 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt @@ -20,7 +20,6 @@ import android.widget.SeekBar import android.widget.Spinner import androidx.appcompat.app.AppCompatActivity import androidx.camera.core.Camera -import androidx.camera.core.CameraSelector import androidx.camera.core.FocusMeteringAction import androidx.camera.core.ImageAnalysis import androidx.camera.core.ImageProxy @@ -47,6 +46,8 @@ import de.markusfisch.android.binaryeye.app.hasCameraPermission import de.markusfisch.android.binaryeye.app.prefs import de.markusfisch.android.binaryeye.automation.runAutomatedActions import de.markusfisch.android.binaryeye.bluetooth.sendBluetoothAsync +import de.markusfisch.android.binaryeye.camera.availableDefaultCameras +import de.markusfisch.android.binaryeye.camera.cameraSelector import de.markusfisch.android.binaryeye.content.copyToClipboard import de.markusfisch.android.binaryeye.content.startIntentOrToast import de.markusfisch.android.binaryeye.database.toScan @@ -112,7 +113,7 @@ class CameraActivity : AppCompatActivity() { private var returnResult = false private var returnUrlTemplate: String? = null private var finishAfterShowingResult = false - private var frontFacing = false + private var selectedCamera = prefs.defaultCamera private var bulkMode = prefs.bulkMode private var restrictFormat: String? = null private var searchTerm: Regex? = null @@ -343,7 +344,7 @@ class CameraActivity : AppCompatActivity() { override fun onRestoreInstanceState(savedState: Bundle) { super.onRestoreInstanceState(savedState) zoomBar.progress = savedState.getInt(ZOOM_LEVEL) - frontFacing = savedState.getBoolean(FRONT_FACING) + selectedCamera = savedState.getString(SELECTED_CAMERA, selectedCamera) bulkMode = savedState.getBoolean(BULK_MODE) restrictFormat = savedState.getString(RESTRICT_FORMAT) searchTerm = savedState.getString(SEARCH_TERM)?.toRegex() @@ -351,7 +352,7 @@ class CameraActivity : AppCompatActivity() { override fun onSaveInstanceState(outState: Bundle) { outState.putInt(ZOOM_LEVEL, zoomBar.progress) - outState.putBoolean(FRONT_FACING, frontFacing) + outState.putString(SELECTED_CAMERA, selectedCamera) outState.putBoolean(BULK_MODE, bulkMode) outState.putString(RESTRICT_FORMAT, restrictFormat) outState.putString(SEARCH_TERM, searchTerm?.toString()) @@ -450,7 +451,10 @@ class CameraActivity : AppCompatActivity() { } private fun switchCamera() { - frontFacing = frontFacing xor true + val cameras = availableDefaultCameras(this) + selectedCamera = cameras[ + (cameras.indexOf(selectedCamera) + 1).mod(cameras.size) + ] bindCameraUseCases() } @@ -738,15 +742,17 @@ class CameraActivity : AppCompatActivity() { analyzeImage(image) } - val cameraSelector = CameraSelector.Builder() - .requireLensFacing( - if (frontFacing) { - CameraSelector.LENS_FACING_FRONT - } else { - CameraSelector.LENS_FACING_BACK - } - ) - .build() + var cameraSelector = cameraSelector(selectedCamera) + if (!provider.hasCamera(cameraSelector)) { + selectedCamera = prefs.defaultCamera + cameraSelector = cameraSelector(selectedCamera) + } + if (!provider.hasCamera(cameraSelector)) { + selectedCamera = availableDefaultCameras(this) + .firstOrNull { provider.hasCamera(cameraSelector(it)) } + ?: selectedCamera + cameraSelector = cameraSelector(selectedCamera) + } try { provider.unbindAll() @@ -1017,7 +1023,7 @@ class CameraActivity : AppCompatActivity() { private const val PICK_FILE_RESULT_CODE = 1 private const val INITIAL_ZOOM = 0 private const val ZOOM_LEVEL = "zoom" - private const val FRONT_FACING = "front_facing" + private const val SELECTED_CAMERA = "selected_camera" private const val BULK_MODE = "bulk_mode" private const val RESTRICT_FORMAT = "restrict_format" private const val SEARCH_TERM = "search_term" diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/camera/Cameras.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/camera/Cameras.kt new file mode 100644 index 00000000..af35179d --- /dev/null +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/camera/Cameras.kt @@ -0,0 +1,59 @@ +package de.markusfisch.android.binaryeye.camera + +import android.annotation.SuppressLint +import android.content.Context +import android.hardware.camera2.CameraCharacteristics +import android.hardware.camera2.CameraManager +import androidx.camera.core.CameraSelector +import de.markusfisch.android.binaryeye.R + +const val DEFAULT_CAMERA_BACK = "back" +const val DEFAULT_CAMERA_FRONT = "front" +const val DEFAULT_CAMERA_OTHER = "other" + +fun availableDefaultCameras(context: Context): List { + val lensFacings = try { + (context.getSystemService(Context.CAMERA_SERVICE) as CameraManager) + .run { + cameraIdList.mapNotNull { id -> + getCameraCharacteristics(id) + .get(CameraCharacteristics.LENS_FACING) + } + }.toSet() + } catch (_: Exception) { + emptySet() + } + return buildList { + if (lensFacings.isEmpty() || + lensFacings.contains(CameraCharacteristics.LENS_FACING_BACK) + ) { + add(DEFAULT_CAMERA_BACK) + } + if (lensFacings.contains(CameraCharacteristics.LENS_FACING_FRONT)) { + add(DEFAULT_CAMERA_FRONT) + } + if (lensFacings.contains(CameraCharacteristics.LENS_FACING_EXTERNAL)) { + add(DEFAULT_CAMERA_OTHER) + } + } +} + +fun defaultCameraEntries(context: Context, values: List) = + values.map { + when (it) { + DEFAULT_CAMERA_FRONT -> context.getString(R.string.default_camera_front) + DEFAULT_CAMERA_OTHER -> context.getString(R.string.default_camera_other) + else -> context.getString(R.string.default_camera_back) + } + }.toTypedArray() + +@SuppressLint("UnsafeOptInUsageError") +fun cameraSelector(camera: String) = CameraSelector.Builder() + .requireLensFacing( + when (camera) { + DEFAULT_CAMERA_FRONT -> CameraSelector.LENS_FACING_FRONT + DEFAULT_CAMERA_OTHER -> CameraSelector.LENS_FACING_EXTERNAL + else -> CameraSelector.LENS_FACING_BACK + } + ) + .build() diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt index b8ff55d4..083be1f9 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt @@ -31,6 +31,8 @@ import de.markusfisch.android.binaryeye.adapter.prettifyFormatName import de.markusfisch.android.binaryeye.app.hasBluetoothPermission import de.markusfisch.android.binaryeye.app.prefs import de.markusfisch.android.binaryeye.bluetooth.setBluetoothHosts +import de.markusfisch.android.binaryeye.camera.availableDefaultCameras +import de.markusfisch.android.binaryeye.camera.defaultCameraEntries import de.markusfisch.android.binaryeye.media.beepConfirm import de.markusfisch.android.binaryeye.preference.Preferences import de.markusfisch.android.binaryeye.preference.UrlPreference @@ -101,6 +103,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { setIcons() wireBeepTonePicker() + setDefaultCameras() wireProfiles() wireAutomatedActions() wireIgnoreCodes() @@ -142,6 +145,19 @@ class PreferencesFragment : PreferenceFragmentCompat() { } } + private fun setDefaultCameras() { + findPreference(DEFAULT_CAMERA)?.apply { + val values = availableDefaultCameras(requireContext()) + entries = defaultCameraEntries(requireContext(), values) + entryValues = values.toTypedArray() + if (!values.contains(value)) { + value = values.firstOrNull() + } + isVisible = values.size > 1 + setSummary(this) + } + } + private fun wireAutomatedActions() { findPreference(AUTOMATED_ACTIONS)?.apply { updateAutomatedActionsSummary(this) @@ -340,6 +356,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { setIcon("auto_rotate", R.drawable.ic_action_down) setIcon("try_harder", R.drawable.ic_action_search) setIcon("bulk_mode", R.drawable.ic_action_bulk_mode) + setIcon(DEFAULT_CAMERA, R.drawable.ic_action_switch_camera) setIcon("bulk_mode_delay", R.drawable.ic_action_delay) setIcon("show_toast_in_bulk_mode", R.drawable.ic_action_toast) setIcon("vibrate", R.drawable.ic_action_vibrate) @@ -482,6 +499,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { private const val CLEAR_NETWORK_SUGGESTIONS = "clear_network_suggestions" private const val CUSTOM_LOCALE = "custom_locale" private const val DYNAMIC_COLORS = "dynamic_colors" + private const val DEFAULT_CAMERA = "default_camera" private const val IGNORE_CODES = "ignore_codes" private const val SEND_SCAN_BLUETOOTH = "send_scan_bluetooth" private const val SEND_SCAN_BLUETOOTH_HOST = "send_scan_bluetooth_host" diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt index 2b5a89c1..65c75b36 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt @@ -99,6 +99,11 @@ class Preferences { apply(BULK_MODE, value) field = value } + var defaultCamera = "back" + set(value) { + apply(DEFAULT_CAMERA, value) + field = value + } var bulkModeDelay = "500" set(value) { apply(BULK_MODE_DELAY, value) @@ -372,6 +377,7 @@ class Preferences { json.put(AUTO_ROTATE, p, defaults.autoRotate) json.put(TRY_HARDER, p, defaults.tryHarder) json.put(BULK_MODE, p, defaults.bulkMode) + json.put(DEFAULT_CAMERA, p, defaults.defaultCamera) json.put(BULK_MODE_DELAY, p, defaults.bulkModeDelay) json.put(SHOW_TOAST_IN_BULK_MODE, p, defaults.showToastInBulkMode) json.put(VIBRATE, p, defaults.vibrate) @@ -471,6 +477,7 @@ class Preferences { putBoolean(AUTO_ROTATE, json) putBoolean(TRY_HARDER, json) putBoolean(BULK_MODE, json) + putString(DEFAULT_CAMERA, json) putString(BULK_MODE_DELAY, json) putBoolean(SHOW_TOAST_IN_BULK_MODE, json) putBoolean(VIBRATE, json) @@ -553,6 +560,9 @@ class Preferences { autoRotate = preferences.getBoolean(AUTO_ROTATE, autoRotate) tryHarder = preferences.getBoolean(TRY_HARDER, tryHarder) bulkMode = preferences.getBoolean(BULK_MODE, bulkMode) + preferences.getString(DEFAULT_CAMERA, defaultCamera)?.also { + defaultCamera = it + } bulkModeDelay = preferences.getString( BULK_MODE_DELAY, bulkModeDelay @@ -796,6 +806,7 @@ class Preferences { putBoolean(AUTO_ROTATE, defaults.autoRotate) putBoolean(TRY_HARDER, defaults.tryHarder) putBoolean(BULK_MODE, defaults.bulkMode) + putString(DEFAULT_CAMERA, defaults.defaultCamera) putString(BULK_MODE_DELAY, defaults.bulkModeDelay) putBoolean(SHOW_TOAST_IN_BULK_MODE, defaults.showToastInBulkMode) putBoolean(VIBRATE, defaults.vibrate) @@ -903,6 +914,7 @@ class Preferences { private const val AUTO_ROTATE = "auto_rotate" private const val TRY_HARDER = "try_harder" private const val BULK_MODE = "bulk_mode" + private const val DEFAULT_CAMERA = "default_camera" private const val BULK_MODE_DELAY = "bulk_mode_delay" private const val SHOW_TOAST_IN_BULK_MODE = "show_toast_in_bulk_mode" private const val VIBRATE = "vibrate" diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e8d6f01a..24ba04d0 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -66,6 +66,10 @@ عرض رمز Barcode معلومات تبديل الكاميرا + الكاميرا الافتراضية + الكاميرا الخلفية (الافتراضية) + الكاميرا الأمامية + كاميرا أخرى المسح بشكل مستمر ابدأ المسح دائمًا بشكل مستمر. الفارق الزمني بين عمليات المسح المستمرة diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 442120fd..3c6202d6 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -62,6 +62,10 @@ Вижте баркода Информация Превключване на камерата + Камера по подразбиране + Задна камера (по подразбиране) + Предна камера + Друга камера Сканирайте непрекъснато Винаги започвай непрекъснато сканиране. Забавяне между непрекъснатите сканирания diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index e659a357..640cabe5 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -62,6 +62,10 @@ বারকোড দেখো তথ্য ক্যামেরা পাল্টাও + ডিফল্ট ক্যামেরা + পেছনের ক্যামেরা (ডিফল্ট) + সামনের ক্যামেরা + অন্য ক্যামেরা ধারাবাহিকভাবে খুঁজো শুরুতে সবসময় ধারাবাহিকভাবে খুঁজো একটি অবিরত স্ক্যান মধ্যে বিলম্ব diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 5466f3e1..64c276eb 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -64,6 +64,10 @@ Zobrazit čárový kód Informace Přepnout kameru + Výchozí kamera + Zadní kamera (výchozí) + Přední kamera + Jiná kamera Skenovat nepřetržitě Vždy začít v módu nepřetržitého skenování. Prodleva mezi skeny diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index ddc36e6b..00e1820e 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -62,6 +62,10 @@ Vis stregkode Info Skift kamera + Standardkamera + Bagkamera (standard) + Frontkamera + Andet kamera Scan kontinuerligt Begynd altid ved at scanne kontinuerligt. Forsinkelse mellem kontinuerlige scanninger diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 95b9dc29..706770d6 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -62,6 +62,10 @@ Barcode ansehen Info Kamera wechseln + Standardkamera + Rückkamera (Standard) + Frontkamera + Andere Kamera Fortlaufend Scannen Immer mit fortlaufendem Scannen starten. Pause zwischen fortlaufenden Scans diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d62d9773..911812bd 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -63,6 +63,10 @@ Ver código de barras Información Cambiar cámara + Cámara predeterminada + Cámara trasera (predeterminada) + Cámara frontal + Otra cámara Escaneo continuo Iniciar siempre en modo de escaneo continuo Demora entre escaneos continuos diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 04ff3b76..2315ca82 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -62,6 +62,10 @@ نمایش بارکد اطّلاعات تغییر دوربین + دوربین پیش‌فرض + دوربین پشت (پیش‌فرض) + دوربین جلو + دوربین دیگر به طور مداوم پویش کن همیشه پویش را به طور مداوم شروع می‌کند. تأخیر بین پویش‌های مداوم diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9703ffcc..a0f474a8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -63,6 +63,10 @@ Voir le code-barres Informations Changer de caméra + Appareil photo par défaut + Caméra arrière (par défaut) + Caméra avant + Autre caméra Scanner en continu Toujours démarrer avec le scan en continu. Délai entre les scans continus diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index c29a0311..d44ba2b7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -62,6 +62,10 @@ Vonalkód megtekintése Információ Kamera átkapcsolása + Alapértelmezett kamera + Hátlapi kamera (alapértelmezett) + Előlapi kamera + Másik kamera Beolvasás folyamatosan Mindig folyamatos beolvasást indítson. Folyamatos beolvasások közti késleltetés diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index fb7a0ba4..790755fd 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -61,6 +61,10 @@ Lihat barcode Informazioni Ganti kamera + Kamera default + Kamera belakang (default) + Kamera depan + Kamera lain Pindai tanpa henti Selalu mulai pemindaian tanpa henti. Tundaan antara pemindaian tanpa henti diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index cb82eb02..f4e0f31d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -70,6 +70,10 @@ Visualizza codice a barre Info Cambia fotocamera + Fotocamera predefinita + Fotocamera posteriore (predefinita) + Fotocamera anteriore + Altra fotocamera Scansione continua Avvia sempre la scansione in modo continuo. Ritardo tra scansioni continue diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f13a3c29..867232da 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -61,6 +61,10 @@ バーコードを確認 ソースコード カメラを切り替え + デフォルトのカメラ + 背面カメラ(デフォルト) + 前面カメラ + その他のカメラ まとめてスキャンする 常に連続してスキャンを行います。 連続スキャンの間隔 diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 4d9eef51..c1160ee6 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -62,6 +62,10 @@ შტრიხ-კოდის ნახვა ინფორმაცია კამერის გადართვა + ნაგულისხმევი კამერა + უკანა კამერა (ნაგულისხმევი) + წინა კამერა + სხვა კამერა სკანირება უწყვეტად ყოველთვის დაიწყეთ სკანირება უწყვეტად. განაგრძეთ გადანომრვას შორის შეზღუდვა diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 88ce2cd1..7b5e5888 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -61,6 +61,10 @@ 보기 바코드 정보 카메라 전환 + 기본 카메라 + 후면 카메라(기본) + 전면 카메라 + 다른 카메라 지속적으로 스캔 항상 지속적으로 스캔을 시작합니다. 연속 스캔 간의 지연 diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 52502a3c..fc86cfb0 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -128,6 +128,10 @@ Trūkst satura Svītrkodu nevar izveidot Pārslēgt kameru + Noklusējuma kamera + Aizmugurējā kamera (noklusējuma) + Priekšējā kamera + Cita kamera Skenēt nepārtraukti Vienmēr sākt nepārtrauktu skenēšanu. Aizture starp nepārtrauktām skenēšanām diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2a02dd53..eebdd479 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -62,6 +62,10 @@ Barcode bekijken Informatie Camera wisselen + Standaardcamera + Camera achter (standaard) + Camera voor + Andere camera Continu scannen Begin altijd continu te scannen Vertraging tussen ononderbroken scans diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 43c22a20..954beb37 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -96,6 +96,10 @@ Pokazuj metadane Pokaż dodatkowe dane o zeskanowanym kodzie kreskowym. Przełącz aparat + Domyślny aparat + Tylny aparat (domyślny) + Przedni aparat + Inny aparat Skanuj w sposób ciągły Zawsze rozpoczynaj skanowanie w sposób ciągły. Opóźnienie między kolejnymi skanami diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 99622227..2e5e2e9f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -62,6 +62,10 @@ Ver código de barras Informações Trocar câmera + Câmera padrão + Câmera traseira (padrão) + Câmera frontal + Outra câmera Digitalizar continuamente Sempre iniciar digitalizando continuamente. Espera entre digitalizações contínuas diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index f9780b66..b0452267 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -64,6 +64,10 @@ Просмотр штрих-кода Инфо Переключить камеру + Камера по умолчанию + Задняя камера (по умолчанию) + Передняя камера + Другая камера Непрерывное сканирование Всегда запускать непрерывное сканирование. Задержка непрерывного сканирования diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 1bda28f0..666ed020 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -62,6 +62,10 @@ Barkodu gör Bilgi Kamerayı değiştir + Varsayılan kamera + Arka kamera (varsayılan) + Ön kamera + Diğer kamera Sürekli tara Her zaman sürekli taramaya başla. Sürekli taramalar arasındaki gecikme diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 035020a2..bdbdd0de 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -64,6 +64,10 @@ Переглянути штрих-код Інфо Переключити камеру + Камера за замовчуванням + Задня камера (за замовчуванням) + Передня камера + Інша камера Сканувати безперервно Завжди починати безперервне сканування. Затримка між безперервним скануванням diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index c666a9c9..348f14a1 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -61,6 +61,10 @@ Xem mã vạch Thông tin Đổi camera + Camera mặc định + Camera sau (mặc định) + Camera trước + Camera khác Quét liên tục Luôn quét liên tục. Thời gian giữa các lần quét diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index abe4f3e5..0e05cff7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -61,6 +61,10 @@ 查看条码 关于 切换摄像头 + 默认摄像头 + 后置摄像头(默认) + 前置摄像头 + 其他摄像头 连续扫描 始终开启连续扫描。 连续扫描之间的延迟 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 257c11c6..e017108e 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -61,6 +61,10 @@ 檢視條碼 關於 切換相機 + 預設相機 + 後置相機(預設) + 前置相機 + 其他相機 連續掃描 始終開啟連續掃描 連續掃描間的延遲 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f44f9769..3fe8d6e9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -72,6 +72,10 @@ Switch camera Scan continuously Always start scanning continuously. + Default camera + Back camera (default) + Front camera + Other camera Delay between continuous scans Restrict format Remove restriction diff --git a/app/src/main/res/xml-v33/preferences.xml b/app/src/main/res/xml-v33/preferences.xml index 25073a2b..85c2167e 100644 --- a/app/src/main/res/xml-v33/preferences.xml +++ b/app/src/main/res/xml-v33/preferences.xml @@ -44,6 +44,10 @@ android:key="bulk_mode" android:title="@string/bulk_mode" android:summary="@string/bulk_mode_summary"/> + + Date: Fri, 24 Jul 2026 18:29:48 +0200 Subject: [PATCH 2/3] Forward scans with KDE Connect Add a KDE Connect forwarding option that sends scan text to the exported remote input activity via a text/x-keystrokes intent. --- .../binaryeye/activity/CameraActivity.kt | 4 +++ .../android/binaryeye/content/Share.kt | 2 ++ .../binaryeye/fragment/PreferencesFragment.kt | 2 ++ .../binaryeye/kdeconnect/KdeConnectSender.kt | 30 +++++++++++++++++++ .../binaryeye/preference/Preferences.kt | 13 ++++++++ app/src/main/res/values-ar/strings.xml | 2 ++ app/src/main/res/values-bg/strings.xml | 2 ++ app/src/main/res/values-bn/strings.xml | 2 ++ app/src/main/res/values-cs/strings.xml | 2 ++ app/src/main/res/values-da/strings.xml | 2 ++ app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-es/strings.xml | 2 ++ app/src/main/res/values-fa/strings.xml | 2 ++ app/src/main/res/values-fr/strings.xml | 2 ++ app/src/main/res/values-hu/strings.xml | 2 ++ app/src/main/res/values-in/strings.xml | 2 ++ app/src/main/res/values-it/strings.xml | 2 ++ app/src/main/res/values-ja/strings.xml | 2 ++ app/src/main/res/values-ka/strings.xml | 2 ++ app/src/main/res/values-ko/strings.xml | 2 ++ app/src/main/res/values-lv/strings.xml | 2 ++ app/src/main/res/values-nl/strings.xml | 2 ++ app/src/main/res/values-pl/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 2 ++ app/src/main/res/values-ru-rRU/strings.xml | 2 ++ app/src/main/res/values-tr/strings.xml | 2 ++ app/src/main/res/values-uk/strings.xml | 2 ++ app/src/main/res/values-vi/strings.xml | 2 ++ app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml-v33/preferences.xml | 5 ++++ app/src/main/res/xml/preferences.xml | 5 ++++ .../kdeconnect/KdeConnectSenderTest.kt | 24 +++++++++++++++ 34 files changed, 137 insertions(+) create mode 100644 app/src/main/kotlin/de/markusfisch/android/binaryeye/kdeconnect/KdeConnectSender.kt create mode 100644 app/src/test/kotlin/de/markusfisch/android/binaryeye/kdeconnect/KdeConnectSenderTest.kt diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt index 8b2d62e0..90fb4026 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/CameraActivity.kt @@ -57,6 +57,7 @@ import de.markusfisch.android.binaryeye.graphics.mapViewYToFrame import de.markusfisch.android.binaryeye.graphics.setCovered import de.markusfisch.android.binaryeye.graphics.setFrameRoi import de.markusfisch.android.binaryeye.graphics.setFrameToView +import de.markusfisch.android.binaryeye.kdeconnect.sendToKdeConnect import de.markusfisch.android.binaryeye.media.releaseToneGenerators import de.markusfisch.android.binaryeye.net.isScanDeeplink import de.markusfisch.android.binaryeye.net.sendAsync @@ -1085,6 +1086,9 @@ fun Activity.showResult( ) } } + if (prefs.sendScanKdeConnect && !bulkMode) { + sendToKdeConnect(scan) + } if (runAutomatedActions(scan)) { return } 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 8748590d..7b8ebb4a 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 @@ -37,6 +37,8 @@ fun Context.startIntent(intent: Intent): Boolean = try { true } catch (_: ActivityNotFoundException) { false +} catch (_: SecurityException) { + false } fun Context.openUrl(url: String, silent: Boolean = false): Boolean { diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt index 083be1f9..18060f3b 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/fragment/PreferencesFragment.kt @@ -373,6 +373,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { setIcon("send_scan_device_id", R.drawable.ic_label) setIcon(SEND_SCAN_BLUETOOTH, R.drawable.ic_action_bluetooth) setIcon(SEND_SCAN_BLUETOOTH_HOST, R.drawable.ic_action_bluetooth) + setIcon(SEND_SCAN_KDE_CONNECT, R.drawable.ic_action_forward) setIcon("open_immediately", R.drawable.ic_action_open) setIcon("strip_tracking_params", R.drawable.ic_action_remove) setIcon("show_meta_data", R.drawable.ic_action_info) @@ -503,6 +504,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { private const val IGNORE_CODES = "ignore_codes" private const val SEND_SCAN_BLUETOOTH = "send_scan_bluetooth" private const val SEND_SCAN_BLUETOOTH_HOST = "send_scan_bluetooth_host" + private const val SEND_SCAN_KDE_CONNECT = "send_scan_kde_connect" } } diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/kdeconnect/KdeConnectSender.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/kdeconnect/KdeConnectSender.kt new file mode 100644 index 00000000..8e42048a --- /dev/null +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/kdeconnect/KdeConnectSender.kt @@ -0,0 +1,30 @@ +package de.markusfisch.android.binaryeye.kdeconnect + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import de.markusfisch.android.binaryeye.content.startIntentOrToast +import de.markusfisch.android.binaryeye.database.Scan + +private const val KDE_CONNECT_PACKAGE = "org.kde.kdeconnect_tp" +private const val KDE_CONNECT_KEYSTROKES_ACTIVITY = + "org.kde.kdeconnect.plugins.mousepad.SendKeystrokesToHostActivity" +private const val KEYSTROKES_MIME_TYPE = "text/x-keystrokes" + +fun Context.sendToKdeConnect(scan: Scan): Boolean { + if (scan.text.isEmpty()) { + return false + } + return startIntentOrToast(createKdeConnectIntent(scan.text)) +} + +fun createKdeConnectIntent(text: String): Intent { + return Intent(Intent.ACTION_SEND).apply { + component = ComponentName( + KDE_CONNECT_PACKAGE, + KDE_CONNECT_KEYSTROKES_ACTIVITY + ) + type = KEYSTROKES_MIME_TYPE + putExtra(Intent.EXTRA_TEXT, text) + } +} diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt index 65c75b36..ee41af50 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt @@ -231,6 +231,11 @@ class Preferences { apply(SEND_SCAN_BLUETOOTH_HOST, value) field = value } + var sendScanKdeConnect = false + set(value) { + apply(SEND_SCAN_KDE_CONNECT, value) + field = value + } var customLocale: String = "" set(value) { // Make sure this setting is written immediately because @@ -404,6 +409,7 @@ class Preferences { json.put(SEND_SCAN_DEVICE_ID, p, defaults.sendScanDeviceId) json.put(SEND_SCAN_BLUETOOTH, p, defaults.sendScanBluetooth) json.put(SEND_SCAN_BLUETOOTH_HOST, p, defaults.sendScanBluetoothHost) + json.put(SEND_SCAN_KDE_CONNECT, p, defaults.sendScanKdeConnect) json.put(CUSTOM_LOCALE, p, defaults.customLocale) json.put(INDEX_OF_LAST_SELECTED_FORMAT, p, defaults.indexOfLastSelectedFormat) json.put(INDEX_OF_LAST_SELECTED_EC_LEVEL, p, defaults.indexOfLastSelectedEcLevel) @@ -504,6 +510,7 @@ class Preferences { putString(SEND_SCAN_DEVICE_ID, json) putBoolean(SEND_SCAN_BLUETOOTH, json) putString(SEND_SCAN_BLUETOOTH_HOST, json) + putBoolean(SEND_SCAN_KDE_CONNECT, json) putString(CUSTOM_LOCALE, json) putInt(INDEX_OF_LAST_SELECTED_FORMAT, json) putInt(INDEX_OF_LAST_SELECTED_EC_LEVEL, json) @@ -658,6 +665,10 @@ class Preferences { )?.also { sendScanBluetoothHost = it } + sendScanKdeConnect = preferences.getBoolean( + SEND_SCAN_KDE_CONNECT, + sendScanKdeConnect + ) preferences.getString(CUSTOM_LOCALE, customLocale)?.also { customLocale = it } @@ -833,6 +844,7 @@ class Preferences { putString(SEND_SCAN_DEVICE_ID, defaults.sendScanDeviceId) putBoolean(SEND_SCAN_BLUETOOTH, defaults.sendScanBluetooth) putString(SEND_SCAN_BLUETOOTH_HOST, defaults.sendScanBluetoothHost) + putBoolean(SEND_SCAN_KDE_CONNECT, defaults.sendScanKdeConnect) putString(CUSTOM_LOCALE, defaults.customLocale) putInt(INDEX_OF_LAST_SELECTED_FORMAT, defaults.indexOfLastSelectedFormat) putInt(INDEX_OF_LAST_SELECTED_EC_LEVEL, defaults.indexOfLastSelectedEcLevel) @@ -941,6 +953,7 @@ class Preferences { private const val SEND_SCAN_DEVICE_ID = "send_scan_device_id" private const val SEND_SCAN_BLUETOOTH = "send_scan_bluetooth" private const val SEND_SCAN_BLUETOOTH_HOST = "send_scan_bluetooth_host" + private const val SEND_SCAN_KDE_CONNECT = "send_scan_kde_connect" private const val CUSTOM_LOCALE = "custom_locale" private const val INDEX_OF_LAST_SELECTED_FORMAT = "index_of_last_selected_format" private const val INDEX_OF_LAST_SELECTED_EC_LEVEL = "index_of_last_selected_ec_level" diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 24ba04d0..2af60b68 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -219,6 +219,8 @@ إرسال عمليات المسح عبر بلوتوث تمكين إرسال عمليات المسح إلى مضيف بلوتوث معين. المضيف + إرسال عمليات المسح عبر KDE Connect + فعّل لكتابة عمليات المسح على جهاز KDE Connect مقترن. لا يوجد اقتران مع مضيفين تعذر الاتصال بجهاز بلوتوث. تعذر الإرسال إلى جهاز بلوتوث. diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 3c6202d6..eb8875f6 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -207,6 +207,8 @@ Препращане на сканиранията с Bluetooth Активиране на препращане на сканирания към даден Bluetooth хост. Хост + Препращане на сканиранията с KDE Connect + Активиране на въвеждане на сканиранията на сдвоено устройство KDE Connect. Няма сдвоени хостове Неуспешно свързване с Bluetooth устройство. Неуспешно изпращане до Bluetooth устройство. diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 640cabe5..ef847f1a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -207,6 +207,8 @@ ব্লুটুথ দিয়ে স্ক্যান ফরোয়ার্ড করুন Enable to forwards scans to a given Bluetooth host. হোস্ট + KDE Connect দিয়ে স্ক্যান ফরোয়ার্ড করুন + জোড়া দেওয়া KDE Connect ডিভাইসে স্ক্যান টাইপ করতে সক্রিয় করুন। কোন হোস্ট পেয়ার করা হয়নি Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 64c276eb..4b8539af 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -213,6 +213,8 @@ Přesměrovat skeny přes Bluetooth Skeny se přesměrují na daného hostitele Bluetooth. Hostitel + Přesměrovat skeny přes KDE Connect + Zapnout psaní skenů na spárovaném zařízení KDE Connect. Není spárován žádný hostitel Nelze se připojit k zařízení Bluetooth. Nelze odesílat na zařízení Bluetooth. diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 00e1820e..4f5a6c8c 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -207,6 +207,8 @@ Send scanninger med Bluetooth Enable to forwards scans to a given Bluetooth host. Vært + Send scanninger med KDE Connect + Aktivér for at skrive scanninger på en parret KDE Connect-enhed. Ingen værter parret Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 706770d6..c1f6a332 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -207,6 +207,8 @@ Scans per Bluetooth weiterleiten Aktivieren Sie diese Option, um Scans an das angegebene Bluetooth-Gerät weiterzuleiten. Gerät + Scans mit KDE Connect weiterleiten + Aktivieren Sie diese Option, um Scans auf einem gekoppelten KDE-Connect-Gerät einzugeben. Keine Geräte verbunden Es kann leider keine Verbindung zum Bluetooth-Gerät hergestellt werden Senden zum Bluetooth-Gerät fehlgeschlagen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 911812bd..d739997b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -208,6 +208,8 @@ Enviar escaneos con Bluetooth Habilita el envío de escaneos a un host Bluetooth. Anfitrión + Enviar escaneos con KDE Connect + Activa esta opción para escribir escaneos en un dispositivo KDE Connect emparejado. Ningún host emparejado No se pudo conectar a un dispositivo bluetooth. No se pudo enviar a un dispositivo bluetooth. diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 2315ca82..7e03a477 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -207,6 +207,8 @@ انتقال اسکن ها با بلوتوث برای ارسال اسکن‌ها به میزبان Bluetooth مشخص فعال کنید. میزبان + انتقال اسکن‌ها با KDE Connect + برای تایپ اسکن‌ها روی دستگاه KDE Connect جفت‌شده فعال کنید. میزبان های جفت نشده اتصال به دستگاه Bluetooth ممکن نشد. ارسال به دستگاه Bluetooth ممکن نشد. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a0f474a8..62554587 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -208,6 +208,8 @@ Partager les scans par Bluetooth Partager les scans à un hôte Bluetooth donné. Hôte + Partager les scans avec KDE Connect + Activez cette option pour saisir les scans sur un appareil KDE Connect appairé. Aucun hôte appairé Impossible de se connecter à l\'appareil Bluetooth. Impossible d\'envoyer à l\'appareil Bluetooth. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d44ba2b7..4c20365a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -207,6 +207,8 @@ Bluetooth segítségével továbbítás Enable to forwards scans to a given Bluetooth host. Host + Továbbítás KDE Connecttel + Engedélyezze a beolvasások beírását egy párosított KDE Connect-eszközön. Nincsenek párosított hosztok Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 790755fd..dfcf1d45 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -205,6 +205,8 @@ Reenviar exploraciones con Bluetooth Enable to forwards scans to a given Bluetooth host. مضيف + Teruskan pemindaian dengan KDE Connect + Aktifkan untuk mengetik hasil pemindaian pada perangkat KDE Connect yang dipasangkan. No Hosts Paired Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f4e0f31d..751f6f36 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -222,6 +222,8 @@ Inoltra scansioni con Bluetooth Abilita per inoltrare le scansioni ad un determinato host Bluetooth. Host + Inoltra scansioni con KDE Connect + Abilita per digitare le scansioni su un dispositivo KDE Connect associato. Nessun host associato Impossibile connettersi al dispositivo Bluetooth. Impossibile inviare al dispositivo Bluetooth. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 867232da..36db34a8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -205,6 +205,8 @@ Bluetooth でスキャンを転送 Enable to forwards scans to a given Bluetooth host. ホスト + KDE Connect でスキャンを転送 + ペアリング済みの KDE Connect デバイスでスキャン内容を入力します。 ホストがペアリングされていません Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index c1160ee6..48b6dab5 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -207,6 +207,8 @@ სკანების გადაგზავნა Bluetooth-ით Enable to forwards scans to a given Bluetooth host. ჰოსტი + სკანების გადაგზავნა KDE Connect-ით + ჩართეთ, რომ სკანები დაწეროს დაწყვილებულ KDE Connect მოწყობილობაზე. პარიები არ არის შემერთებული Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 7b5e5888..1d1c2199 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -205,6 +205,8 @@ 블루투스로 스캔 전송 스캔을 지정한 Bluetooth 호스트로 전달합니다. 호스트 + KDE Connect로 스캔 전송 + 페어링된 KDE Connect 장치에 스캔을 입력합니다. 연결된 호스트가 없습니다 Bluetooth 장치에 연결할 수 없습니다. Bluetooth 장치로 보낼 수 없습니다. diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index fc86cfb0..b28ce03b 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -255,6 +255,8 @@ Pārsūtīt skenējumus ar Bluetooth Iespējojiet, lai pārsūtītu skenējumus uz noteiktu Bluetooth resursdatoru. Resursdators + Pārsūtīt skenējumus ar KDE Connect + Iespējojiet, lai rakstītu skenējumus pārī savienotā KDE Connect ierīcē. Nav sapārotu resursdatoru Neizdevās izveidot savienojumu ar Bluetooth ierīci. Neizdevās nosūtīt uz Bluetooth ierīci. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index eebdd479..343a7a28 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -207,6 +207,8 @@ Stuur scans door met Bluetooth Enable to forwards scans to a given Bluetooth host. Host + Stuur scans door met KDE Connect + Schakel in om scans te typen op een gekoppeld KDE Connect-apparaat. Geen hosts gekoppeld Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 954beb37..1b4dc435 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -226,6 +226,8 @@ Przekazuj skany za pomocą Bluetooth Enable to forwards scans to a given Bluetooth host. Gospodarz + Przekazuj skany za pomocą KDE Connect + Włącz, aby wpisywać skany na sparowanym urządzeniu KDE Connect. Brak sparowanych hostów Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2e5e2e9f..7de91733 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -207,6 +207,8 @@ Encaminhar digitalizações com Bluetooth Ative para encaminhar digitalizações a um determinado host Bluetooth. Anfitrião + Encaminhar digitalizações com KDE Connect + Ative para digitar digitalizações em um dispositivo KDE Connect pareado. Nenhum Host Pareado Não foi possível conectar com o dispositivo Bluetooth. Não foi possível enviar para o dispositivo Bluetooth. diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index b0452267..aa28a4aa 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -213,6 +213,8 @@ Отправлять сканирования по bluetooth Пересылать сканированные данные на указанный узел bluetooth. Узел + Отправлять сканирования через KDE Connect + Включите, чтобы вводить сканирования на сопряжённом устройстве KDE Connect. Нет сопряжённых узлов Невозможно подключиться к bluetooth-устройству. Невозможно отправить на bluetooth-устройство. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 666ed020..24568b57 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -207,6 +207,8 @@ Taramaları Bluetooth ile ilet Taramaları belirtilen bir Bluetooth aygıtına iletmeyi etkinleştirin Aygıt + Taramaları KDE Connect ile ilet + Taramaları eşleştirilmiş bir KDE Connect aygıtında yazmayı etkinleştirin. Eşleştirilen Aygıt Yok Bluetooth aygıtına bağlanılamadı. Bluetooth aygıtına gönderilemedi. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index bdbdd0de..312ec9bd 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -213,6 +213,8 @@ Пересилати сканування через Bluetooth Увімкнути пересилання сканованих даних на вказаний хост Bluetooth. Хост + Пересилати сканування через KDE Connect + Увімкніть, щоб вводити сканування на сполученому пристрої KDE Connect. Немає хостів у сполучених Неможливо підключитися до пристрою Bluetooth. Неможливо надіслати на пристрій Bluetooth. diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 348f14a1..42386b9d 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -205,6 +205,8 @@ Chuyển tiếp quét với Bluetooth Enable to forwards scans to a given Bluetooth host. Máy chủ + Chuyển tiếp quét bằng KDE Connect + Bật để nhập nội dung quét trên thiết bị KDE Connect đã ghép đôi. Không có Host nào được kết nối Could not connect to bluetooth device. Could not send to bluetooth device. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0e05cff7..02c3a6ad 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -205,6 +205,8 @@ 使用蓝牙转发扫描结果 启用以转发扫描结果至指定的蓝牙服务设备。 蓝牙服务器 + 使用 KDE Connect 转发扫描结果 + 启用后在已配对的 KDE Connect 设备上输入扫描结果。 没有已配对的服务器 无法连接蓝牙设备。 无法将结果发送至蓝牙设备。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e017108e..4b31b2e6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -205,6 +205,8 @@ 透過藍牙轉發掃描 啟用以將掃描轉發到指定藍牙裝置 主機 + 透過 KDE Connect 轉發掃描 + 啟用以在已配對的 KDE Connect 裝置上輸入掃描內容。 沒有配對主機 無法連線到藍牙裝置 無法傳送到藍牙裝置 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3fe8d6e9..fdc6cc8e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -222,6 +222,8 @@ Forward scans with Bluetooth Enable to forward scans to a given Bluetooth host. Host + Forward scans with KDE Connect + Enable to type scans on a paired KDE Connect device. No hosts paired Could not connect to Bluetooth device. Could not send to Bluetooth device. diff --git a/app/src/main/res/xml-v33/preferences.xml b/app/src/main/res/xml-v33/preferences.xml index 85c2167e..492c1810 100644 --- a/app/src/main/res/xml-v33/preferences.xml +++ b/app/src/main/res/xml-v33/preferences.xml @@ -131,6 +131,11 @@ android:entries="@array/bluetooth_host_names" android:entryValues="@array/bluetooth_host_values" android:defaultValue="@string/no_bluetooth_hosts_paired_value"/> + + Date: Fri, 26 Jun 2026 17:00:52 +0200 Subject: [PATCH 3/3] Update strings.xml --- app/src/main/res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 751f6f36..f8f8e064 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -223,7 +223,7 @@ Abilita per inoltrare le scansioni ad un determinato host Bluetooth. Host Inoltra scansioni con KDE Connect - Abilita per digitare le scansioni su un dispositivo KDE Connect associato. + Abilita per acquisire le scansioni su un dispositivo KDE Connect associato. Nessun host associato Impossibile connettersi al dispositivo Bluetooth. Impossibile inviare al dispositivo Bluetooth.