Compare commits

...
14 Commits
Author SHA1 Message Date
Markus Fisch 7bdcdaaa5d Advance version number to 1.63.9 2024-06-02 18:15:53 +02:00
Markus Fisch fd44728e89 Ignore "URL:" before URLs in barcode content
Apparently some people think it's necessary to add an "URL:" prefix
before an actual URL, so let's cut that rubbish.
2024-06-02 15:24:22 +02:00
Markus Fisch 8242520a0b Export/share generated barcode as JPG
On request.

Generally, using a lossless format like PNG makes more sense.
2024-06-02 14:00:27 +02:00
Markus Fisch 2e7e9a942b Fix indent in new translations 2024-06-02 13:51:43 +02:00
Too Late (bot)andGitHub dcc9d5b3ff Update Brazilian translation 2024-06-02 11:54:14 +02:00
Markus Fisch 607aab854c Update build tools 2024-05-27 19:39:46 +02:00
Markus Fisch cc2b2f076b Fix exporting/sharing multiple history items
By their ID.

`?` is only one argument so a list of numbers becomes just one ID,
which cannot work, of course.
2024-05-27 19:37:43 +02:00
Too Late (bot)andGitHub 90e9723de5 Update Chinese translation 2024-05-13 10:38:54 +02:00
Sergiy StuparandGitHub ab6787e60b Update Ukrainian translation 2024-05-12 10:40:14 +02:00
solokotandGitHub 698686a45a Update Russian translation 2024-05-11 15:35:51 +02:00
Markus Fisch 95bdaa1252 Reformat imports with Android Studio
Seems like wildcard imports are back in fashion.
2024-05-11 14:13:39 +02:00
Markus Fisch f0c02e5156 Reformat with Android Studio 2024-05-11 14:13:20 +02:00
Markus Fisch a8c50308d0 Add Ko-fi for donations 2024-05-11 13:20:31 +02:00
bovirusandGitHub 6b359d4c65 Update Italian language 2024-05-10 21:08:07 +02:00
22 changed files with 266 additions and 186 deletions
+6
View File
@@ -1,5 +1,11 @@
# Change Log
## 1.63.9
* Export/share as JPEG
* Ignore "URL:" before URLs in barcode content
* Fix exporting/sharing multiple history items
* Update multiple translations
## 1.63.8
* Add an option to show a checksum for the decoded content
* Add support for encoding escape sequences for non-printable characters
+4
View File
@@ -21,6 +21,10 @@ send some Bitcoin decimals to `bc1q2guk2rpll587aymrfadkdtpq32448x5khk5j8z`.
href="https://liberapay.com/markusfisch/" target="_blank"><img
src="https://liberapay.com/assets/widgets/donate.svg"
alt="Liberapay"
style="height: 60px !important"/></a>&nbsp;<a
href="https://ko-fi.com/markusfisch" target="_blank"><img
src="https://storage.ko-fi.com/cdn/brandasset/kofi_s_tag_dark.png"
alt="Ko-fi"
style="height: 60px !important"/></a>
## Screenshots
+2 -2
View File
@@ -9,8 +9,8 @@ android {
minSdk 9
targetSdk sdk_version
versionCode 136
versionName '1.63.8'
versionCode 137
versionName '1.63.9'
}
signingConfigs {
@@ -9,7 +9,8 @@ import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.actions.IntentAction
import de.markusfisch.android.binaryeye.actions.vtype.VTypeParser
import java.text.SimpleDateFormat
import java.util.*
import java.util.Date
import java.util.Locale
object VEventAction : IntentAction() {
override val iconResId: Int
@@ -7,7 +7,7 @@ import de.markusfisch.android.binaryeye.content.openUrl
object WebAction : IAction {
private val colloquialRegex =
"^(http[s]*://)*[A-Za-z0-9]{3,}\\.[A-Za-z]{2,}[^ \t\r\n]*$".toRegex()
"^(URL:[ ]*)*(http[s]*://)*[A-Za-z0-9]{3,}\\.[A-Za-z]{2,}[^ \t\r\n]*$".toRegex()
override val iconResId: Int = R.drawable.ic_action_open
override val titleResId: Int = R.string.open_url
@@ -18,6 +18,9 @@ object WebAction : IAction {
override suspend fun execute(context: Context, data: ByteArray) {
var url = String(data).trim()
if (url.startsWith("URL:")) {
url = url.substring(4).trim()
}
if (!url.startsWith("http") && !url.startsWith("ftp")) {
url = "http://${url}"
}
@@ -21,10 +21,10 @@ fun Scan.sendBluetoothAsync(
val connected = if (isConnected) {
true
} else {
connect(host,true)
connect(host, true)
}
val sent = if (connected) {
send(content,host,true)
send(content, host, true)
} else {
false
}
@@ -89,9 +89,9 @@ class Database {
$SCANS_GTIN_PRICE,
$SCANS_GTIN_ISSUE_NUMBER
FROM $SCANS
WHERE $SCANS_ID IN (?)
WHERE $SCANS_ID IN (${ids.joinToString(",")})
ORDER BY $SCANS_DATETIME DESC
""".trimMargin(), arrayOf(ids.joinToString(","))
""".trimMargin(), null
)
fun getScan(id: Long): Scan? = db.rawQuery(
@@ -7,7 +7,12 @@ import android.graphics.Bitmap
import android.os.Build
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.*
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.app.db
@@ -27,17 +32,21 @@ import de.markusfisch.android.binaryeye.widget.ConfinedScalingImageView
import de.markusfisch.android.binaryeye.widget.toast
import de.markusfisch.android.zxingcpp.ZxingCpp
import de.markusfisch.android.zxingcpp.ZxingCpp.BarcodeFormat
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.OutputStream
import java.util.*
import java.util.Locale
import kotlin.math.min
class BarcodeFragment : Fragment() {
private enum class FileType {
PNG, SVG, TXT
PNG, JPG, SVG, TXT
}
private val parentJob = Job()
@@ -205,6 +214,13 @@ class BarcodeFragment : Fragment() {
barcode.bitmap().saveAsPng(it)
}
FileType.JPG -> saveAs(
addSuffixIfNotGiven(fileName, ".jpg"),
MIME_JPG
) {
barcode.bitmap().saveAsJpg(it)
}
FileType.SVG -> saveAs(
addSuffixIfNotGiven(fileName, ".svg"),
MIME_SVG
@@ -241,21 +257,28 @@ class BarcodeFragment : Fragment() {
private fun Context.shareAs(fileType: FileType) {
when (fileType) {
FileType.PNG -> share(barcode.bitmap())
FileType.PNG -> share(barcode.bitmap(), MIME_PNG, "png")
FileType.JPG -> share(barcode.bitmap(), MIME_JPG, "jpg")
FileType.SVG -> shareText(barcode.svg(), MIME_SVG)
FileType.TXT -> shareText(barcode.text())
}
}
private fun Context.share(bitmap: Bitmap) {
private fun Context.share(bitmap: Bitmap, mimeType: String, ext: String) {
scope.launch(Dispatchers.IO) {
val file = File(
externalCacheDir,
"shared_barcode.png"
"shared_barcode.$ext"
)
val success = try {
FileOutputStream(file).use {
bitmap.saveAsPng(it)
when (mimeType) {
MIME_PNG -> bitmap.saveAsPng(it)
MIME_JPG -> bitmap.saveAsJpg(it)
else -> throw IllegalArgumentException(
"Invalid mime type"
)
}
}
true
} catch (e: IOException) {
@@ -263,7 +286,7 @@ class BarcodeFragment : Fragment() {
}
withContext(Dispatchers.Main) {
if (success) {
shareFile(file, "image/png")
shareFile(file, mimeType)
} else {
toast(R.string.error_saving_file)
}
@@ -280,6 +303,7 @@ class BarcodeFragment : Fragment() {
private const val EC_LEVEL = "ec_level"
private const val COLORS = "colors"
private const val MIME_PNG = "image/png"
private const val MIME_JPG = "image/jpeg"
private const val MIME_SVG = "image/svg+xmg"
private const val MIME_TXT = "text/plain"
@@ -383,6 +407,9 @@ private enum class Colors {
private fun Bitmap.saveAsPng(outputStream: OutputStream, quality: Int = 90) =
compress(Bitmap.CompressFormat.PNG, quality, outputStream)
private fun Bitmap.saveAsJpg(outputStream: OutputStream, quality: Int = 90) =
compress(Bitmap.CompressFormat.JPEG, quality, outputStream)
private val fileNameCharacters = "[^A-Za-z0-9]".toRegex()
private fun encodeFileName(name: String): String = fileNameCharacters
.replace(name, "_")
@@ -15,22 +15,43 @@ import android.support.v7.app.AppCompatActivity
import android.support.v7.view.ActionMode
import android.support.v7.widget.SearchView
import android.support.v7.widget.SwitchCompat
import android.view.*
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.ListView
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.adapter.ScansAdapter
import de.markusfisch.android.binaryeye.app.*
import de.markusfisch.android.binaryeye.app.addFragment
import de.markusfisch.android.binaryeye.app.alertDialog
import de.markusfisch.android.binaryeye.app.db
import de.markusfisch.android.binaryeye.app.hasWritePermission
import de.markusfisch.android.binaryeye.app.prefs
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.wipeLastShareFile
import de.markusfisch.android.binaryeye.database.*
import de.markusfisch.android.binaryeye.database.Database
import de.markusfisch.android.binaryeye.database.exportCsv
import de.markusfisch.android.binaryeye.database.exportDatabase
import de.markusfisch.android.binaryeye.database.exportJson
import de.markusfisch.android.binaryeye.database.use
import de.markusfisch.android.binaryeye.io.askForFileName
import de.markusfisch.android.binaryeye.io.toSaveResult
import de.markusfisch.android.binaryeye.view.*
import de.markusfisch.android.binaryeye.view.lockStatusBarColor
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
import de.markusfisch.android.binaryeye.view.systemBarListViewScrollListener
import de.markusfisch.android.binaryeye.view.unlockStatusBarColor
import de.markusfisch.android.binaryeye.view.useVisibility
import de.markusfisch.android.binaryeye.widget.toast
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class HistoryFragment : Fragment() {
private lateinit var useHistorySwitch: SwitchCompat
@@ -7,7 +7,9 @@ import android.os.Build
import android.os.Bundle
import android.support.annotation.RequiresApi
import android.support.v4.app.Fragment
import android.view.*
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
import de.markusfisch.android.binaryeye.R
@@ -2,7 +2,12 @@ package de.markusfisch.android.binaryeye.widget
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.*
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Path
import android.graphics.Point
import android.graphics.Rect
import android.graphics.Region
import android.os.Build
import android.os.Parcel
import android.os.Parcelable
+2 -2
View File
@@ -106,8 +106,8 @@
<string name="show_meta_data_summary">Visualizza dati aggiuntivi codice a barre scansionato.</string>
<string name="show_hex_dump">Visualizza dump esadecimale</string>
<string name="show_hex_dump_summary">Visualizza un dump esadecimale dei contenuti scansionati.</string>
<string name="show_checksum">Show checksum</string>
<string name="no_checksum">No checksum</string>
<string name="show_checksum">Visualizza checksum</string>
<string name="no_checksum">Nessuna checksum</string>
<string name="show_recreation">Visualizza codice a barre ricreato</string>
<string name="show_recreation_summary">Ricrea e visualizza, se possibile, il codice a barre, dal contenuto letto.</string>
<string name="close_automatically">Vai indietro dopo la copia/condivisione</string>
+114 -113
View File
@@ -1,29 +1,30 @@
<resources>
<string name="camera_error">Não foi possível acessar a câmera, por favor tente novamente</string>
<string name="scan_code">Aponte ao código</string>
<string name="compose_barcode">Criar código</string>
<string name="decode_barcode">Reconhecer código</string>
<string name="camera_error">Não foi possível acessar a câmera, tente novamente</string>
<string name="scan_code">Leia o código</string>
<string name="compose_barcode">Compor código de barras</string>
<string name="decode_barcode">Decodificar código de barras</string>
<string name="content">Conteúdo</string>
<string name="binary_data">(dados binários)</string>
<string name="binary_data">(dados em binário)</string>
<plurals name="barcode_info">
<item quantity="one">%2$d caractere, %1$s</item>
<item quantity="many">%2$d caracteres, %1$s</item>
<item quantity="other">%2$d caracteres, %1$s</item>
</plurals>
<string name="error_correction_level">Nível de correção de erro</string>
<string name="error_correction_level_l" formatted="false">Baixo (~7&#37; correção)</string>
<string name="error_correction_level_m" formatted="false">Médio (~15&#37; correção)</string>
<string name="error_correction_level_q" formatted="false">Quartil (~25&#37; correção)</string>
<string name="error_correction_level_h" formatted="false">Alto (~30&#37; correção)</string>
<string name="label">Label</string>
<string name="colors">Modo de exibição</string>
<string name="colors_black_on_white">Preto sobre fundo branco</string>
<string name="colors_white_on_black">Branco sobre fundo preto</string>
<string name="colors_black_on_transparent">Preto sobre fundo transparente</string>
<string name="colors_white_on_transparent">Branco sobre fundo transparente</string>
<string name="sequence_size">Tamanho de sequência</string>
<string name="sequence_index">Índice de sequência</string>
<string name="sequence_id">ID de sequência</string>
<string name="gtin_issue_number">Número de emissão</string>
<string name="error_correction_level_l" formatted="false">Baixo (~7% de correção)</string>
<string name="error_correction_level_m" formatted="false">Médio (~15% de correção)</string>
<string name="error_correction_level_q" formatted="false">Quarto (~25% de correção)</string>
<string name="error_correction_level_h" formatted="false">Alto (~30% de correção)</string>
<string name="label">Etiqueta</string>
<string name="colors">Primeiro e segundo plano</string>
<string name="colors_black_on_white">Preto no branco</string>
<string name="colors_white_on_black">Branco no preto</string>
<string name="colors_black_on_transparent">Preto no transparente</string>
<string name="colors_white_on_transparent">Branco no transparente</string>
<string name="sequence_size">Tamanho da sequência</string>
<string name="sequence_index">Índice da sequência</string>
<string name="sequence_id">ID da sequência</string>
<string name="gtin_issue_number">Número do issue</string>
<string name="gtin_country">Possível país de fabricação</string>
<string name="gtin_price">Preço sugerido</string>
<string name="gtin_add_on">Extensão UPC EAN</string>
@@ -31,167 +32,167 @@
<string name="qr_version_and_modules">%1$s (%2$d módulos)</string>
<string name="toggle_flash">Ligar lanterna</string>
<string name="error_flash">Falha ao ligar a lanterna</string>
<string name="share">Compartilhe</string>
<string name="share">Compartilhar</string>
<string name="share_file">Compartilhar como arquivo</string>
<string name="share_as">Compartilhar em qual formato?</string>
<string name="copy_to_clipboard">Copiar ao clipboard</string>
<string name="copied_to_clipboard">Copiado ao clipboard</string>
<string name="copy_password">Copiar a senha ao clipboard</string>
<string name="copied_password_to_clipboard">Senha copiada ao clipboard</string>
<string name="open_url">Abrir a URL</string>
<string name="share_as">Compartilhar como?</string>
<string name="copy_to_clipboard">Copiar para a área de transferência</string>
<string name="copied_to_clipboard">Copiado para a área de transferência</string>
<string name="copy_password">Copiar senha para a área de transferência</string>
<string name="copied_password_to_clipboard">Senha copiada para a área de transferência</string>
<string name="open_url">Abrir URL</string>
<string name="cannot_resolve_action">Nenhum app pode abrir isto</string>
<string name="pick_search_engine">Escolha site de busca</string>
<string name="pick_search_engine">Escolha um motor de pesquisa</string>
<string name="format">Formato</string>
<string name="size_width_by_height">Tamanho em pixels: %1$d×%2$d</string>
<string name="margin_size">Margem em pixels: %1$d</string>
<string name="input_content_here">Digite algum conteúdo aqui</string>
<string name="unescape">Expandir sequências de escape</string>
<string name="encode">CODIFICAR</string>
<string name="error_no_content">Digite algum conteúdo acima</string>
<string name="error_encoding_barcode">Não foi possível gerar este código</string>
<string name="view_barcode">Ver código</string>
<string name="info">Detalhes</string>
<string name="error_no_content">Conteúdo faltando</string>
<string name="error_encoding_barcode">Código de barras não pode ser gerado</string>
<string name="view_barcode">Ver código de barras</string>
<string name="info">Informações</string>
<string name="switch_camera">Alterar câmera</string>
<string name="bulk_mode">Digitalização contínua</string>
<string name="bulk_mode_summary">Sempre iniciar em modo contínuo.</string>
<string name="bulk_mode_delay">Adiar durante digitalização contínua</string>
<string name="restrict_format">Limitar formato</string>
<string name="remove_restriction">Remover limitação</string>
<string name="bulk_mode">Digitalizar continuamente</string>
<string name="bulk_mode_summary">Sempre iniciar digitalizando continuamente.</string>
<string name="bulk_mode_delay">Delay entre digitalizações contínuas</string>
<string name="restrict_format">Restringir formato</string>
<string name="remove_restriction">Remover restrição</string>
<string name="scan_format">Digitalizar %s</string>
<string name="quarter_second">Um quarto de segundo</string>
<string name="half_second">Meio segundo</string>
<string name="a_second">1 segundo</string>
<string name="two_seconds">2 segundos</string>
<string name="five_seconds">5 segundos</string>
<string name="a_second">Um segundo</string>
<string name="two_seconds">Dois segundos</string>
<string name="five_seconds">Cinco segundos</string>
<string name="history">Histórico</string>
<string name="preferences">Configurações</string>
<string name="scan_category">Digitalização</string>
<string name="content_category">Conteúdo</string>
<string name="locale_category">Idioma</string>
<string name="custom_locale">Idioma da interface</string>
<string name="follow_system_settings">Adaptar do sistema</string>
<string name="custom_locale">Idioma customizado</string>
<string name="follow_system_settings">Seguir configurações do sistema</string>
<string name="show_crop_handle">Mostrar limitador customizável</string>
<string name="show_crop_handle_summary">Permite limitar a uma área específica.</string>
<string name="barcode_formats">Tipo de código</string>
<string name="zoom_by_swiping">Deslize para ajustar zoom</string>
<string name="show_crop_handle_summary">Permite limitar a digitalização à uma área específica.</string>
<string name="barcode_formats">Formatos de código de barras</string>
<string name="zoom_by_swiping">Deslize para ajustar o zoom</string>
<string name="zoom_by_swiping_summary">Deslize para baixo/cima na tela para ajustar zoom da câmera.</string>
<string name="auto_rotate">Reconhecer códigos 1D verticais</string>
<string name="auto_rotate_summary">Girar automaticamente a câmera para reconhecer códigos 1D verticais. Dependendo do dispositivo, isto pode afetar o desempenho.</string>
<string name="auto_rotate">Reconhecer códigos de barras 1D verticais</string>
<string name="auto_rotate_summary">Gire automaticamente a câmera para reconhecer códigos 1D verticais. Dependendo do dispositivo, isto pode afetar o desempenho.</string>
<string name="try_harder">Otimizar leitor para precisão</string>
<string name="try_harder_summary">Ative esta opção para códigos muito difíceis de ler. Isto afetará o desempenho.</string>
<string name="show_toast_in_bulk_mode">Mostrar dados em modo contínuo</string>
<string name="show_toast_in_bulk_mode_summary">Mostrar brevemente os dados durante digitalização contínua.</string>
<string name="vibrate">Vibrar ao reconhecer</string>
<string name="vibrate">Vibrar ao detectar</string>
<string name="vibrate_summary">Ative esta opção se quiser que seu dispositivo vibre ao reconhecer um código.</string>
<string name="beep">Bipar ao reconhecer</string>
<string name="beep_summary">Ative esta opção se quiser ouvir um bipe ao reconhecer um código.</string>
<string name="beep_tone">Tipo do bipe</string>
<string name="beep">Fazer um \'beep\' ao reconhecer</string>
<string name="beep_summary">Ative esta opção se quiser se quer que seu dispositivo faça um \'beep\' ao reconhecer um código.</string>
<string name="beep_tone">Tom do beep</string>
<string name="tone_cdma_confirm">Confirmação CDMA</string>
<string name="tone_sup_confirm">Confirmação de controle</string>
<string name="tone_sup_radio_ack">Reconhecimento de caminho de rádio</string>
<string name="tone_sup_confirm">Confirmação de supervisão de chamada</string>
<string name="tone_sup_radio_ack">Reconhecimento de caminho de rádio de supervisão de chamada</string>
<string name="tone_prop_ack">Reconhecimento positivo</string>
<string name="tone_prop_beep">Bipe comum</string>
<string name="tone_prop_beep2">Bipe duplo comum</string>
<string name="use_history">Ativar histórico de digitalizações</string>
<string name="use_history_summary">Salve códigos reconhecidos no dispositivo.</string>
<string name="ignore_duplicates">Ignore duplicates</string>
<string name="ignore_consecutive_duplicates">Ignorar duplicações</string>
<string name="ignore_any_duplicates">Ignore any duplicates</string>
<string name="accept_duplicates">Accept duplicates</string>
<string name="tone_prop_beep">Beep comum</string>
<string name="tone_prop_beep2">Duplo beep comum</string>
<string name="use_history">Salvar histórico de digitalizações</string>
<string name="use_history_summary">Salve códigos reconhecidos em seu dispositivo.</string>
<string name="ignore_duplicates">Ignorar duplicaçõe</string>
<string name="ignore_consecutive_duplicates">Duplicações consecutivas</string>
<string name="ignore_any_duplicates">Qualquer duplicação</string>
<string name="accept_duplicates">Aceitar duplicações</string>
<string name="open_immediately">Abrir imediatamente</string>
<string name="open_immediately_summary">Pular a inspeção e abrir um conteúdo no mesmo instante. Quando ativado, pode abrir conteúdo perigoso.</string>
<string name="copy_immediately">Copiar ao clipboard</string>
<string name="copy_immediately_summary">Copiar automaticamente ao clipboard um conteúdo digitalizado. Tem cuidado porque outros apps podem examinar seu clipboard em segundo plano.</string>
<string name="open_immediately_summary">Pular a inspeção e abrir um conteúdo instantaneamente. Quando ativado, pode abrir conteúdo malicioso.</string>
<string name="copy_immediately">Botar na área de transferência</string>
<string name="copy_immediately_summary">Copiar automaticamente para a área de transferência o conteúdo digitalizado. Note que outros apps podem examinar sua área de transferência em segundo plano.</string>
<string name="show_meta_data">Mostrar metadados</string>
<string name="show_meta_data_summary">Mostrar dados adicionais de código digitalizado.</string>
<string name="show_hex_dump">Mostrar impressão hexadecimal</string>
<string name="show_hex_dump_summary">Mostrar impressão hexadecimal de conteúdo digitalizado.</string>
<string name="show_checksum">Show checksum</string>
<string name="no_checksum">No checksum</string>
<string name="show_recreation">Mostrar código recuperado</string>
<string name="show_recreation_summary">Se possível, recupere e mostre código do conteúdo lido.</string>
<string name="close_automatically">Voltar após copiar/compartilhar</string>
<string name="close_automatically_summary">Voltar automaticamente à tela de digitalização após copiar ou compartilhar um código examinado.</string>
<string name="show_meta_data_summary">Mostrar dados adicionais sobre o código digitalizado.</string>
<string name="show_hex_dump">Mostrar dump em hex</string>
<string name="show_hex_dump_summary">Mostrar um dump em hex do conteúdo digitalizado.</string>
<string name="show_checksum">Mostrar checksum</string>
<string name="no_checksum">Nenhum checksum</string>
<string name="show_recreation">Mostrar código recriado</string>
<string name="show_recreation_summary">Recrie e mostre o código do conteúdo digitalizado quando possível.</string>
<string name="close_automatically">Voltar após Copiar/Compartilhar</string>
<string name="close_automatically_summary">Voltar automaticamente à tela de digitalização após copiar ou compartilhar o conteúdo de uma digitalização.</string>
<string name="default_search_engine">Abrir dados desconhecidos em</string>
<string name="always_ask">Sempre perguntar</string>
<string name="open_with_url">Abrir dados desconhecidos via URL</string>
<string name="clear_network_suggestions">Excluir sugestões de redes</string>
<string name="clear_network_suggestions_summary">Excluir todas as sugestões de redes que foram anteriormente adicionadas ao app.</string>
<string name="open_with_url">Abrir dados desconhecidos com URL</string>
<string name="clear_network_suggestions">Excluir sugestões de rede</string>
<string name="clear_network_suggestions_summary">Excluir todas as sugestões de rede que foram anteriormente adicionadas com este app.</string>
<string name="really_remove_all_networks">Deseja excluir todas as redes?</string>
<string name="clear_network_suggestions_success">Sugestões de redes foram excluidas</string>
<string name="clear_network_suggestions_success">Sugestões de rede foram excluídas</string>
<string name="clear_network_suggestions_nothing_to_remove">Nada para excluir</string>
<string name="send_category">Encaminhamento</string>
<string name="send_scan_active">Encaminhar conteúdo digitalizado</string>
<string name="send_scan_active_summary">Ative para encaminhar conteúdo digitalizado à URL definida</string>
<string name="send_scan_active">Encaminhar digitalizações</string>
<string name="send_scan_active_summary">Ative para encaminhar conteúdo digitalizado à URL definida.</string>
<string name="send_scan_url">Defina a URL para qual encaminhar</string>
<string name="send_scan_type">Tipo de solicitação</string>
<string name="send_type_get_add_content">GET e somente adicionar um conteúdo</string>
<string name="send_type_get_add_content">GET e somente adicionar o conteúdo</string>
<string name="send_type_get_query_string">GET com sequência completa de consulta</string>
<string name="send_type_post_form">POST application/x-www-form-urlencoded</string>
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Abrir em navegador externo</string>
<string name="test_url">Testar a URL</string>
<string name="send_scan_bluetooth">Encaminhar para Bluetooth</string>
<string name="send_scan_bluetooth_summary">Ative para encaminhar digitalizações ao determinado host de Bluetooth.</string>
<string name="send_scan_bluetooth">Encaminhar digitalizações com Bluetooth</string>
<string name="send_scan_bluetooth_summary">Ative para encaminhar digitalizações a um determinado host Bluetooth.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">Não emparelhado com host</string>
<string name="bluetooth_connect_fail">Não foi possível conectar com dispositivo Bluetooth.</string>
<string name="bluetooth_send_fail">Não foi possível encaminhar para dispositivo Bluetooth.</string>
<string name="bluetooth_send_success">Envio ao Bluetooth concluído com sucesso.</string>
<string name="no_bluetooth_hosts_paired">Nenhum Host Pareado</string>
<string name="bluetooth_connect_fail">Não foi possível conectar com o dispositivo Bluetooth.</string>
<string name="bluetooth_send_fail">Não foi possível enviar para o dispositivo Bluetooth.</string>
<string name="bluetooth_send_success">Envio Bluetooth com sucesso.</string>
<string name="really_remove_scan">Deseja excluir esta digitalização?</string>
<string name="really_remove_all_scans">Deseja excluir todas as digitalizações?</string>
<string name="really_remove_selected_scans">Deseja excluir as digitalizações selecionadas?</string>
<string name="clear_history">Apagar histórico</string>
<string name="copy_scan">Copiar digitalização</string>
<string name="edit_label">Editar identificação</string>
<string name="edit_label">Editar etiqueta</string>
<string name="remove_scan">Excluir digitalização</string>
<string name="enter_name">Digite um nome para identificar esta digitalização</string>
<string name="enter_name_hint">Nome de digitalização</string>
<string name="no_barcode_found">Nenhum código encontrado</string>
<string name="pick_list_separator">Como separar itens da lista?</string>
<string name="enter_name_hint">Nome da digitalização</string>
<string name="no_barcode_found">Nenhum código de barras encontrado</string>
<string name="pick_list_separator">Como separar os itens da lista?</string>
<string name="separator_line_break">Quebra de linha</string>
<string name="separator_ruler">Hífen</string>
<string name="separator_ruler">Régua</string>
<string name="save_as_file_name">Salvar na pasta de Downloads?</string>
<string name="file_name">Nome do arquivo</string>
<string name="error_saving_file">Não foi possível salvar este arquivo</string>
<string name="error_saving_file">Não é possível salvar este arquivo</string>
<string name="error_file_exists">Arquivo já existe</string>
<string name="connect_to_wifi">Conectar a WiFi</string>
<string name="wifi_config_failed">Não foi possível configurar a WiFi</string>
<string name="wifi_added">WiFi adicionado</string>
<string name="sms_send">Envie SMS</string>
<string name="connect_to_wifi">Conectar à rede Wi-Fi</string>
<string name="wifi_config_failed">Não foi possível configurar a rede Wi-Fi</string>
<string name="wifi_added">Rede Wi-Fi adicionada</string>
<string name="sms_send">Enviar SMS</string>
<string name="sms_error">Não foi possível enviar SMS</string>
<string name="tel_dial">Disque número</string>
<string name="tel_dial">Discar número</string>
<string name="tel_error">Não foi possível discar este número</string>
<string name="mail_send">Envie e-mail</string>
<string name="mail_error">Não foi possível enviar este e-mail</string>
<string name="mail_send">Enviar e-mail</string>
<string name="mail_error">Não foi possível enviar e-mail</string>
<string name="vcard_add">Adicionar aos contatos</string>
<string name="vcard_failed">Não foi possível adicionar aos contatos</string>
<string name="vevent_add">Adicionar ao calendário</string>
<string name="vevent_failed">Não foi possível adicionar ao calendário</string>
<string name="otpauth_add">Adicionar 2FA</string>
<string name="search_web">Buscar na internet</string>
<string name="search_scan">Buscar nas digitalizações salvas</string>
<string name="add_to_history">Add to history</string>
<string name="added_to_history">Added to history</string>
<string name="search_web">Buscar na web</string>
<string name="search_scan">Buscar digitalização</string>
<string name="add_to_history">Adicionar ao histórico</string>
<string name="added_to_history">Adicionado ao histórico</string>
<string name="export_to_file">Exportar para arquivo</string>
<string name="export_as">Exportar em qual formato?</string>
<string name="export_as">Exportar como?</string>
<string name="export_csv_comma">Arquivo CSV com vírgulas</string>
<string name="export_csv_semicolon">Arquivo CSV com ponto e vírgula</string>
<string name="export_csv_semicolon">Arquivo CSV com ponto-e-vírgula</string>
<string name="export_json">Arquivo JSON</string>
<string name="export_database">Base de dados SQLite</string>
<string name="saved_in_downloads">Salvo em Downloads</string>
<string name="saved_in_downloads">Salvo nos Downloads</string>
<string name="rotate_image_cw">Girar a imagem no sentido horário</string>
<string name="toggle_free_rotation">Girar livremente</string>
<string name="pick_file">Escolha arquivo</string>
<string name="pick_image_file">Escolha imagem</string>
<string name="pick_file">Escolha um arquivo</string>
<string name="pick_image_file">Escolha um arquivo de imagem</string>
<string name="pick_code_to_scan">Escolha código para digitalizar</string>
<string name="shortcut_decode">Digitalizar código</string>
<string name="shortcut_encode">Criar código</string>
<string name="shortcut_history">History</string>
<string name="shortcut_decode">Digitalizar um código de barras</string>
<string name="shortcut_encode">Criar um código de barras</string>
<string name="shortcut_history">Histórico</string>
<string name="shortcut_preferences">Configurações</string>
<string name="background_request_failed">A solicitação em segundo plano falhou</string>
<string name="background_request_failed">Solicitação em segundo plano falhou</string>
<string name="entry_type">Tipo</string>
<string name="wifi_network">Rede de Wi-Fi</string>
<string name="wifi_network">Rede Wi-Fi</string>
<string name="wifi_ssid">Nome</string>
<string name="wifi_type">Tipo de autenticação</string>
<string name="wifi_password">Senha</string>
@@ -200,6 +201,6 @@
<string name="wifi_anonymous_identity">Identidade anônima</string>
<string name="wifi_identity">Identidade</string>
<string name="wifi_phase2">Método Phase 2</string>
<string name="network_suggestions">Sugestões de redes</string>
<string name="network_suggestions">Sugestões de rede</string>
<string name="remove_suggestion">Apagar sugestão</string>
</resources>
+2 -2
View File
@@ -108,8 +108,8 @@
<string name="show_meta_data_summary">Показывать дополнительную информацию о считанных штрих-кодах.</string>
<string name="show_hex_dump">Показывать шестнадцатеричный дамп</string>
<string name="show_hex_dump_summary">Показывать шестнадцатеричный дамп содержимого считанного штрих-кода.</string>
<string name="show_checksum">Show checksum</string>
<string name="no_checksum">No checksum</string>
<string name="show_checksum">Показывать контрольную сумму</string>
<string name="no_checksum">Нет контрольной суммы</string>
<string name="show_recreation">Показывать восстановленный штрих-код</string>
<string name="show_recreation_summary">Показывать штрих-код, восстановленный из считанного содержимого.</string>
<string name="close_automatically">Возврат после копирования/обмена</string>
+2 -2
View File
@@ -107,8 +107,8 @@
<string name="show_meta_data_summary">Показувати додаткові дані про відскановані штрих-коди.</string>
<string name="show_hex_dump">Показувати шістнадцятковий дамп</string>
<string name="show_hex_dump_summary">Показувати шістнадцятковий дамп відсканованого вмісту.</string>
<string name="show_checksum">Show checksum</string>
<string name="no_checksum">No checksum</string>
<string name="show_checksum">Показати контрольну суму</string>
<string name="no_checksum">Немає контрольної суми</string>
<string name="show_recreation">Показати відновлений штрих-код</string>
<string name="show_recreation_summary">Відтворити і показати штрих-код із прочитаного вмісту, якщо це можливо.</string>
<string name="close_automatically">Повернутися після копіювання/поширення</string>
+38 -38
View File
@@ -1,5 +1,5 @@
<resources>
<string name="camera_error">无法访问相机,请重试</string>
<string name="camera_error">无法访问相机,请重试</string>
<string name="scan_code">扫码</string>
<string name="compose_barcode">生成条码</string>
<string name="decode_barcode">解析条码</string>
@@ -9,10 +9,10 @@
<item quantity="other">%2$d 字符, %1$s</item>
</plurals>
<string name="error_correction_level">纠错级别</string>
<string name="error_correction_level_l" formatted="false">低 (~7&#37; 准确度)</string>
<string name="error_correction_level_m" formatted="false">中 (~15&#37; 准确度)</string>
<string name="error_correction_level_q" formatted="false">较高 (~25&#37; 准确度)</string>
<string name="error_correction_level_h" formatted="false">高 (~30&#37; 准确度)</string>
<string name="error_correction_level_l" formatted="false">低 (~7% 准确度)</string>
<string name="error_correction_level_m" formatted="false">中 (~15% 准确度)</string>
<string name="error_correction_level_q" formatted="false">较高 (~25% 准确度)</string>
<string name="error_correction_level_h" formatted="false">高 (~30% 准确度)</string>
<string name="label">Label</string>
<string name="colors">前景和背景</string>
<string name="colors_black_on_white">白底黑字</string>
@@ -31,7 +31,7 @@
<string name="toggle_flash">开关闪光灯</string>
<string name="error_flash">开关闪光灯出错</string>
<string name="share">分享</string>
<string name="share_file">Share as file</string>
<string name="share_file">以文件形式分享</string>
<string name="share_as">以何种方式分享?</string>
<string name="copy_to_clipboard">复制到剪贴板</string>
<string name="copied_to_clipboard">已复制到剪贴板</string>
@@ -42,7 +42,7 @@
<string name="pick_search_engine">选择一个搜索引擎</string>
<string name="format">编码格式</string>
<string name="size_width_by_height">图片尺寸: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="margin_size">边距(像素):%1$d</string>
<string name="input_content_here">在这里输入内容</string>
<string name="unescape">展开转义字符</string>
<string name="encode">编码</string>
@@ -52,7 +52,7 @@
<string name="info">关于</string>
<string name="switch_camera">切换摄像头</string>
<string name="bulk_mode">连续扫描</string>
<string name="bulk_mode_summary">始终开启连续扫描</string>
<string name="bulk_mode_summary">始终开启连续扫描</string>
<string name="bulk_mode_delay">连续扫描之间的延迟</string>
<string name="restrict_format">严格模式(扫描指定编码格式)</string>
<string name="remove_restriction">解除限制</string>
@@ -70,43 +70,43 @@
<string name="custom_locale">设定语言</string>
<string name="follow_system_settings">跟随系统设置</string>
<string name="show_crop_handle">限制扫描范围</string>
<string name="show_crop_handle_summary">把扫描区域限制在选定范围内</string>
<string name="show_crop_handle_summary">把扫描区域限制在选定范围内</string>
<string name="barcode_formats">条码格式</string>
<string name="zoom_by_swiping">上下滑动缩放</string>
<string name="zoom_by_swiping_summary">通过上下滑动在扫描界面控制相机缩放</string>
<string name="zoom_by_swiping_summary">在扫描界面上下滑动以控制相机缩放</string>
<string name="auto_rotate">识别竖直的 1D 条形码</string>
<string name="auto_rotate_summary">自动旋转相机以识别竖直的 1D 条形码(可能会影响一些设备的扫描性能)</string>
<string name="auto_rotate_summary">自动旋转相机以识别竖直的 1D 条形码(可能会影响一些设备的扫描性能)</string>
<string name="try_harder">提高扫描精度</string>
<string name="try_harder_summary">扫描很难识别的条码时可启用该选项!会影响性能</string>
<string name="try_harder_summary">扫描很难识别的条码时可启用该选项!会影响性能</string>
<string name="show_toast_in_bulk_mode">在连续扫描模式中显示数据</string>
<string name="show_toast_in_bulk_mode_summary">连续扫描时简要显示扫描数据。</string>
<string name="vibrate">识别时震动</string>
<string name="vibrate_summary">如果你希望在识别到条码后震动设备,请启用该选项。</string>
<string name="beep">识别时提示音</string>
<string name="beep_summary">如果你希望在识别到条码后发出提示音,请启用该选项。</string>
<string name="beep_tone">选择提示音</string>
<string name="tone_cdma_confirm">CDMA confirm</string>
<string name="tone_sup_confirm">Call supervisory confirm</string>
<string name="tone_sup_radio_ack">Call supervisory radio path acknowledgment</string>
<string name="tone_prop_ack">Positive acknowledgment</string>
<string name="tone_prop_beep">General beep</string>
<string name="tone_prop_beep2">General double beep</string>
<string name="beep">识别时的蜂鸣声</string>
<string name="beep_summary">如果你希望在识别到条码后发出蜂鸣声,请启用该选项。</string>
<string name="beep_tone">选择蜂鸣声</string>
<string name="tone_cdma_confirm">CDMA 确认</string>
<string name="tone_sup_confirm">呼叫主管确认</string>
<string name="tone_sup_radio_ack">呼叫主管无线电路径确认</string>
<string name="tone_prop_ack">肯定的确认</string>
<string name="tone_prop_beep">一般蜂鸣声</string>
<string name="tone_prop_beep2">一般两声蜂鸣声</string>
<string name="use_history">保存扫描历史</string>
<string name="use_history_summary">在本地保存扫描历史</string>
<string name="ignore_duplicates">Ignore duplicates</string>
<string name="use_history_summary">在本地保存扫描历史</string>
<string name="ignore_duplicates">忽略重复项</string>
<string name="ignore_consecutive_duplicates">不保存重复历史</string>
<string name="ignore_any_duplicates">Ignore any duplicates</string>
<string name="accept_duplicates">Accept duplicates</string>
<string name="accept_duplicates">接受重复项</string>
<string name="open_immediately">不检查内容立即打开链接</string>
<string name="open_immediately_summary">可能会打开有害内容</string>
<string name="open_immediately_summary">跳过检查并立即打开内容。如果启用,可能会打开有害内容</string>
<string name="copy_immediately">自动复制扫描结果到剪贴板</string>
<string name="copy_immediately_summary">注意其他 APP 可能会在后台监控剪贴板</string>
<string name="copy_immediately_summary">注意其他 APP 可能会在后台监控剪贴板</string>
<string name="show_meta_data">显示元数据</string>
<string name="show_meta_data_summary">显示已扫描条码的额外数据</string>
<string name="show_meta_data_summary">显示已扫描条码的额外数据</string>
<string name="show_hex_dump">显示16进制数据</string>
<string name="show_hex_dump_summary">显示已扫描条码的16进制数据</string>
<string name="show_checksum">Show checksum</string>
<string name="no_checksum">No checksum</string>
<string name="show_hex_dump_summary">显示已扫描条码的16进制数据</string>
<string name="show_checksum">显示校验和</string>
<string name="no_checksum">无校验和</string>
<string name="show_recreation">显示重新创建的条码</string>
<string name="show_recreation_summary">如果可以,就从读取内容中重新创建并显示条码。</string>
<string name="close_automatically">复制/分享后自动返回</string>
@@ -121,7 +121,7 @@
<string name="clear_network_suggestions_nothing_to_remove">无内容可清除</string>
<string name="send_category">转发</string>
<string name="send_scan_active">转发扫描结果</string>
<string name="send_scan_active_summary">启用以转发扫描结果至指定的 URL</string>
<string name="send_scan_active_summary">启用以转发扫描结果至指定的 URL</string>
<string name="send_scan_url">转发 URL</string>
<string name="send_scan_type">请求类型</string>
<string name="send_type_get_add_content">GET 简单附加数据</string>
@@ -131,12 +131,12 @@
<string name="send_type_external_browser">在外部浏览器中打开</string>
<string name="test_url">测试 URL</string>
<string name="send_scan_bluetooth">使用蓝牙转发扫描结果</string>
<string name="send_scan_bluetooth_summary">启用以转发扫描结果至指定的蓝牙服务设备</string>
<string name="send_scan_bluetooth_summary">启用以转发扫描结果至指定的蓝牙服务设备</string>
<string name="send_scan_bluetooth_host">蓝牙服务器</string>
<string name="no_bluetooth_hosts_paired">没有已配对的服务器</string>
<string name="bluetooth_connect_fail">无法连接蓝牙设备。</string>
<string name="bluetooth_send_fail">无法将结果发送至蓝牙设备</string>
<string name="bluetooth_send_success">已通过蓝牙发送</string>
<string name="bluetooth_send_fail">无法将结果发送至蓝牙设备</string>
<string name="bluetooth_send_success">已通过蓝牙发送</string>
<string name="really_remove_scan">确定删除记录?</string>
<string name="really_remove_all_scans">确定删除全部记录?</string>
<string name="really_remove_selected_scans">确定删除所选记录?</string>
@@ -170,8 +170,8 @@
<string name="otpauth_add">添加两步验证</string>
<string name="search_web">在互联网中搜索</string>
<string name="search_scan">搜索扫描记录</string>
<string name="add_to_history">Add to history</string>
<string name="added_to_history">Added to history</string>
<string name="add_to_history">添加到历史记录</string>
<string name="added_to_history">已添加到历史记录</string>
<string name="export_to_file">导出为文件</string>
<string name="export_as">另存为?</string>
<string name="export_csv_comma">逗号分隔的 CSV</string>
@@ -181,12 +181,12 @@
<string name="saved_in_downloads">已保存到下载目录</string>
<string name="rotate_image_cw">顺时针旋转图片</string>
<string name="toggle_free_rotation">切换自由旋转</string>
<string name="pick_file">Pick a file</string>
<string name="pick_file">选择一个文件</string>
<string name="pick_image_file">选择图片文件</string>
<string name="pick_code_to_scan">选择扫描编码</string>
<string name="shortcut_decode">扫描条码</string>
<string name="shortcut_encode">创建条码</string>
<string name="shortcut_history">History</string>
<string name="shortcut_history">历史</string>
<string name="shortcut_preferences">设置</string>
<string name="background_request_failed">后台请求失败</string>
<string name="entry_type">类型</string>
+1 -1
View File
@@ -1,7 +1,7 @@
buildscript {
ext {
kotlin_version = '1.9.22'
tools_version = '8.4.0'
tools_version = '8.4.1'
sdk_version = 34
support_version = '25.3.1'
}
@@ -0,0 +1,5 @@
* Export/share as JPEG
* Ignore "URL:" before URLs in barcode content
* Fix exporting/sharing multiple history items
* Update multiple translations
@@ -1,10 +1,10 @@
Funciona tanto no modo vertical quanto no horizontal, pode ler códigos invertidos,
gerar vários tipos de códigos e é feito com Material Design.
Funciona tanto no modo vertical quanto no horizontal, consegue ler códigos invertidos,
gerar códigos de barras e é feito com Material Design.
Utiliza a biblioteca de leitura de códigos ZXing ("Zebra Crossing").
Os seguintes formatos de códigos são suportados: AZTEC, CODABAR, CODE 39, CODE 93,
CODE 128, DATA MATRIX, EAN 8, EAN 13, ITF, PDF417, QR CODE, RSS 14, RSS EXPANDED,
UPC A, UPC E e UPC EAN EXTENSION.
App é de software livre:
É código aberto:
https://github.com/markusfisch/BinaryEye
@@ -1 +1 @@
Mais um leitor de códigos QR etc. para Android. Sem anúncios e de software livre.
Mais um leitor de códigos QR para Android. Sem anúncios e de software livre.
@@ -0,0 +1,4 @@
*可对 AZTEC/PDF417 设置纠错
*修复QR码的纠错级别设置
*使错误蜂鸣声遵循蜂鸣声设置
*当相机不可用时,不要关闭应用程序
@@ -0,0 +1 @@
Binary Eye