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..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 @@ -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 @@ -56,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 @@ -112,7 +114,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 +345,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 +353,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 +452,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 +743,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 +1024,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" @@ -1079,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/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/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 b8ff55d4..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 @@ -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) @@ -356,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) @@ -482,9 +500,11 @@ 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" + 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 2b5a89c1..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 @@ -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) @@ -226,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 @@ -372,6 +382,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) @@ -398,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) @@ -471,6 +483,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) @@ -497,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) @@ -553,6 +567,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 @@ -648,6 +665,10 @@ class Preferences { )?.also { sendScanBluetoothHost = it } + sendScanKdeConnect = preferences.getBoolean( + SEND_SCAN_KDE_CONNECT, + sendScanKdeConnect + ) preferences.getString(CUSTOM_LOCALE, customLocale)?.also { customLocale = it } @@ -796,6 +817,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) @@ -822,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) @@ -903,6 +926,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" @@ -929,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 e8d6f01a..2af60b68 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -66,6 +66,10 @@ عرض رمز Barcode معلومات تبديل الكاميرا + الكاميرا الافتراضية + الكاميرا الخلفية (الافتراضية) + الكاميرا الأمامية + كاميرا أخرى المسح بشكل مستمر ابدأ المسح دائمًا بشكل مستمر. الفارق الزمني بين عمليات المسح المستمرة @@ -215,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 442120fd..eb8875f6 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -62,6 +62,10 @@ Вижте баркода Информация Превключване на камерата + Камера по подразбиране + Задна камера (по подразбиране) + Предна камера + Друга камера Сканирайте непрекъснато Винаги започвай непрекъснато сканиране. Забавяне между непрекъснатите сканирания @@ -203,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 e659a357..ef847f1a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -62,6 +62,10 @@ বারকোড দেখো তথ্য ক্যামেরা পাল্টাও + ডিফল্ট ক্যামেরা + পেছনের ক্যামেরা (ডিফল্ট) + সামনের ক্যামেরা + অন্য ক্যামেরা ধারাবাহিকভাবে খুঁজো শুরুতে সবসময় ধারাবাহিকভাবে খুঁজো একটি অবিরত স্ক্যান মধ্যে বিলম্ব @@ -203,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 5466f3e1..4b8539af 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 @@ -209,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 ddc36e6b..4f5a6c8c 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 @@ -203,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 95b9dc29..c1f6a332 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 @@ -203,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 d62d9773..d739997b 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 @@ -204,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 04ff3b76..7e03a477 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -62,6 +62,10 @@ نمایش بارکد اطّلاعات تغییر دوربین + دوربین پیش‌فرض + دوربین پشت (پیش‌فرض) + دوربین جلو + دوربین دیگر به طور مداوم پویش کن همیشه پویش را به طور مداوم شروع می‌کند. تأخیر بین پویش‌های مداوم @@ -203,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 9703ffcc..62554587 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 @@ -204,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 c29a0311..4c20365a 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 @@ -203,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 fb7a0ba4..dfcf1d45 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 @@ -201,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 cb82eb02..f8f8e064 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 @@ -218,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 acquisire 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 f13a3c29..36db34a8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -61,6 +61,10 @@ バーコードを確認 ソースコード カメラを切り替え + デフォルトのカメラ + 背面カメラ(デフォルト) + 前面カメラ + その他のカメラ まとめてスキャンする 常に連続してスキャンを行います。 連続スキャンの間隔 @@ -201,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 4d9eef51..48b6dab5 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -62,6 +62,10 @@ შტრიხ-კოდის ნახვა ინფორმაცია კამერის გადართვა + ნაგულისხმევი კამერა + უკანა კამერა (ნაგულისხმევი) + წინა კამერა + სხვა კამერა სკანირება უწყვეტად ყოველთვის დაიწყეთ სკანირება უწყვეტად. განაგრძეთ გადანომრვას შორის შეზღუდვა @@ -203,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 88ce2cd1..1d1c2199 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -61,6 +61,10 @@ 보기 바코드 정보 카메라 전환 + 기본 카메라 + 후면 카메라(기본) + 전면 카메라 + 다른 카메라 지속적으로 스캔 항상 지속적으로 스캔을 시작합니다. 연속 스캔 간의 지연 @@ -201,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 52502a3c..b28ce03b 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 @@ -251,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 2a02dd53..343a7a28 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 @@ -203,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 43c22a20..1b4dc435 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 @@ -222,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 99622227..7de91733 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 @@ -203,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 f9780b66..aa28a4aa 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 @@ Просмотр штрих-кода Инфо Переключить камеру + Камера по умолчанию + Задняя камера (по умолчанию) + Передняя камера + Другая камера Непрерывное сканирование Всегда запускать непрерывное сканирование. Задержка непрерывного сканирования @@ -209,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 1bda28f0..24568b57 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 @@ -203,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 035020a2..312ec9bd 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -64,6 +64,10 @@ Переглянути штрих-код Інфо Переключити камеру + Камера за замовчуванням + Задня камера (за замовчуванням) + Передня камера + Інша камера Сканувати безперервно Завжди починати безперервне сканування. Затримка між безперервним скануванням @@ -209,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 c666a9c9..42386b9d 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 @@ -201,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 abe4f3e5..02c3a6ad 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 @@ 查看条码 关于 切换摄像头 + 默认摄像头 + 后置摄像头(默认) + 前置摄像头 + 其他摄像头 连续扫描 始终开启连续扫描。 连续扫描之间的延迟 @@ -201,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 257c11c6..4b31b2e6 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 @@ 檢視條碼 關於 切換相機 + 預設相機 + 後置相機(預設) + 前置相機 + 其他相機 連續掃描 始終開啟連續掃描 連續掃描間的延遲 @@ -201,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 f44f9769..fdc6cc8e 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 @@ -218,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 25073a2b..492c1810 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"/> + + + +