Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7120e18670 | ||
|
|
9fb34965f5 | ||
|
|
c5cbd1140b | ||
|
|
fecdcd7deb | ||
|
|
fd3d2f9934 | ||
|
|
35b6ead662 | ||
|
|
ad62cb5a03 | ||
|
|
e1905b1ff2 | ||
|
|
9aecf0d83b | ||
|
|
2645366baa | ||
|
|
37ea4ac9af | ||
|
|
4a6f5c5f92 | ||
|
|
b1ddb0fe7a | ||
|
|
2f61db731d | ||
|
|
b0de90c702 | ||
|
|
8df09090c9 | ||
|
|
9feef33275 | ||
|
|
147ad22df0 | ||
|
|
be833b7645 | ||
|
|
0eb921d579 | ||
|
|
1d156e0dbd | ||
|
|
82c1225848 | ||
|
|
33c1697d80 | ||
|
|
1d4e5d25ae | ||
|
|
386b47fbed | ||
|
|
b2c2632d76 | ||
|
|
4d64a5704d | ||
|
|
8875937022 | ||
|
|
3d33f62d7b | ||
|
|
a4050cbf8f | ||
|
|
abb362230e | ||
|
|
967cab9c7b | ||
|
|
c8d7be95e9 | ||
|
|
18146ec41a | ||
|
|
5cd6114ba1 | ||
|
|
8a310a1144 | ||
|
|
afc597ab90 | ||
|
|
6d742c4d19 | ||
|
|
1776559d40 | ||
|
|
75c1eb6b64 | ||
|
|
c5cffc00c3 | ||
|
|
c0153e822c | ||
|
|
f070269c2c | ||
|
|
3e8df89db1 | ||
|
|
56237c43cd | ||
|
|
7fc565ae67 | ||
|
|
656c1e36a8 | ||
|
|
42a6043f63 | ||
|
|
6a5fdae584 | ||
|
|
899deb77b5 | ||
|
|
3419194bfd | ||
|
|
3b55d48f65 | ||
|
|
d34673ddc3 | ||
|
|
242bf4c0a1 | ||
|
|
ed2a12eef8 | ||
|
|
4dd5c12e85 | ||
|
|
d3fae01786 | ||
|
|
37b6e6f832 |
@@ -1,5 +1,36 @@
|
||||
# Change Log
|
||||
|
||||
## 1.37.0
|
||||
* Improve formatting date and time in history listing
|
||||
* Add haptic and audible feedback for background request errors
|
||||
|
||||
## 1.36.0
|
||||
* Add a setting to automatically return to scanning screen after copying
|
||||
* Add a button to test the background request
|
||||
* Show HTTP response for background requests
|
||||
* Improve SVG export
|
||||
* Automatically continue with an action after granting a permission
|
||||
* Update Chinese translation
|
||||
* Update French translation
|
||||
* Update Indonesian translation
|
||||
* Update Turkish translation
|
||||
* Update Ukrainian translation
|
||||
|
||||
## 1.35.0
|
||||
* Put images with transparent pixels on white/black
|
||||
* Use cropping limiter when scanning from images too
|
||||
* Support setting the error correction level when creating QR Codes
|
||||
* Support setting a custom deviating locale
|
||||
* Use adaptive icons for shortcut icons
|
||||
* Add exporting barcodes as plain text
|
||||
* Add Ukrainian translation
|
||||
* Add Turkish translation
|
||||
* Add Georgian translation
|
||||
* Update Indonesian translation
|
||||
* Update Russian translation
|
||||
* Update Italian translation
|
||||
* Update Simplified Chinese translation
|
||||
|
||||
## 1.34.0
|
||||
* Use Material Design settings with headers
|
||||
* Add a setting to choose the message type when forwarding scanned content
|
||||
|
||||
@@ -4,3 +4,50 @@ Binary Eye does not collect any personal information.
|
||||
|
||||
If you have any questions or suggestions about my Privacy Policy, do not
|
||||
hesitate to contact me.
|
||||
|
||||
## Permissions
|
||||
|
||||
### [ACCESS_FINE_LOCATION](https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION)
|
||||
|
||||
Required to add a WiFi network from a barcode (usually a QR Code).
|
||||
|
||||
Before Android Q, this feature requires using
|
||||
[WifiManager.getConfiguredNetworks][configuredNetworks]
|
||||
which requires `ACCESS_FINE_LOCATION`.
|
||||
|
||||
On Android Q an better, this permission is not requested nor required.
|
||||
|
||||
### [CAMERA](https://developer.android.com/reference/android/Manifest.permission#CAMERA)
|
||||
|
||||
Required to read a barcode from the camera image.
|
||||
|
||||
### [INTERNET](https://developer.android.com/reference/android/Manifest.permission#INTERNET)
|
||||
|
||||
Required to send a scanned code to a custom URL you can specify in settings.
|
||||
|
||||
### [VIBRATE](https://developer.android.com/reference/android/Manifest.permission#VIBRATE)
|
||||
|
||||
Required to vibrate on detection.
|
||||
|
||||
### [WRITE_EXTERNAL_STORAGE](https://developer.android.com/reference/android/Manifest.permission#WRITE_EXTERNAL_STORAGE)
|
||||
|
||||
Required to save generated barcodes as files before Android Q.
|
||||
|
||||
### [CHANGE_WIFI_STATE](https://developer.android.com/reference/android/Manifest.permission#CHANGE_WIFI_STATE)
|
||||
|
||||
Required to add a WiFi network from a barcode (usually a QR Code).
|
||||
|
||||
On Android Q and better, this feature requires using
|
||||
[WifiManager.addNetworkSuggestions][addNetworkSuggestions]
|
||||
which requires `CHANGE_WIFI_STATE`.
|
||||
|
||||
### [ACCESS_WIFI_STATE](https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION)
|
||||
|
||||
Required to add a WiFi network from a barcode (usually a QR Code).
|
||||
|
||||
Before Android Q, this feature requires using
|
||||
[WifiManager.getConfiguredNetworks][configuredNetworks]
|
||||
which requires `ACCESS_WIFI_STATE`.
|
||||
|
||||
[configuredNetworks]: https://developer.android.com/reference/android/net/wifi/WifiManager#getConfiguredNetworks()
|
||||
[addNetworkSuggestions]: https://developer.android.com/reference/android/net/wifi/WifiManager#addNetworkSuggestions(java.util.List%3Candroid.net.wifi.WifiNetworkSuggestion%3E)
|
||||
|
||||
@@ -12,9 +12,14 @@ library.
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||

|
||||

|
||||
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/screencap-scanning.png"
|
||||
alt="Screenshot Gallery" width="160"/>
|
||||
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/screencap-scanning-cropped.png"
|
||||
alt="Screenshot Gallery" width="160"/>
|
||||
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/screencap-decoded.png"
|
||||
alt="Screenshot Theme" width="160"/>
|
||||
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/screencap-compose-barcode.png"
|
||||
alt="Screenshot Editor" width="160"/>
|
||||
|
||||
## Download
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ android {
|
||||
minSdkVersion 9
|
||||
targetSdkVersion sdk_version
|
||||
|
||||
versionCode 72
|
||||
versionName '1.34.0'
|
||||
versionCode 76
|
||||
versionName '1.37.0'
|
||||
|
||||
// it's recommended to set this value to the lowest API level
|
||||
// able to provide all the functionality
|
||||
@@ -77,5 +77,5 @@ dependencies {
|
||||
// https://github.com/zxing/zxing/issues/1170
|
||||
implementation 'com.google.zxing:core:3.3.3'
|
||||
implementation 'com.github.markusfisch:CameraView:1.9.1'
|
||||
implementation 'com.github.markusfisch:ScalingImageView:1.2.0'
|
||||
implementation 'com.github.markusfisch:ScalingImageView:1.3.0'
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.support.test.InstrumentationRegistry
|
||||
import android.support.test.runner.AndroidJUnit4
|
||||
import android.support.v8.renderscript.RenderScript
|
||||
import de.markusfisch.android.binaryeye.rs.Preprocessor
|
||||
import de.markusfisch.android.binaryeye.zxing.Zxing
|
||||
import org.junit.Assert.fail;
|
||||
@@ -35,8 +36,11 @@ class PreprocessorTest {
|
||||
val frameWidth = bitmap.width
|
||||
val frameHeight = bitmap.height
|
||||
val frameOrientation = m.group(1) ?: return
|
||||
val preprocessor = Preprocessor(
|
||||
val rs = RenderScript.create(
|
||||
InstrumentationRegistry.getTargetContext(),
|
||||
)
|
||||
val preprocessor = Preprocessor(
|
||||
rs,
|
||||
frameWidth,
|
||||
frameHeight,
|
||||
null
|
||||
@@ -55,6 +59,7 @@ class PreprocessorTest {
|
||||
}
|
||||
val result = zxing.decode(frameData, outWidth, outHeight)
|
||||
preprocessor.destroy()
|
||||
rs.destroy()
|
||||
|
||||
checkNotNull(result) { "no barcode found in $sample" }
|
||||
}
|
||||
|
||||
@@ -15,6 +15,16 @@
|
||||
<uses-feature android:name="android.hardware.camera"/>
|
||||
<uses-feature android:name="android.hardware.camera.autofocus"/>
|
||||
<uses-sdk tools:overrideLibrary="android.support.v14.preference"/>
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<data android:scheme="https"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<data android:scheme="http"/>
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
tools:ignore="UnusedAttribute"
|
||||
android:name=".app.BinaryEyeApp"
|
||||
|
||||
@@ -7,6 +7,8 @@ import android.content.pm.PackageManager
|
||||
import android.graphics.Rect
|
||||
import android.graphics.RectF
|
||||
import android.hardware.Camera
|
||||
import android.media.AudioManager
|
||||
import android.media.ToneGenerator
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Vibrator
|
||||
@@ -14,6 +16,7 @@ import android.support.design.widget.FloatingActionButton
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.support.v7.widget.Toolbar
|
||||
import android.support.v8.renderscript.RSRuntimeException
|
||||
import android.support.v8.renderscript.RenderScript
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.MotionEvent
|
||||
@@ -21,7 +24,6 @@ import android.view.View
|
||||
import android.widget.SeekBar
|
||||
import com.google.zxing.Result
|
||||
import com.google.zxing.ResultMetadataType
|
||||
import com.google.zxing.ResultPointCallback
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.app.*
|
||||
import de.markusfisch.android.binaryeye.database.Scan
|
||||
@@ -40,7 +42,7 @@ import kotlin.math.min
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
class CameraActivity : AppCompatActivity() {
|
||||
private val zxing = Zxing(ResultPointCallback { point ->
|
||||
private val zxing = Zxing { point ->
|
||||
point?.let {
|
||||
getMapping()?.map(it)?.let {
|
||||
detectorView.post {
|
||||
@@ -48,8 +50,9 @@ class CameraActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private lateinit var rs: RenderScript
|
||||
private lateinit var vibrator: Vibrator
|
||||
private lateinit var cameraView: CameraView
|
||||
private lateinit var detectorView: DetectorView
|
||||
@@ -102,10 +105,19 @@ class CameraActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context?) {
|
||||
base?.applyLocale(prefs.customLocale)
|
||||
super.attachBaseContext(base)
|
||||
}
|
||||
|
||||
override fun onCreate(state: Bundle?) {
|
||||
super.onCreate(state)
|
||||
setContentView(R.layout.activity_camera)
|
||||
|
||||
// necessary to get the right translation after setting a custom locale
|
||||
setTitle(R.string.scan_code)
|
||||
|
||||
rs = RenderScript.create(this)
|
||||
vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
|
||||
|
||||
initSystemBars(this)
|
||||
@@ -133,6 +145,7 @@ class CameraActivity : AppCompatActivity() {
|
||||
fallbackBuffer = null
|
||||
saveZoom()
|
||||
saveCropHandlePos()
|
||||
rs.destroy()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -554,7 +567,7 @@ class CameraActivity : AppCompatActivity() {
|
||||
frameOrientation
|
||||
)
|
||||
val pp = Preprocessor(
|
||||
this,
|
||||
rs,
|
||||
frameWidth,
|
||||
frameHeight,
|
||||
frameRoi
|
||||
@@ -645,6 +658,7 @@ class CameraActivity : AppCompatActivity() {
|
||||
showResult(
|
||||
this@CameraActivity,
|
||||
result,
|
||||
vibrator,
|
||||
returnResult,
|
||||
bulkMode
|
||||
)
|
||||
@@ -672,8 +686,9 @@ class CameraActivity : AppCompatActivity() {
|
||||
fun showResult(
|
||||
activity: Activity,
|
||||
result: Result,
|
||||
vibrator: Vibrator,
|
||||
isResult: Boolean = false,
|
||||
bulkMode: Boolean = false
|
||||
bulkMode: Boolean = false,
|
||||
) {
|
||||
if (isResult) {
|
||||
activity.setResult(Activity.RESULT_OK, getReturnIntent(result))
|
||||
@@ -686,10 +701,19 @@ fun showResult(
|
||||
val scan = Scan(result)
|
||||
if (prefs.sendScanUrl.isNotEmpty()) {
|
||||
scan.sendAsync(
|
||||
activity.applicationContext,
|
||||
prefs.sendScanUrl,
|
||||
prefs.sendScanType
|
||||
)
|
||||
) { code, body ->
|
||||
if (code == null || code < 200 || code > 299) {
|
||||
vibrator.error()
|
||||
beepBeepBeep()
|
||||
}
|
||||
if (body != null && body.isNotEmpty()) {
|
||||
activity.toast(body)
|
||||
} else if (code == null || code > 299) {
|
||||
activity.toast(R.string.background_request_failed)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (prefs.useHistory) {
|
||||
scan.id = db.insertScan(scan)
|
||||
@@ -741,3 +765,10 @@ fun getReturnIntent(result: Result): Intent {
|
||||
}
|
||||
return intent
|
||||
}
|
||||
|
||||
private fun beepBeepBeep() {
|
||||
ToneGenerator(AudioManager.STREAM_ALARM, 100).startTone(
|
||||
ToneGenerator.TONE_CDMA_CONFIRM,
|
||||
1000
|
||||
)
|
||||
}
|
||||
|
||||
@@ -2,15 +2,14 @@ package de.markusfisch.android.binaryeye.activity
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.support.v7.widget.Toolbar
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.app.colorSystemAndToolBars
|
||||
import de.markusfisch.android.binaryeye.app.initSystemBars
|
||||
import de.markusfisch.android.binaryeye.app.setFragment
|
||||
import de.markusfisch.android.binaryeye.app.*
|
||||
import de.markusfisch.android.binaryeye.database.Scan
|
||||
import de.markusfisch.android.binaryeye.fragment.DecodeFragment
|
||||
import de.markusfisch.android.binaryeye.fragment.EncodeFragment
|
||||
@@ -19,6 +18,21 @@ import de.markusfisch.android.binaryeye.fragment.PreferencesFragment
|
||||
import de.markusfisch.android.binaryeye.view.recordToolbarHeight
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
when (requestCode) {
|
||||
PERMISSION_LOCATION, PERMISSION_WRITE -> if (grantResults.isNotEmpty() &&
|
||||
grantResults[0] == PackageManager.PERMISSION_GRANTED
|
||||
) {
|
||||
permissionGrantedCallback?.invoke()
|
||||
permissionGrantedCallback = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSupportNavigateUp(): Boolean {
|
||||
val fm = supportFragmentManager
|
||||
if (fm != null && fm.backStackEntryCount > 0) {
|
||||
@@ -29,6 +43,11 @@ class MainActivity : AppCompatActivity() {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context?) {
|
||||
base?.applyLocale(prefs.customLocale)
|
||||
super.attachBaseContext(base)
|
||||
}
|
||||
|
||||
override fun onCreate(state: Bundle?) {
|
||||
super.onCreate(state)
|
||||
setContentView(R.layout.activity_main)
|
||||
@@ -52,7 +71,7 @@ class MainActivity : AppCompatActivity() {
|
||||
private const val PREFERENCES = "preferences"
|
||||
private const val HISTORY = "history"
|
||||
private const val ENCODE = "encode"
|
||||
private const val DECODED = "decoded"
|
||||
const val DECODED = "decoded"
|
||||
|
||||
private fun getFragmentForIntent(intent: Intent?): Fragment {
|
||||
intent ?: return PreferencesFragment()
|
||||
|
||||
@@ -4,25 +4,27 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Rect
|
||||
import android.graphics.RectF
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.os.Vibrator
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.support.v7.widget.Toolbar
|
||||
import android.support.v8.renderscript.RenderScript
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import com.google.zxing.Result
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.app.colorSystemAndToolBars
|
||||
import de.markusfisch.android.binaryeye.app.initSystemBars
|
||||
import de.markusfisch.android.binaryeye.app.vibrate
|
||||
import de.markusfisch.android.binaryeye.app.*
|
||||
import de.markusfisch.android.binaryeye.graphics.crop
|
||||
import de.markusfisch.android.binaryeye.graphics.loadImageUri
|
||||
import de.markusfisch.android.binaryeye.graphics.mapResult
|
||||
import de.markusfisch.android.binaryeye.view.doOnApplyWindowInsets
|
||||
import de.markusfisch.android.binaryeye.rs.fixTransparency
|
||||
import de.markusfisch.android.binaryeye.view.recordToolbarHeight
|
||||
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
|
||||
import de.markusfisch.android.binaryeye.widget.CropImageView
|
||||
import de.markusfisch.android.binaryeye.widget.DetectorView
|
||||
import de.markusfisch.android.binaryeye.widget.toast
|
||||
import de.markusfisch.android.binaryeye.zxing.Zxing
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -33,14 +35,27 @@ import kotlinx.coroutines.withContext
|
||||
class PickActivity : AppCompatActivity() {
|
||||
private val zxing = Zxing()
|
||||
|
||||
private lateinit var rs: RenderScript
|
||||
private lateinit var vibrator: Vibrator
|
||||
private lateinit var cropImageView: CropImageView
|
||||
private lateinit var detectorView: DetectorView
|
||||
|
||||
private var result: Result? = null
|
||||
|
||||
override fun attachBaseContext(base: Context?) {
|
||||
base?.applyLocale(prefs.customLocale)
|
||||
super.attachBaseContext(base)
|
||||
}
|
||||
|
||||
override fun onCreate(state: Bundle?) {
|
||||
super.onCreate(state)
|
||||
setContentView(R.layout.activity_pick)
|
||||
|
||||
// necessary to get the right translation after setting a custom locale
|
||||
setTitle(R.string.pick_code_to_scan)
|
||||
|
||||
zxing.updateHints(true)
|
||||
rs = RenderScript.create(this)
|
||||
vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
|
||||
|
||||
initSystemBars(this)
|
||||
@@ -52,19 +67,10 @@ class PickActivity : AppCompatActivity() {
|
||||
colorSystemAndToolBars(this@PickActivity)
|
||||
}
|
||||
|
||||
val bitmap = if (
|
||||
intent?.action == Intent.ACTION_SEND &&
|
||||
intent.type?.startsWith("image/") == true
|
||||
) {
|
||||
loadSentImage(intent)
|
||||
} else if (
|
||||
intent?.action == Intent.ACTION_VIEW &&
|
||||
intent.type?.startsWith("image/") == true
|
||||
) {
|
||||
loadImageToOpen(intent)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
val bitmap = fixTransparency(
|
||||
rs,
|
||||
getBitmapFromIntent()
|
||||
)
|
||||
|
||||
if (bitmap == null) {
|
||||
applicationContext.toast(R.string.error_no_content)
|
||||
@@ -72,47 +78,79 @@ class PickActivity : AppCompatActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
var result: Result? = null
|
||||
val scannedRect = Rect()
|
||||
fun scanWithinBounds() = crop(
|
||||
cropImageView = findViewById(R.id.image) as CropImageView
|
||||
cropImageView.restrictTranslation = false
|
||||
cropImageView.setImageBitmap(bitmap)
|
||||
cropImageView.onScan = {
|
||||
scanWithinBounds(bitmap)
|
||||
}
|
||||
|
||||
detectorView = findViewById(R.id.detector_view) as DetectorView
|
||||
detectorView.onRoiChanged = {
|
||||
scanWithinBounds(bitmap)
|
||||
}
|
||||
detectorView.setPaddingFromWindowInsets()
|
||||
|
||||
findViewById(R.id.scan).setOnClickListener {
|
||||
showResult()
|
||||
}
|
||||
}
|
||||
|
||||
private fun getBitmapFromIntent(): Bitmap? = if (
|
||||
intent?.action == Intent.ACTION_SEND &&
|
||||
intent.type?.startsWith("image/") == true
|
||||
) {
|
||||
loadSentImage(intent)
|
||||
} else if (
|
||||
intent?.action == Intent.ACTION_VIEW &&
|
||||
intent.type?.startsWith("image/") == true
|
||||
) {
|
||||
loadImageToOpen(intent)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
private fun scanWithinBounds(bitmap: Bitmap) {
|
||||
val roi = detectorView.roi
|
||||
val rectInView = if (roi.width() < 1) {
|
||||
cropImageView.getBoundsRect()
|
||||
} else {
|
||||
roi
|
||||
}
|
||||
val imageRect = cropImageView.mappedRect
|
||||
val rectInImage = normalizeRoi(imageRect, rectInView)
|
||||
val cropped = crop(
|
||||
bitmap,
|
||||
cropImageView.normalizedRectInBounds,
|
||||
rectInImage,
|
||||
cropImageView.imageRotation
|
||||
)?.let {
|
||||
scannedRect.set(0, 0, it.width, it.height)
|
||||
CoroutineScope(Dispatchers.IO).launch(Dispatchers.IO) {
|
||||
result = zxing.decodePositiveNegative(it)
|
||||
result?.let {
|
||||
withContext(Dispatchers.Main) {
|
||||
if (!isFinishing) {
|
||||
vibrator.vibrate()
|
||||
}
|
||||
cropImageView.updateResultPoints(
|
||||
mapResult(
|
||||
scannedRect.width(),
|
||||
scannedRect.height(),
|
||||
0,
|
||||
cropImageView.getBoundsRect(),
|
||||
it
|
||||
)
|
||||
)
|
||||
) ?: return
|
||||
CoroutineScope(Dispatchers.IO).launch(Dispatchers.IO) {
|
||||
result = zxing.decodePositiveNegative(cropped)
|
||||
result?.let {
|
||||
withContext(Dispatchers.Main) {
|
||||
if (!isFinishing) {
|
||||
vibrator.vibrate()
|
||||
}
|
||||
val rc = Rect()
|
||||
imageRect.round(rc)
|
||||
rectInView.intersect(rc)
|
||||
detectorView.mark(
|
||||
mapResult(
|
||||
cropped.width,
|
||||
cropped.height,
|
||||
0,
|
||||
rectInView,
|
||||
it
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cropImageView = findViewById(R.id.image) as CropImageView
|
||||
cropImageView.setImageBitmap(bitmap)
|
||||
cropImageView.onScan = {
|
||||
scanWithinBounds()
|
||||
}
|
||||
cropImageView.doOnApplyWindowInsets { v, insets ->
|
||||
(v as CropImageView).windowInsets.set(insets)
|
||||
}
|
||||
|
||||
findViewById(R.id.scan).setOnClickListener {
|
||||
scanImage(result)
|
||||
}
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
rs.destroy()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
@@ -146,12 +184,23 @@ class PickActivity : AppCompatActivity() {
|
||||
return loadImageUri(contentResolver, uri)
|
||||
}
|
||||
|
||||
private fun scanImage(result: Result?) {
|
||||
if (result != null) {
|
||||
showResult(this, result)
|
||||
private fun showResult() {
|
||||
result?.let {
|
||||
showResult(this, it, vibrator)
|
||||
finish()
|
||||
return
|
||||
}
|
||||
applicationContext.toast(R.string.no_barcode_found)
|
||||
}
|
||||
}
|
||||
|
||||
private fun normalizeRoi(imageRect: RectF, roi: Rect): RectF {
|
||||
val w = imageRect.width()
|
||||
val h = imageRect.height()
|
||||
return RectF(
|
||||
(roi.left - imageRect.left) / w,
|
||||
(roi.top - imageRect.top) / h,
|
||||
(roi.right - imageRect.left) / w,
|
||||
(roi.bottom - imageRect.top) / h
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,6 +9,9 @@ import android.widget.CursorAdapter
|
||||
import android.widget.TextView
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.database.Database
|
||||
import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class ScansAdapter(context: Context, cursor: Cursor) :
|
||||
CursorAdapter(context, cursor, false) {
|
||||
@@ -56,7 +59,7 @@ class ScansAdapter(context: Context, cursor: Cursor) :
|
||||
cursor: Cursor
|
||||
) {
|
||||
val holder = getViewHolder(view)
|
||||
holder.timeView.text = cursor.getString(timeIndex)
|
||||
holder.timeView.text = formatDateTime(cursor.getString(timeIndex))
|
||||
val name = cursor.getString(nameIndex)
|
||||
val content = cursor.getString(contentIndex)
|
||||
var icon = 0
|
||||
@@ -71,7 +74,7 @@ class ScansAdapter(context: Context, cursor: Cursor) :
|
||||
holder.contentView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
icon, 0, 0, 0
|
||||
)
|
||||
holder.formatView.text = cursor.getString(formatIndex)
|
||||
holder.formatView.text = prettifyFormatName(cursor.getString(formatIndex))
|
||||
// view.isSelected needs to be put on the queue to work
|
||||
val selected = cursor.getLong(idIndex) == selectedScanId
|
||||
view.post {
|
||||
@@ -95,3 +98,15 @@ class ScansAdapter(context: Context, cursor: Cursor) :
|
||||
val formatView: TextView
|
||||
)
|
||||
}
|
||||
|
||||
fun prettifyFormatName(format: String) = format.replace("_", " ")
|
||||
|
||||
private fun formatDateTime(rfc: String): String {
|
||||
SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US).parse(rfc)?.let {
|
||||
return DateFormat.getDateTimeInstance(
|
||||
DateFormat.LONG,
|
||||
DateFormat.SHORT
|
||||
).format(it)
|
||||
}
|
||||
return rfc
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ fun Context.copyToClipboard(text: String) {
|
||||
(service as android.text.ClipboardManager).text = text
|
||||
} else {
|
||||
(service as android.content.ClipboardManager).setPrimaryClip(
|
||||
ClipData.newPlainText("simple text", text)
|
||||
ClipData.newPlainText("plain text", text)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package de.markusfisch.android.binaryeye.app
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import java.util.*
|
||||
|
||||
fun Context.applyLocale(localeName: String) {
|
||||
if (localeName.isNotEmpty()) {
|
||||
val locale = Locale(localeName)
|
||||
Locale.setDefault(locale)
|
||||
val conf = resources.configuration
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
@Suppress("DEPRECATION")
|
||||
conf.locale = locale
|
||||
} else {
|
||||
conf.setLocale(locale)
|
||||
}
|
||||
resources.updateConfiguration(conf, resources.displayMetrics)
|
||||
}
|
||||
}
|
||||
@@ -6,17 +6,18 @@ import android.content.pm.PackageManager
|
||||
import android.support.v4.app.ActivityCompat
|
||||
import android.support.v4.content.ContextCompat
|
||||
|
||||
var permissionGrantedCallback: (() -> Any)? = null
|
||||
|
||||
const val PERMISSION_CAMERA = 1
|
||||
fun hasCameraPermission(activity: Activity): Boolean {
|
||||
return hasPermission(
|
||||
activity,
|
||||
Manifest.permission.CAMERA,
|
||||
PERMISSION_CAMERA
|
||||
)
|
||||
}
|
||||
fun hasCameraPermission(activity: Activity) = hasPermission(
|
||||
activity,
|
||||
Manifest.permission.CAMERA,
|
||||
PERMISSION_CAMERA
|
||||
)
|
||||
|
||||
const val PERMISSION_WRITE = 2
|
||||
fun hasWritePermission(activity: Activity): Boolean {
|
||||
fun hasWritePermission(activity: Activity, callback: () -> Any): Boolean {
|
||||
permissionGrantedCallback = callback
|
||||
return hasPermission(
|
||||
activity,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
@@ -25,7 +26,8 @@ fun hasWritePermission(activity: Activity): Boolean {
|
||||
}
|
||||
|
||||
const val PERMISSION_LOCATION = 3
|
||||
fun hasLocationPermission(activity: Activity): Boolean {
|
||||
fun hasLocationPermission(activity: Activity, callback: () -> Any): Boolean {
|
||||
permissionGrantedCallback = callback
|
||||
return hasPermission(
|
||||
activity,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||
|
||||
@@ -5,6 +5,12 @@ import android.os.VibrationEffect
|
||||
import android.os.Vibrator
|
||||
|
||||
private const val MILLISECONDS = 100L
|
||||
private val errorPatternTimings = longArrayOf(
|
||||
50L, 100L, 50L, 100L, 50L
|
||||
)
|
||||
private val errorPatternAmplitudes = intArrayOf(
|
||||
255, 0, 255, 0, 255
|
||||
)
|
||||
|
||||
fun Vibrator.vibrate() {
|
||||
if (!prefs.vibrate) {
|
||||
@@ -12,9 +18,9 @@ fun Vibrator.vibrate() {
|
||||
}
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
@Suppress("DEPRECATION")
|
||||
this.vibrate(MILLISECONDS)
|
||||
vibrate(MILLISECONDS)
|
||||
} else {
|
||||
this.vibrate(
|
||||
vibrate(
|
||||
VibrationEffect.createOneShot(
|
||||
MILLISECONDS,
|
||||
VibrationEffect.DEFAULT_AMPLITUDE
|
||||
@@ -22,3 +28,21 @@ fun Vibrator.vibrate() {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun Vibrator.error() {
|
||||
if (!prefs.vibrate) {
|
||||
return
|
||||
}
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
@Suppress("DEPRECATION")
|
||||
vibrate(errorPatternTimings, -1)
|
||||
} else {
|
||||
vibrate(
|
||||
VibrationEffect.createWaveform(
|
||||
errorPatternTimings,
|
||||
errorPatternAmplitudes,
|
||||
-1
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +87,8 @@ private fun Cursor.toCsvRecord(
|
||||
return sb.toString().toByteArray()
|
||||
}
|
||||
|
||||
private fun String.quoteAndEscape() = "\"${this
|
||||
.replace("\n", " ")
|
||||
.replace("\"", "\"\"")}\""
|
||||
private fun String.quoteAndEscape() = "\"${
|
||||
this
|
||||
.replace("\n", " ")
|
||||
.replace("\"", "\"\"")
|
||||
}\""
|
||||
|
||||
@@ -2,19 +2,24 @@ package de.markusfisch.android.binaryeye.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import android.view.*
|
||||
import android.widget.EditText
|
||||
import com.google.zxing.BarcodeFormat
|
||||
import com.google.zxing.EncodeHintType
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.app.*
|
||||
import de.markusfisch.android.binaryeye.view.doOnApplyWindowInsets
|
||||
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
|
||||
import de.markusfisch.android.binaryeye.widget.ConfinedScalingImageView
|
||||
import de.markusfisch.android.binaryeye.widget.toast
|
||||
import de.markusfisch.android.binaryeye.zxing.Zxing
|
||||
import de.markusfisch.android.binaryeye.zxing.encodeAsBitmap
|
||||
import de.markusfisch.android.binaryeye.zxing.encodeAsSvg
|
||||
import de.markusfisch.android.binaryeye.zxing.encodeAsText
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Dispatchers.Main
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -26,11 +31,12 @@ import java.util.*
|
||||
|
||||
class BarcodeFragment : Fragment() {
|
||||
private enum class FileType {
|
||||
PNG, SVG
|
||||
PNG, SVG, TXT
|
||||
}
|
||||
|
||||
private var barcodeBitmap: Bitmap? = null
|
||||
private var barcodeSvg: String? = null
|
||||
private var barcodeTxt: String? = null
|
||||
private var content: String = ""
|
||||
private var format: BarcodeFormat? = null
|
||||
|
||||
@@ -56,10 +62,12 @@ class BarcodeFragment : Fragment() {
|
||||
val args = arguments ?: return view
|
||||
val content = args.getString(CONTENT) ?: return view
|
||||
val format = args.getSerializable(FORMAT) as BarcodeFormat? ?: return view
|
||||
val hints = args.getSerializable(HINTS) as EnumMap<EncodeHintType, Any>?
|
||||
val size = args.getInt(SIZE)
|
||||
try {
|
||||
barcodeBitmap = Zxing.encodeAsBitmap(content, format, size, size)
|
||||
barcodeSvg = Zxing.encodeAsSvg(content, format, size, size)
|
||||
barcodeBitmap = encodeAsBitmap(content, format, size, size, hints)
|
||||
barcodeSvg = encodeAsSvg(content, format, hints)
|
||||
barcodeTxt = encodeAsText(content, format, hints)
|
||||
} catch (e: Exception) {
|
||||
var message = e.message
|
||||
if (message == null || message.isEmpty()) {
|
||||
@@ -84,9 +92,8 @@ class BarcodeFragment : Fragment() {
|
||||
}
|
||||
|
||||
view.findViewById<View>(R.id.share).setOnClickListener {
|
||||
val bitmap = barcodeBitmap
|
||||
bitmap?.let {
|
||||
share(bitmap)
|
||||
pickFileType(context, R.string.share_as) {
|
||||
shareAs(it)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,23 +111,42 @@ class BarcodeFragment : Fragment() {
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
R.id.export_svg -> {
|
||||
askForFileNameAndSave(FileType.SVG)
|
||||
R.id.copy_to_clipboard -> {
|
||||
barcodeTxt?.let {
|
||||
context.copyToClipboard(it)
|
||||
context.toast(R.string.copied_to_clipboard)
|
||||
}
|
||||
true
|
||||
}
|
||||
R.id.export_png -> {
|
||||
askForFileNameAndSave(FileType.PNG)
|
||||
R.id.export_to_file -> {
|
||||
pickFileType(context, R.string.export_as) {
|
||||
askForFileNameAndSave(it)
|
||||
}
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
||||
private fun pickFileType(
|
||||
context: Context,
|
||||
title: Int,
|
||||
action: (FileType) -> Unit
|
||||
) {
|
||||
val fileTypes = FileType.values()
|
||||
AlertDialog.Builder(context)
|
||||
.setTitle(title)
|
||||
.setItems(fileTypes.map { it.name }.toTypedArray()) { _, which ->
|
||||
action(fileTypes[which])
|
||||
}
|
||||
.show()
|
||||
}
|
||||
|
||||
// dialogs do not have a parent view
|
||||
@SuppressLint("InflateParams")
|
||||
private fun askForFileNameAndSave(fileType: FileType) {
|
||||
val ac = activity ?: return
|
||||
if (!hasWritePermission(ac)) {
|
||||
if (!hasWritePermission(ac) { askForFileNameAndSave(fileType) }) {
|
||||
return
|
||||
}
|
||||
val view = ac.layoutInflater.inflate(R.layout.dialog_save_file, null)
|
||||
@@ -133,18 +159,26 @@ class BarcodeFragment : Fragment() {
|
||||
when (fileType) {
|
||||
FileType.PNG -> saveAs(
|
||||
addSuffixIfNotGiven(fileName, ".png"),
|
||||
"image/png"
|
||||
MIME_PNG
|
||||
) {
|
||||
barcodeBitmap?.saveAsPng(it)
|
||||
}
|
||||
FileType.SVG -> saveAs(
|
||||
addSuffixIfNotGiven(fileName, ".svg"),
|
||||
"image/svg+xmg"
|
||||
MIME_SVG
|
||||
) { outputStream ->
|
||||
barcodeSvg?.let {
|
||||
outputStream.write(it.toByteArray())
|
||||
}
|
||||
}
|
||||
FileType.TXT -> saveAs(
|
||||
addSuffixIfNotGiven(fileName, ".txt"),
|
||||
MIME_TXT
|
||||
) { outputStream ->
|
||||
barcodeTxt?.let {
|
||||
outputStream.write(it.toByteArray())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
||||
@@ -166,8 +200,16 @@ class BarcodeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun shareAs(fileType: FileType) {
|
||||
when (fileType) {
|
||||
FileType.PNG -> barcodeBitmap?.let { share(it) }
|
||||
FileType.SVG -> barcodeSvg?.let { shareText(context, it, MIME_SVG) }
|
||||
FileType.TXT -> barcodeTxt?.let { shareText(context, it) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun share(bitmap: Bitmap) {
|
||||
GlobalScope.launch {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
val file = File(
|
||||
context.externalCacheDir,
|
||||
"shared_barcode.png"
|
||||
@@ -193,16 +235,24 @@ class BarcodeFragment : Fragment() {
|
||||
companion object {
|
||||
private const val CONTENT = "content"
|
||||
private const val FORMAT = "format"
|
||||
private const val HINTS = "hints"
|
||||
private const val SIZE = "size"
|
||||
private const val MIME_PNG = "image/png"
|
||||
private const val MIME_SVG = "image/svg+xmg"
|
||||
private const val MIME_TXT = "text/plain"
|
||||
|
||||
fun newInstance(
|
||||
content: String,
|
||||
format: BarcodeFormat,
|
||||
size: Int
|
||||
size: Int,
|
||||
hints: EnumMap<EncodeHintType, Any>? = null
|
||||
): Fragment {
|
||||
val args = Bundle()
|
||||
args.putString(CONTENT, content)
|
||||
args.putSerializable(FORMAT, format)
|
||||
hints?.let {
|
||||
args.putSerializable(HINTS, it)
|
||||
}
|
||||
args.putInt(SIZE, size)
|
||||
val fragment = BarcodeFragment()
|
||||
fragment.arguments = args
|
||||
|
||||
@@ -14,6 +14,8 @@ import android.widget.TextView
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.actions.ActionRegistry
|
||||
import de.markusfisch.android.binaryeye.actions.wifi.WifiAction
|
||||
import de.markusfisch.android.binaryeye.activity.MainActivity
|
||||
import de.markusfisch.android.binaryeye.adapter.prettifyFormatName
|
||||
import de.markusfisch.android.binaryeye.app.*
|
||||
import de.markusfisch.android.binaryeye.database.Scan
|
||||
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
|
||||
@@ -36,6 +38,7 @@ class DecodeFragment : Fragment() {
|
||||
private val content: String
|
||||
get() = contentView.text.toString()
|
||||
|
||||
private var closeAutomatically = false
|
||||
private var action = ActionRegistry.DEFAULT_ACTION
|
||||
private var isBinary = false
|
||||
private var id = 0L
|
||||
@@ -58,6 +61,9 @@ class DecodeFragment : Fragment() {
|
||||
false
|
||||
)
|
||||
|
||||
closeAutomatically = prefs.closeAutomatically &&
|
||||
activity?.intent?.hasExtra(MainActivity.DECODED) == true
|
||||
|
||||
val scan = arguments?.getParcelable(SCAN) as Scan?
|
||||
?: throw IllegalArgumentException("DecodeFragment needs a Scan")
|
||||
id = scan.id
|
||||
@@ -126,9 +132,9 @@ class DecodeFragment : Fragment() {
|
||||
return view
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
parentJob.cancel()
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
private fun updateViewsAndAction(bytes: ByteArray) {
|
||||
@@ -139,7 +145,7 @@ class DecodeFragment : Fragment() {
|
||||
formatView.text = resources.getQuantityString(
|
||||
R.plurals.barcode_info,
|
||||
bytes.size,
|
||||
format,
|
||||
prettifyFormatName(format),
|
||||
bytes.size
|
||||
)
|
||||
hexView.text = if (prefs.showHexDump) hexDump(bytes) else ""
|
||||
@@ -206,14 +212,19 @@ class DecodeFragment : Fragment() {
|
||||
return when (item.itemId) {
|
||||
R.id.copy_password -> {
|
||||
copyPasswordToClipboard()
|
||||
maybeBackOrFinish()
|
||||
true
|
||||
}
|
||||
R.id.copy_to_clipboard -> {
|
||||
copyToClipboard(content)
|
||||
maybeBackOrFinish()
|
||||
true
|
||||
}
|
||||
R.id.share -> {
|
||||
context?.also { shareText(it, content) }
|
||||
context?.also {
|
||||
shareText(it, content)
|
||||
maybeBackOrFinish()
|
||||
}
|
||||
true
|
||||
}
|
||||
R.id.create -> {
|
||||
@@ -251,6 +262,12 @@ class DecodeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeBackOrFinish() {
|
||||
if (closeAutomatically) {
|
||||
backOrFinish()
|
||||
}
|
||||
}
|
||||
|
||||
private fun backOrFinish() {
|
||||
val fm = fragmentManager
|
||||
if (fm != null && fm.backStackEntryCount > 0) {
|
||||
@@ -265,19 +282,20 @@ class DecodeFragment : Fragment() {
|
||||
if (content.isNotEmpty()) {
|
||||
if (action is WifiAction &&
|
||||
Build.VERSION.SDK_INT < Build.VERSION_CODES.Q &&
|
||||
!hasLocationPermission(ac)
|
||||
!hasLocationPermission(ac) { executeAction(content) }
|
||||
) {
|
||||
return
|
||||
}
|
||||
scope.launch {
|
||||
action.execute(ac, content)
|
||||
maybeBackOrFinish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun askForFileNameAndSave(raw: ByteArray) {
|
||||
val ac = activity ?: return
|
||||
if (!hasWritePermission(ac)) {
|
||||
if (!hasWritePermission(ac) { askForFileNameAndSave(raw) }) {
|
||||
return
|
||||
}
|
||||
scope.launch(Dispatchers.Main) {
|
||||
|
||||
@@ -7,14 +7,20 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import com.google.zxing.BarcodeFormat
|
||||
import com.google.zxing.EncodeHintType
|
||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.adapter.prettifyFormatName
|
||||
import de.markusfisch.android.binaryeye.app.addFragment
|
||||
import de.markusfisch.android.binaryeye.app.hideSoftKeyboard
|
||||
import de.markusfisch.android.binaryeye.app.prefs
|
||||
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
|
||||
import java.util.*
|
||||
|
||||
class EncodeFragment : Fragment() {
|
||||
private lateinit var formatView: Spinner
|
||||
private lateinit var errorCorrectionLabel: TextView
|
||||
private lateinit var errorCorrectionLevel: Spinner
|
||||
private lateinit var sizeView: TextView
|
||||
private lateinit var sizeBarView: SeekBar
|
||||
private lateinit var contentView: EditText
|
||||
@@ -48,11 +54,38 @@ class EncodeFragment : Fragment() {
|
||||
)
|
||||
|
||||
formatView = view.findViewById(R.id.format)
|
||||
formatView.adapter = ArrayAdapter(
|
||||
val formatAdapter = ArrayAdapter(
|
||||
ac,
|
||||
android.R.layout.simple_list_item_1,
|
||||
writers.map { it.name }
|
||||
android.R.layout.simple_spinner_item,
|
||||
writers.map { prettifyFormatName(it.name) }
|
||||
)
|
||||
formatAdapter.setDropDownViewResource(
|
||||
android.R.layout.simple_spinner_dropdown_item
|
||||
)
|
||||
formatView.adapter = formatAdapter
|
||||
formatView.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||
override fun onItemSelected(
|
||||
parentView: AdapterView<*>?,
|
||||
selectedItemView: View?,
|
||||
position: Int,
|
||||
id: Long
|
||||
) {
|
||||
val visibility = if (
|
||||
writers[position] == BarcodeFormat.QR_CODE
|
||||
) {
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.GONE
|
||||
}
|
||||
errorCorrectionLabel.visibility = visibility
|
||||
errorCorrectionLevel.visibility = visibility
|
||||
}
|
||||
|
||||
override fun onNothingSelected(parentView: AdapterView<*>?) {}
|
||||
}
|
||||
|
||||
errorCorrectionLabel = view.findViewById(R.id.error_correction_label)
|
||||
errorCorrectionLevel = view.findViewById(R.id.error_correction_level)
|
||||
|
||||
sizeView = view.findViewById(R.id.size_display)
|
||||
sizeBarView = view.findViewById(R.id.size_bar)
|
||||
@@ -92,7 +125,16 @@ class EncodeFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun encode() {
|
||||
val hints = EnumMap<EncodeHintType, Any>(EncodeHintType::class.java)
|
||||
val format = writers[formatView.selectedItemPosition]
|
||||
if (format == BarcodeFormat.QR_CODE) {
|
||||
hints[EncodeHintType.ERROR_CORRECTION] = arrayListOf(
|
||||
ErrorCorrectionLevel.L,
|
||||
ErrorCorrectionLevel.M,
|
||||
ErrorCorrectionLevel.Q,
|
||||
ErrorCorrectionLevel.H
|
||||
)[errorCorrectionLevel.selectedItemPosition]
|
||||
}
|
||||
val size = getSize(sizeBarView.progress)
|
||||
val content = contentView.text.toString()
|
||||
if (content.isEmpty()) {
|
||||
@@ -105,7 +147,7 @@ class EncodeFragment : Fragment() {
|
||||
activity?.hideSoftKeyboard(contentView)
|
||||
addFragment(
|
||||
fragmentManager,
|
||||
BarcodeFragment.newInstance(content, format, size)
|
||||
BarcodeFragment.newInstance(content, format, size, hints)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,41 +357,43 @@ class HistoryFragment : Fragment() {
|
||||
.show()
|
||||
}
|
||||
|
||||
private fun askToExportToFile(context: Context) = scope.launch {
|
||||
val ac = activity ?: return@launch
|
||||
progressView.useVisibility {
|
||||
if (!hasWritePermission(ac)) {
|
||||
return@useVisibility
|
||||
}
|
||||
val options = context.resources.getStringArray(
|
||||
R.array.export_options_values
|
||||
)
|
||||
val delimiter = alertDialog<String>(context) { resume ->
|
||||
setTitle(R.string.export_as)
|
||||
setItems(R.array.export_options_names) { _, which ->
|
||||
resume(options[which])
|
||||
private fun askToExportToFile(context: Context) {
|
||||
scope.launch {
|
||||
val ac = activity ?: return@launch
|
||||
progressView.useVisibility {
|
||||
if (!hasWritePermission(ac) { askToExportToFile(context) }) {
|
||||
return@useVisibility
|
||||
}
|
||||
} ?: return@useVisibility
|
||||
val name = withContext(Dispatchers.Main) {
|
||||
ac.askForFileName(
|
||||
when (delimiter) {
|
||||
"db" -> ".db"
|
||||
"json" -> ".json"
|
||||
else -> ".csv"
|
||||
}
|
||||
val options = context.resources.getStringArray(
|
||||
R.array.export_options_values
|
||||
)
|
||||
} ?: return@useVisibility
|
||||
val message = when (delimiter) {
|
||||
"db" -> exportDatabase(ac, name)
|
||||
else -> db.getScansDetailed(filter)?.use {
|
||||
when (delimiter) {
|
||||
"json" -> exportJson(context, name, it)
|
||||
else -> exportCsv(context, name, it, delimiter)
|
||||
val delimiter = alertDialog<String>(context) { resume ->
|
||||
setTitle(R.string.export_as)
|
||||
setItems(R.array.export_options_names) { _, which ->
|
||||
resume(options[which])
|
||||
}
|
||||
} ?: false
|
||||
}.toSaveResult()
|
||||
withContext(Dispatchers.Main) {
|
||||
ac.toast(message)
|
||||
} ?: return@useVisibility
|
||||
val name = withContext(Dispatchers.Main) {
|
||||
ac.askForFileName(
|
||||
when (delimiter) {
|
||||
"db" -> ".db"
|
||||
"json" -> ".json"
|
||||
else -> ".csv"
|
||||
}
|
||||
)
|
||||
} ?: return@useVisibility
|
||||
val message = when (delimiter) {
|
||||
"db" -> exportDatabase(ac, name)
|
||||
else -> db.getScansDetailed(filter)?.use {
|
||||
when (delimiter) {
|
||||
"json" -> exportJson(context, name, it)
|
||||
else -> exportCsv(context, name, it, delimiter)
|
||||
}
|
||||
} ?: false
|
||||
}.toSaveResult()
|
||||
withContext(Dispatchers.Main) {
|
||||
ac.toast(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package de.markusfisch.android.binaryeye.fragment
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.support.v7.preference.ListPreference
|
||||
import android.support.v7.preference.Preference
|
||||
import android.support.v7.preference.PreferenceFragmentCompat
|
||||
import android.support.v7.preference.PreferenceGroup
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.activity.SplashActivity
|
||||
import de.markusfisch.android.binaryeye.app.prefs
|
||||
import de.markusfisch.android.binaryeye.app.systemBarRecyclerViewScrollListener
|
||||
import de.markusfisch.android.binaryeye.preference.UrlPreference
|
||||
@@ -21,7 +25,11 @@ class PreferencesFragment : PreferenceFragmentCompat() {
|
||||
) {
|
||||
val preference = findPreference(key) ?: return
|
||||
prefs.update()
|
||||
setSummary(preference)
|
||||
if (preference.key == "custom_locale") {
|
||||
activity?.restartApp()
|
||||
} else {
|
||||
setSummary(preference)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,3 +87,17 @@ class PreferencesFragment : PreferenceFragmentCompat() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Activity.restartApp() {
|
||||
val intent = Intent(this, SplashActivity::class.java)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
intent.addFlags(
|
||||
Intent.FLAG_ACTIVITY_NEW_TASK or
|
||||
Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||
)
|
||||
}
|
||||
startActivity(intent)
|
||||
finish()
|
||||
// restart to begin with an unmodified Locale to follow system settings
|
||||
Runtime.getRuntime().exit(0)
|
||||
}
|
||||
|
||||
@@ -5,25 +5,69 @@ import android.support.v7.preference.PreferenceDialogFragmentCompat
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.app.prefs
|
||||
import de.markusfisch.android.binaryeye.database.Scan
|
||||
import de.markusfisch.android.binaryeye.net.sendAsync
|
||||
import de.markusfisch.android.binaryeye.preference.UrlPreference
|
||||
|
||||
class UrlDialogFragment : PreferenceDialogFragmentCompat() {
|
||||
private var urlView: TextView? = null
|
||||
private var testButton: TextView? = null
|
||||
|
||||
override fun onBindDialogView(view: View?) {
|
||||
super.onBindDialogView(view)
|
||||
urlView = view?.findViewById(R.id.url)
|
||||
testButton = view?.findViewById(R.id.test_url)
|
||||
testButton?.setOnClickListener {
|
||||
testUrl(testButton)
|
||||
}
|
||||
urlView?.text = urlPreference().getUrl()
|
||||
urlView?.hint = getString(
|
||||
when (prefs.sendScanType) {
|
||||
"0" -> R.string.url_hint_add_content
|
||||
else -> R.string.url_hint
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun onDialogClosed(positiveResult: Boolean) {
|
||||
if (positiveResult) {
|
||||
urlPreference().setUrl(urlView?.text.toString())
|
||||
urlPreference().setUrl(getUrl())
|
||||
}
|
||||
}
|
||||
|
||||
private fun getUrl() = completeUrl(urlView?.text.toString())
|
||||
|
||||
private fun urlPreference() = preference as UrlPreference
|
||||
|
||||
private fun testUrl(textView: TextView?) {
|
||||
val url = getUrl()
|
||||
if (url.isEmpty()) {
|
||||
return
|
||||
}
|
||||
textView ?: return
|
||||
textView.text = "…"
|
||||
Scan(
|
||||
"test",
|
||||
null,
|
||||
"none",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
).sendAsync(url, prefs.sendScanType) { code, body ->
|
||||
textView.text = when {
|
||||
code != null -> "$code"
|
||||
body != null -> body
|
||||
else -> getString(R.string.background_request_failed)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun newInstance(key: String): UrlDialogFragment {
|
||||
val args = Bundle()
|
||||
@@ -34,3 +78,19 @@ class UrlDialogFragment : PreferenceDialogFragmentCompat() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun completeUrl(template: String): String {
|
||||
var s = template.trim()
|
||||
if (s.isEmpty()) {
|
||||
return ""
|
||||
}
|
||||
if (!s.startsWith("http")) {
|
||||
s = "http://${s}"
|
||||
}
|
||||
if (prefs.sendScanType == "0" &&
|
||||
!s.matches(".*/[a-zA-Z._-]*\\?[a-zA-Z0-9_-]+=$".toRegex())
|
||||
) {
|
||||
s = "${s}?content="
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import android.graphics.Matrix
|
||||
import android.graphics.RectF
|
||||
import android.net.Uri
|
||||
import java.io.IOException
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
fun loadImageUri(cr: ContentResolver, uri: Uri): Bitmap? = try {
|
||||
@@ -51,12 +53,14 @@ fun crop(bitmap: Bitmap, rect: RectF, rotation: Float) = try {
|
||||
val erected = erect(bitmap, rotation)
|
||||
val w = erected.width
|
||||
val h = erected.height
|
||||
val x = max(0, (rect.left * w).roundToInt())
|
||||
val y = max(0, (rect.top * h).roundToInt())
|
||||
Bitmap.createBitmap(
|
||||
erected,
|
||||
(rect.left * w).roundToInt(),
|
||||
(rect.top * h).roundToInt(),
|
||||
(rect.width() * w).roundToInt(),
|
||||
(rect.height() * h).roundToInt()
|
||||
x,
|
||||
y,
|
||||
min(w - x, (rect.width() * w).roundToInt()),
|
||||
min(h - y, (rect.height() * h).roundToInt())
|
||||
)
|
||||
} catch (e: OutOfMemoryError) {
|
||||
null
|
||||
|
||||
@@ -1,32 +1,31 @@
|
||||
package de.markusfisch.android.binaryeye.net
|
||||
|
||||
import android.content.Context
|
||||
import de.markusfisch.android.binaryeye.R
|
||||
import de.markusfisch.android.binaryeye.app.toHexString
|
||||
import de.markusfisch.android.binaryeye.database.Scan
|
||||
import de.markusfisch.android.binaryeye.widget.toast
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.json.JSONObject
|
||||
import java.io.BufferedReader
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.io.InputStreamReader
|
||||
import java.net.HttpURLConnection
|
||||
import java.net.ProtocolException
|
||||
import java.net.URL
|
||||
import java.net.URLEncoder
|
||||
|
||||
fun Scan.sendAsync(context: Context, url: String, type: String) {
|
||||
fun Scan.sendAsync(url: String, type: String, callback: (Int?, String?) -> Unit) {
|
||||
CoroutineScope(Dispatchers.IO).launch(Dispatchers.IO) {
|
||||
val code = send(url, type)
|
||||
val response = send(url, type)
|
||||
withContext(Dispatchers.Main) {
|
||||
if (code < 200 || code > 299) {
|
||||
context.toast(R.string.background_request_failed)
|
||||
}
|
||||
callback(response.code, response.body)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Scan.send(url: String, type: String): Int {
|
||||
private fun Scan.send(url: String, type: String): Response {
|
||||
return when (type) {
|
||||
"1" -> request(
|
||||
url + "?" + asUrlArguments()
|
||||
@@ -39,7 +38,7 @@ private fun Scan.send(url: String, type: String): Int {
|
||||
close()
|
||||
}
|
||||
}
|
||||
"3" -> request(url) { con ->
|
||||
"3" -> request(url) { con ->
|
||||
con.requestMethod = "POST"
|
||||
con.setRequestProperty("Content-Type", "application/json")
|
||||
con.outputStream.apply {
|
||||
@@ -84,15 +83,39 @@ private fun Map<String, String?>.filterNullValues() =
|
||||
private fun request(
|
||||
url: String,
|
||||
writer: ((HttpURLConnection) -> Any)? = null
|
||||
): Int {
|
||||
): Response {
|
||||
var con: HttpURLConnection? = null
|
||||
return try {
|
||||
con = URL(url).openConnection() as HttpURLConnection
|
||||
writer?.invoke(con)
|
||||
con.responseCode
|
||||
val body = con.inputStream.readHead()
|
||||
Response(con.responseCode, body)
|
||||
} catch (e: ProtocolException) {
|
||||
Response(null, e.message)
|
||||
} catch (e: IOException) {
|
||||
-1
|
||||
try {
|
||||
val body = con?.errorStream?.readHead() ?: e.message
|
||||
Response(con?.responseCode, body)
|
||||
} catch (e: IOException) {
|
||||
Response(null, e.message)
|
||||
}
|
||||
} finally {
|
||||
con?.disconnect()
|
||||
}
|
||||
}
|
||||
|
||||
private fun InputStream.readHead(): String {
|
||||
val sb = StringBuilder()
|
||||
val br = BufferedReader(InputStreamReader(this))
|
||||
var line = br.readLine()
|
||||
var i = 0
|
||||
while (line != null && sb.length < 240) {
|
||||
sb.append(line)
|
||||
line = br.readLine()
|
||||
++i
|
||||
}
|
||||
br.close()
|
||||
return sb.toString()
|
||||
}
|
||||
|
||||
private data class Response(val code: Int?, val body: String?)
|
||||
|
||||
@@ -81,6 +81,11 @@ class Preferences {
|
||||
apply(SHOW_HEX_DUMP, value)
|
||||
field = value
|
||||
}
|
||||
var closeAutomatically = false
|
||||
set(value) {
|
||||
apply(CLOSE_AUTOMATICALLY, value)
|
||||
field = value
|
||||
}
|
||||
var openWithUrl: String = ""
|
||||
set(value) {
|
||||
apply(OPEN_WITH_URL, value)
|
||||
@@ -96,6 +101,11 @@ class Preferences {
|
||||
apply(SEND_SCAN_TYPE, value)
|
||||
field = value
|
||||
}
|
||||
var customLocale: String = ""
|
||||
set(value) {
|
||||
apply(CUSTOM_LOCALE, value)
|
||||
field = value
|
||||
}
|
||||
var indexOfLastSelectedFormat: Int = 0
|
||||
set(value) {
|
||||
apply(INDEX_OF_LAST_SELECTED_FORMAT, value)
|
||||
@@ -141,6 +151,10 @@ class Preferences {
|
||||
)
|
||||
showMetaData = preferences.getBoolean(SHOW_META_DATA, showMetaData)
|
||||
showHexDump = preferences.getBoolean(SHOW_HEX_DUMP, showHexDump)
|
||||
closeAutomatically = preferences.getBoolean(
|
||||
CLOSE_AUTOMATICALLY,
|
||||
closeAutomatically
|
||||
)
|
||||
preferences.getString(OPEN_WITH_URL, openWithUrl)?.also {
|
||||
openWithUrl = it
|
||||
}
|
||||
@@ -150,6 +164,9 @@ class Preferences {
|
||||
preferences.getString(SEND_SCAN_TYPE, sendScanType)?.also {
|
||||
sendScanType = it
|
||||
}
|
||||
preferences.getString(CUSTOM_LOCALE, customLocale)?.also {
|
||||
customLocale = it
|
||||
}
|
||||
indexOfLastSelectedFormat = preferences.getInt(
|
||||
INDEX_OF_LAST_SELECTED_FORMAT,
|
||||
indexOfLastSelectedFormat
|
||||
@@ -189,11 +206,13 @@ class Preferences {
|
||||
const val IGNORE_CONSECUTIVE_DUPLICATES = "ignore_consecutive_duplicates"
|
||||
const val OPEN_IMMEDIATELY = "open_immediately"
|
||||
const val COPY_IMMEDIATELY = "copy_immediately"
|
||||
const val SHOW_HEX_DUMP = "show_hex_dump"
|
||||
const val SHOW_META_DATA = "show_meta_data"
|
||||
const val SHOW_HEX_DUMP = "show_hex_dump"
|
||||
const val CLOSE_AUTOMATICALLY = "close_automatically"
|
||||
const val OPEN_WITH_URL = "open_with_url"
|
||||
const val SEND_SCAN_URL = "send_scan_url"
|
||||
const val SEND_SCAN_TYPE = "send_scan_type"
|
||||
const val CUSTOM_LOCALE = "custom_locale"
|
||||
const val INDEX_OF_LAST_SELECTED_FORMAT = "index_of_last_selected_format"
|
||||
const val FORCE_COMPAT = "force_compat"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package de.markusfisch.android.binaryeye.rs
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.support.v8.renderscript.Allocation
|
||||
import android.support.v8.renderscript.RenderScript
|
||||
|
||||
fun fixTransparency(rs: RenderScript, bitmap: Bitmap?): Bitmap? {
|
||||
bitmap ?: return null
|
||||
val result = analyze(rs, bitmap)
|
||||
return if (result.hasTransparentPixels) {
|
||||
val copy = Bitmap.createBitmap(
|
||||
bitmap.width,
|
||||
bitmap.height,
|
||||
bitmap.config
|
||||
)
|
||||
Canvas(copy).apply {
|
||||
drawColor(result.backgroundColor)
|
||||
drawBitmap(bitmap, 0f, 0f, null)
|
||||
}
|
||||
copy
|
||||
} else {
|
||||
bitmap
|
||||
}
|
||||
}
|
||||
|
||||
private fun analyze(rs: RenderScript, bitmap: Bitmap): Result {
|
||||
val analyzeScript = ScriptC_analyze(rs)
|
||||
val bitmapAllocation = Allocation.createFromBitmap(rs, bitmap)
|
||||
val result = analyzeScript.reduce_analyze(bitmapAllocation).get()
|
||||
bitmapAllocation.destroy()
|
||||
analyzeScript.destroy()
|
||||
return Result(
|
||||
result.x > 0,
|
||||
if (result.y > 0) 0xff000000.toInt() else 0xffffffff.toInt()
|
||||
)
|
||||
}
|
||||
|
||||
private data class Result(
|
||||
val hasTransparentPixels: Boolean,
|
||||
val backgroundColor: Int
|
||||
)
|
||||
@@ -1,6 +1,5 @@
|
||||
package de.markusfisch.android.binaryeye.rs
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Rect
|
||||
import android.support.v8.renderscript.*
|
||||
import kotlin.math.max
|
||||
@@ -9,7 +8,7 @@ import kotlin.math.roundToInt
|
||||
private const val SCALE_FACTOR = .75f
|
||||
|
||||
class Preprocessor(
|
||||
context: Context,
|
||||
rs: RenderScript,
|
||||
width: Int,
|
||||
height: Int,
|
||||
private val roi: Rect?
|
||||
@@ -17,7 +16,6 @@ class Preprocessor(
|
||||
var outWidth = 0
|
||||
var outHeight = 0
|
||||
|
||||
private val rs = RenderScript.create(context)
|
||||
private val resizeScript = ScriptIntrinsicResize.create(rs)
|
||||
private val rotateScript = ScriptC_rotate(rs)
|
||||
|
||||
@@ -118,7 +116,6 @@ class Preprocessor(
|
||||
rotatedAlloc = null
|
||||
resizeScript.destroy()
|
||||
rotateScript.destroy()
|
||||
rs.destroy()
|
||||
}
|
||||
|
||||
fun resizeOnly(frame: ByteArray) {
|
||||
|
||||
@@ -2,53 +2,18 @@ package de.markusfisch.android.binaryeye.widget
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Point
|
||||
import android.graphics.Rect
|
||||
import android.graphics.RectF
|
||||
import android.util.AttributeSet
|
||||
import de.markusfisch.android.binaryeye.graphics.Dots
|
||||
import de.markusfisch.android.binaryeye.graphics.getDashedBorderPaint
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
class CropImageView(context: Context, attr: AttributeSet) :
|
||||
ConfinedScalingImageView(context, attr) {
|
||||
val windowInsets = Rect()
|
||||
|
||||
var onScan: (() -> Unit)? = null
|
||||
|
||||
private val dots = Dots(context)
|
||||
private val boundsPaint = context.getDashedBorderPaint()
|
||||
private val lastMappedRect = RectF()
|
||||
private val padding: Int = (24f * context.resources.displayMetrics.density).roundToInt()
|
||||
private val onScanRunnable = Runnable { onScan?.invoke() }
|
||||
|
||||
private var resultPoints: List<Point>? = null
|
||||
|
||||
init {
|
||||
scaleType = ScaleType.CENTER_CROP
|
||||
}
|
||||
|
||||
fun updateResultPoints(points: List<Point>) {
|
||||
resultPoints = points
|
||||
invalidate()
|
||||
}
|
||||
|
||||
override fun onLayout(
|
||||
changed: Boolean,
|
||||
left: Int,
|
||||
top: Int,
|
||||
right: Int,
|
||||
bottom: Int
|
||||
) {
|
||||
super.onLayout(changed, left, top, right, bottom)
|
||||
setBoundsWithPadding(
|
||||
left + windowInsets.left,
|
||||
top + windowInsets.top,
|
||||
right - windowInsets.right,
|
||||
bottom - windowInsets.bottom
|
||||
)
|
||||
}
|
||||
|
||||
fun getBoundsRect() = Rect(
|
||||
bounds.left.roundToInt(),
|
||||
bounds.top.roundToInt(),
|
||||
@@ -56,40 +21,12 @@ class CropImageView(context: Context, attr: AttributeSet) :
|
||||
bounds.bottom.roundToInt()
|
||||
)
|
||||
|
||||
private fun setBoundsWithPadding(
|
||||
left: Int,
|
||||
top: Int,
|
||||
right: Int,
|
||||
bottom: Int
|
||||
) {
|
||||
val width = right - left
|
||||
val height = bottom - top
|
||||
val size = if (width < height)
|
||||
width - padding * 2
|
||||
else
|
||||
height - padding * 2
|
||||
val hpad = (width - size) / 2
|
||||
val vpad = (height - size) / 2
|
||||
setBounds(
|
||||
left.toFloat() + hpad,
|
||||
top.toFloat() + vpad,
|
||||
right.toFloat() - hpad,
|
||||
bottom.toFloat() - vpad
|
||||
)
|
||||
center(bounds)
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
super.onDraw(canvas)
|
||||
canvas.drawRect(bounds, boundsPaint)
|
||||
resultPoints?.let {
|
||||
dots.draw(canvas, it)
|
||||
}
|
||||
resultPoints = null
|
||||
val mr = mappedRect ?: return
|
||||
if (mr != lastMappedRect) {
|
||||
removeCallbacks(onScanRunnable)
|
||||
postDelayed(onScanRunnable, 500)
|
||||
postDelayed(onScanRunnable, 300)
|
||||
lastMappedRect.set(mr)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,11 +143,12 @@ class DetectorView : View {
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
if (handleGrabbed) {
|
||||
handlePos.set(x, y)
|
||||
if (distSq(handlePos, touchDown) > minMoveThresholdSq) {
|
||||
handleActive = true
|
||||
handleActive =
|
||||
handleActive or (distSq(handlePos, touchDown) > minMoveThresholdSq)
|
||||
if (handleActive) {
|
||||
updateClipRect()
|
||||
invalidate()
|
||||
}
|
||||
updateClipRect()
|
||||
invalidate()
|
||||
true
|
||||
} else {
|
||||
false
|
||||
@@ -163,17 +164,15 @@ class DetectorView : View {
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (handleGrabbed) {
|
||||
if (!handleActive) {
|
||||
val mn = min(center.x, center.y) * .8f
|
||||
handlePos.set(
|
||||
(center.x + mn).roundToInt(),
|
||||
(center.y + mn).roundToInt()
|
||||
)
|
||||
setHandleToDefaultRoi()
|
||||
handleActive = true
|
||||
invalidate()
|
||||
} else {
|
||||
snap(x, y)
|
||||
}
|
||||
updateClipRect()
|
||||
if (handleActive) {
|
||||
updateClipRect()
|
||||
invalidate()
|
||||
}
|
||||
onRoiChanged?.invoke()
|
||||
handleGrabbed = false
|
||||
}
|
||||
@@ -183,6 +182,14 @@ class DetectorView : View {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setHandleToDefaultRoi() {
|
||||
val mn = min(center.x, center.y) * .8f
|
||||
handlePos.set(
|
||||
(center.x + mn).roundToInt(),
|
||||
(center.y + mn).roundToInt()
|
||||
)
|
||||
}
|
||||
|
||||
private fun snap(x: Int, y: Int) {
|
||||
val cx = clampX(x)
|
||||
val cy = clampY(y)
|
||||
@@ -228,7 +235,6 @@ class DetectorView : View {
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
canvas.drawColor(0, PorterDuff.Mode.CLEAR)
|
||||
if (handleActive) {
|
||||
drawClip(canvas)
|
||||
}
|
||||
@@ -263,7 +269,7 @@ class DetectorView : View {
|
||||
radius
|
||||
)
|
||||
)
|
||||
canvas.drawColor(shadeColor, PorterDuff.Mode.SRC)
|
||||
canvas.drawColor(shadeColor)
|
||||
canvas.restore()
|
||||
} else {
|
||||
canvas.drawRect(roi, roiPaint)
|
||||
|
||||
@@ -4,13 +4,13 @@ import android.content.Context
|
||||
import android.widget.Toast
|
||||
|
||||
fun Context.toast(message: Int) = Toast.makeText(
|
||||
this,
|
||||
applicationContext,
|
||||
message,
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
|
||||
fun Context.toast(message: String) = Toast.makeText(
|
||||
this,
|
||||
applicationContext,
|
||||
message,
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
|
||||
@@ -2,6 +2,7 @@ package de.markusfisch.android.binaryeye.zxing
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import com.google.zxing.*
|
||||
import com.google.zxing.common.BitMatrix
|
||||
import com.google.zxing.common.HybridBinarizer
|
||||
import java.util.*
|
||||
|
||||
@@ -10,7 +11,7 @@ class Zxing(possibleResultPoint: ResultPointCallback? = null) {
|
||||
private val multiFormatReader = MultiFormatReader()
|
||||
|
||||
init {
|
||||
val decodeFormats = EnumSet.noneOf<BarcodeFormat>(
|
||||
val decodeFormats = EnumSet.noneOf(
|
||||
BarcodeFormat::class.java
|
||||
)
|
||||
decodeFormats.addAll(
|
||||
@@ -118,80 +119,98 @@ class Zxing(possibleResultPoint: ResultPointCallback? = null) {
|
||||
multiFormatReader.reset()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val BLACK = 0xff000000.toInt()
|
||||
private const val WHITE = 0xffffffff.toInt()
|
||||
private const val BLACK = 0xff000000.toInt()
|
||||
private const val WHITE = 0xffffffff.toInt()
|
||||
|
||||
fun encodeAsBitmap(
|
||||
text: String,
|
||||
format: BarcodeFormat,
|
||||
width: Int,
|
||||
height: Int
|
||||
): Bitmap? {
|
||||
val hints = EnumMap<EncodeHintType, Any>(EncodeHintType::class.java)
|
||||
hints[EncodeHintType.CHARACTER_SET] = "utf-8"
|
||||
val result = MultiFormatWriter().encode(
|
||||
text,
|
||||
format,
|
||||
width,
|
||||
height,
|
||||
hints
|
||||
)
|
||||
val w = result.width
|
||||
val h = result.height
|
||||
val pixels = IntArray(w * h)
|
||||
var offset = 0
|
||||
for (y in 0 until h) {
|
||||
for (x in 0 until w) {
|
||||
pixels[offset + x] = if (result.get(x, y)) {
|
||||
BLACK
|
||||
} else {
|
||||
WHITE
|
||||
}
|
||||
}
|
||||
offset += w
|
||||
fun encodeAsBitmap(
|
||||
text: String,
|
||||
format: BarcodeFormat,
|
||||
width: Int,
|
||||
height: Int,
|
||||
hints: EnumMap<EncodeHintType, Any>? = null
|
||||
): Bitmap? {
|
||||
val bitMatrix = encode(text, format, hints, width, height)
|
||||
val w = bitMatrix.width
|
||||
val h = bitMatrix.height
|
||||
val pixels = IntArray(w * h)
|
||||
var offset = 0
|
||||
for (y in 0 until h) {
|
||||
for (x in 0 until w) {
|
||||
pixels[offset + x] = if (bitMatrix.get(x, y)) {
|
||||
BLACK
|
||||
} else {
|
||||
WHITE
|
||||
}
|
||||
val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
|
||||
bitmap.setPixels(pixels, 0, w, 0, 0, w, h)
|
||||
return bitmap
|
||||
}
|
||||
offset += w
|
||||
}
|
||||
val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
|
||||
bitmap.setPixels(pixels, 0, w, 0, 0, w, h)
|
||||
return bitmap
|
||||
}
|
||||
|
||||
fun encodeAsSvg(
|
||||
text: String,
|
||||
format: BarcodeFormat,
|
||||
width: Int,
|
||||
height: Int
|
||||
): String {
|
||||
val hints = EnumMap<EncodeHintType, Any>(EncodeHintType::class.java)
|
||||
hints[EncodeHintType.CHARACTER_SET] = "utf-8"
|
||||
val result = MultiFormatWriter().encode(
|
||||
text,
|
||||
format,
|
||||
0,
|
||||
0,
|
||||
hints
|
||||
)
|
||||
val sb = StringBuilder()
|
||||
sb.append("<svg width=\"$width\" height=\"$height\"")
|
||||
sb.append(" viewBox=\"0 0 $width $height\"")
|
||||
sb.append(" xmlns=\"http://www.w3.org/2000/svg\">\n")
|
||||
val w = result.width
|
||||
val h = result.height
|
||||
val xf = width.toFloat() / w
|
||||
val yf = height.toFloat() / h
|
||||
for (y in 0 until h) {
|
||||
for (x in 0 until w) {
|
||||
if (result.get(x, y)) {
|
||||
val ox = x * xf
|
||||
val oy = y * yf
|
||||
sb.append("<rect x=\"$ox\" y=\"$oy\"")
|
||||
sb.append(" width=\"$xf\" height=\"$yf\"/>\n")
|
||||
}
|
||||
}
|
||||
fun encodeAsSvg(
|
||||
text: String,
|
||||
format: BarcodeFormat,
|
||||
hints: EnumMap<EncodeHintType, Any>? = null
|
||||
): String {
|
||||
val bitMatrix = encode(text, format, hints)
|
||||
val sb = StringBuilder()
|
||||
val w = bitMatrix.width
|
||||
var h = bitMatrix.height
|
||||
val moduleHeight = if (h == 1) w / 2 else 1
|
||||
for (y in 0 until h) {
|
||||
for (x in 0 until w) {
|
||||
if (bitMatrix.get(x, y)) {
|
||||
sb.append(" M${x},${y}h1v${moduleHeight}h-1z")
|
||||
}
|
||||
sb.append("</svg>\n")
|
||||
return sb.toString()
|
||||
}
|
||||
}
|
||||
h *= moduleHeight
|
||||
return """<svg width="$w" height="$h"
|
||||
viewBox="0 0 $w $h"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="$sb"/>
|
||||
</svg>
|
||||
"""
|
||||
}
|
||||
|
||||
fun encodeAsText(
|
||||
text: String,
|
||||
format: BarcodeFormat,
|
||||
hints: EnumMap<EncodeHintType, Any>? = null
|
||||
): String {
|
||||
val bitMatrix = encode(text, format, hints)
|
||||
val w = bitMatrix.width
|
||||
val h = bitMatrix.height
|
||||
val sb = StringBuilder()
|
||||
for (y in 0 until h) {
|
||||
for (x in 0 until w) {
|
||||
sb.append(if (bitMatrix.get(x, y)) "█" else " ")
|
||||
}
|
||||
sb.append("\n")
|
||||
}
|
||||
return sb.toString()
|
||||
}
|
||||
|
||||
private fun encode(
|
||||
text: String,
|
||||
format: BarcodeFormat,
|
||||
encodeHints: EnumMap<EncodeHintType, Any>? = null,
|
||||
width: Int = 0,
|
||||
height: Int = 0
|
||||
): BitMatrix {
|
||||
val hints = encodeHints ?: EnumMap<EncodeHintType, Any>(EncodeHintType::class.java)
|
||||
if (!hints.contains(EncodeHintType.CHARACTER_SET)) {
|
||||
hints[EncodeHintType.CHARACTER_SET] = "utf-8"
|
||||
}
|
||||
return MultiFormatWriter().encode(
|
||||
text,
|
||||
format,
|
||||
width,
|
||||
height,
|
||||
hints
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/accent"/>
|
||||
<foreground android:drawable="@drawable/ic_shortcut_decode_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:pathData="M54,55.787m-5.719,0a5.719,5.719 0,1 1,11.438 0a5.719,5.719 0,1 1,-11.438 0"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M48.639,37.916L45.368,41.491L39.703,41.491C37.738,41.491 36.129,43.099 36.129,45.065L36.129,66.509C36.129,68.475 37.738,70.084 39.703,70.084L68.297,70.084C70.262,70.084 71.871,68.475 71.871,66.509L71.871,45.065C71.871,43.099 70.262,41.491 68.297,41.491L62.632,41.491L59.361,37.916ZM54,64.722C49.068,64.722 45.065,60.719 45.065,55.787C45.065,50.855 49.068,46.852 54,46.852C58.932,46.852 62.935,50.855 62.935,55.787C62.935,60.719 58.932,64.722 54,64.722Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,4 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/accent"/>
|
||||
<foreground android:drawable="@drawable/ic_shortcut_encode_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:pathData="M69.75,56.25L56.25,56.25L56.25,69.75L51.75,69.75L51.75,56.25L38.25,56.25L38.25,51.75L51.75,51.75L51.75,38.25L56.25,38.25L56.25,51.75L69.75,51.75Z"
|
||||
android:fillColor="#FFFFFF"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,4 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/accent"/>
|
||||
<foreground android:drawable="@drawable/ic_shortcut_preferences_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:pathData="M70.057,56.114C70.147,55.439 70.192,54.742 70.192,54C70.192,53.281 70.147,52.561 70.034,51.886L74.6,48.333C75.005,48.018 75.117,47.411 74.87,46.961L70.552,39.495C70.282,39 69.72,38.843 69.225,39L63.85,41.159C62.726,40.305 61.534,39.585 60.207,39.045L59.397,33.333C59.307,32.793 58.858,32.411 58.318,32.411L49.682,32.411C49.142,32.411 48.715,32.793 48.625,33.333L47.816,39.045C46.489,39.585 45.274,40.327 44.172,41.159L38.798,39C38.303,38.82 37.741,39 37.471,39.495L33.175,46.961C32.906,47.433 32.996,48.018 33.445,48.333L38.011,51.886C37.898,52.561 37.808,53.303 37.808,54C37.808,54.697 37.853,55.439 37.966,56.114L33.4,59.667C32.996,59.982 32.883,60.589 33.13,61.039L37.448,68.505C37.718,69 38.28,69.158 38.775,69L44.15,66.841C45.274,67.696 46.466,68.415 47.793,68.955L48.603,74.667C48.715,75.207 49.142,75.589 49.682,75.589L58.318,75.589C58.858,75.589 59.307,75.207 59.375,74.667L60.184,68.955C61.511,68.415 62.726,67.696 63.828,66.841L69.202,69C69.697,69.18 70.259,69 70.529,68.505L74.847,61.039C75.117,60.544 75.005,59.982 74.577,59.667ZM54,62.096C49.547,62.096 45.904,58.453 45.904,54C45.904,49.547 49.547,45.904 54,45.904C58.453,45.904 62.096,49.547 62.096,54C62.096,58.453 58.453,62.096 54,62.096Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
@@ -1,3 +1,3 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z"/>
|
||||
<path android:fillColor="#FFFFFF" android:pathData="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z"/>
|
||||
</vector>
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:fillColor="#FFFFFFFF" android:pathData="M4.413 15.067h-0.88v1.93h-1.37v-5.69h2.27c0.433 0 0.817 0.08 1.15 0.24 0.34 0.16 0.6 0.39 0.78 0.69 0.187 0.293 0.28 0.627 0.28 1 0 0.553-0.2 0.997-0.6 1.33-0.4 0.333-0.943 0.5-1.63 0.5zm-0.88-2.7v1.64h0.9c0.267 0 0.47-0.067 0.61-0.2s0.21-0.32 0.21-0.56c0-0.267-0.073-0.48-0.22-0.64-0.14-0.16-0.337-0.24-0.59-0.24h-0.91zm8.587-1.06v5.69h-1.36l-2.02-3.54v3.54H7.37v-5.69h1.37l2.01 3.54v-3.54h1.37zm5.527 2.65v2.34c-0.213 0.233-0.523 0.42-0.93 0.56-0.407 0.147-0.853 0.22-1.34 0.22-0.74 0-1.333-0.23-1.78-0.69-0.447-0.453-0.687-1.087-0.72-1.9v-0.49c0-0.56 0.1-1.05 0.3-1.47 0.193-0.413 0.477-0.733 0.85-0.96 0.367-0.227 0.793-0.34 1.28-0.34 0.707 0 1.257 0.163 1.65 0.49 0.387 0.32 0.613 0.803 0.68 1.45h-1.32c-0.047-0.32-0.147-0.547-0.3-0.68-0.16-0.133-0.383-0.2-0.67-0.2-0.34 0-0.603 0.143-0.79 0.43-0.193 0.293-0.29 0.71-0.29 1.25v0.35c0 0.567 0.097 0.993 0.29 1.28 0.193 0.28 0.5 0.42 0.92 0.42 0.353 0 0.617-0.077 0.79-0.23v-0.89h-0.95v-0.94h2.33zm4.733-6.991L18.481 6.96l1.463 1.464-2.065 2.066 0.975 0.975L20.921 9.4l1.463 1.464-0.005-3.898z"/>
|
||||
</vector>
|
||||
@@ -1,3 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:fillColor="#FFFFFFFF" android:pathData="M5.45 15.487c0-0.2-0.07-0.357-0.21-0.47-0.14-0.113-0.39-0.23-0.75-0.35-0.353-0.12-0.643-0.237-0.87-0.35-0.74-0.36-1.11-0.857-1.11-1.49 0-0.313 0.093-0.59 0.28-0.83 0.18-0.24 0.44-0.427 0.78-0.56 0.333-0.14 0.71-0.21 1.13-0.21 0.407 0 0.773 0.073 1.1 0.22 0.327 0.147 0.577 0.357 0.75 0.63 0.18 0.267 0.27 0.573 0.27 0.92H5.46c0-0.233-0.073-0.413-0.22-0.54-0.14-0.127-0.33-0.19-0.57-0.19-0.247 0-0.44 0.053-0.58 0.16-0.14 0.107-0.21 0.243-0.21 0.41 0 0.147 0.077 0.28 0.23 0.4 0.153 0.12 0.427 0.243 0.82 0.37 0.393 0.127 0.717 0.263 0.97 0.41 0.613 0.353 0.92 0.84 0.92 1.46 0 0.5-0.187 0.89-0.56 1.17-0.373 0.287-0.887 0.43-1.54 0.43-0.46 0-0.877-0.083-1.25-0.25-0.373-0.167-0.657-0.393-0.85-0.68-0.187-0.287-0.28-0.617-0.28-0.99h1.38c0 0.3 0.077 0.523 0.23 0.67 0.16 0.147 0.417 0.22 0.77 0.22 0.227 0 0.407-0.05 0.54-0.15 0.127-0.1 0.19-0.237 0.19-0.41zm3.158-4.18l1.13 4.14 1.13-4.14h1.53l-1.91 5.69h-1.5l-1.9-5.69h1.52zm8.814 2.65v2.34c-0.213 0.233-0.523 0.42-0.93 0.56-0.407 0.147-0.853 0.22-1.34 0.22-0.74 0-1.333-0.23-1.78-0.69-0.447-0.453-0.687-1.087-0.72-1.9v-0.49c0-0.56 0.1-1.05 0.3-1.47 0.193-0.413 0.477-0.733 0.85-0.96 0.367-0.227 0.793-0.34 1.28-0.34 0.707 0 1.257 0.163 1.65 0.49 0.387 0.32 0.613 0.803 0.68 1.45h-1.32c-0.047-0.32-0.147-0.547-0.3-0.68-0.16-0.133-0.383-0.2-0.67-0.2-0.34 0-0.603 0.143-0.79 0.43-0.193 0.293-0.29 0.71-0.29 1.25v0.35c0 0.567 0.097 0.993 0.29 1.28 0.193 0.28 0.5 0.42 0.92 0.42 0.353 0 0.617-0.077 0.79-0.23v-0.89h-0.95v-0.94h2.33zm4.164-7.051L17.69 6.9l1.463 1.464-2.065 2.066 0.975 0.975 2.065-2.066 1.464 1.464-0.005-3.898z"/>
|
||||
</vector>
|
||||
@@ -1,3 +0,0 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#b6d46f"/>
|
||||
</shape>
|
||||
@@ -4,6 +4,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/view_barcode"/>
|
||||
<de.markusfisch.android.binaryeye.widget.DetectorView
|
||||
android:id="@+id/detector_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
||||
@@ -13,4 +13,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/url_hint"
|
||||
android:importantForAutofill="no"/>
|
||||
<Button
|
||||
android:id="@+id/test_url"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/test_url"/>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -23,6 +23,18 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"/>
|
||||
<TextView
|
||||
android:id="@+id/error_correction_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/error_correction_level"/>
|
||||
<Spinner
|
||||
android:id="@+id/error_correction_level"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:entries="@array/error_correction_levels"/>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:material="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/export_svg"
|
||||
android:title="@string/export_svg"
|
||||
android:icon="@drawable/ic_action_save_svg"
|
||||
android:id="@+id/copy_to_clipboard"
|
||||
android:title="@string/copy_to_clipboard"
|
||||
android:icon="@drawable/ic_action_copy"
|
||||
material:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/export_png"
|
||||
android:title="@string/export_png"
|
||||
android:icon="@drawable/ic_action_save_png"
|
||||
android:id="@+id/export_to_file"
|
||||
android:title="@string/export_to_file"
|
||||
android:icon="@drawable/ic_action_save"
|
||||
material:showAsAction="ifRoom"/>
|
||||
</menu>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<background android:drawable="@color/accent"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
<item quantity="other">%2$d Zeichen, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Fehlerkorrektur-Level</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% wiederherstellbar)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% wiederherstellbar)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% wiederherstellbar)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% wiederherstellbar)</string>
|
||||
<string name="issue_number">Ausgabe Nummer</string>
|
||||
<string name="orientation">Orientierung</string>
|
||||
<string name="other_meta_data">Metadaten</string>
|
||||
@@ -20,6 +24,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN Erweiterung</string>
|
||||
<string name="toggle_flash">Licht an/ausschalten</string>
|
||||
<string name="share">Teilen</string>
|
||||
<string name="share_as">Teilen als?</string>
|
||||
<string name="copy_to_clipboard">In die Zwischenablage kopieren</string>
|
||||
<string name="copied_to_clipboard">Inhalt wurde in die Zwischenablage kopiert</string>
|
||||
<string name="copy_password">Passwort in die Zwischenablage kopieren</string>
|
||||
@@ -42,6 +47,9 @@
|
||||
<string name="preferences">Einstellungen</string>
|
||||
<string name="scan_category">Scannen</string>
|
||||
<string name="content_category">Inhalt</string>
|
||||
<string name="locale_category">Sprache</string>
|
||||
<string name="custom_locale">Abweichendes Gebietsschema</string>
|
||||
<string name="follow_system_settings">Systemeinstellung übernehmen</string>
|
||||
<string name="show_crop_handle">Ausschnitt verkleinern anzeigen</string>
|
||||
<string name="show_crop_handle_summary">Scannen auf einen anpassbaren Bereich einschränken.</string>
|
||||
<string name="zoom_by_swiping">Geste für Kamerazoom</string>
|
||||
@@ -64,6 +72,8 @@
|
||||
<string name="show_meta_data_summary">Zusätzliche Daten über den eingelesenen Barcode anzeigen.</string>
|
||||
<string name="show_hex_dump">Hex Dump anzeigen</string>
|
||||
<string name="show_hex_dump_summary">Zeigt einen Hexdump des eingelesenen Inhalts an.</string>
|
||||
<string name="close_automatically">Automatisch zurückkehren</string>
|
||||
<string name="close_automatically_summary">Nach dem Kopieren/Teilen automatisch zum Scanbildschirm zurückkehren.</string>
|
||||
<string name="open_with_url">URL zum Öffnen unbekannter Daten</string>
|
||||
<string name="send_category">Weiterleitung</string>
|
||||
<string name="send_scan_url">URL die für jeden Scan aufgerufen werden soll</string>
|
||||
@@ -72,6 +82,7 @@
|
||||
<string name="send_type_get_query_string">GET mit vollständigem Query-String</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Code wirklich entfernen?</string>
|
||||
<string name="really_remove_all_scans">Alle Codes entfernen?</string>
|
||||
<string name="really_remove_selected_scans">Alle ausgewählten Codes entfernen?</string>
|
||||
@@ -106,13 +117,11 @@
|
||||
<string name="search_web">Suche im Internet</string>
|
||||
<string name="search_scan">Code suchen</string>
|
||||
<string name="export_to_file">In Datei exportieren</string>
|
||||
<string name="export_png">Als PNG exportieren</string>
|
||||
<string name="export_svg">Als SVG exportieren</string>
|
||||
<string name="export_as">Exportieren als?</string>
|
||||
<string name="export_csv_comma">CSV mit Kommas</string>
|
||||
<string name="export_csv_semicolon">CSV mit Semikolons</string>
|
||||
<string name="export_json">Als JSON exportieren</string>
|
||||
<string name="export_database">SQLite Datenbank exportieren</string>
|
||||
<string name="export_csv_comma">CSV Datei mit Kommas</string>
|
||||
<string name="export_csv_semicolon">CSV Datei mit Semikolons</string>
|
||||
<string name="export_json">JSON Datei</string>
|
||||
<string name="export_database">SQLite Datenbank</string>
|
||||
<string name="saved_in_downloads">In den Downloads gespeichert</string>
|
||||
<string name="rotate_image_cw">Bild im Uhrzeigersinn rotieren</string>
|
||||
<string name="pick_file">Bilddatei auswählen</string>
|
||||
@@ -120,5 +129,5 @@
|
||||
<string name="shortcut_decode">Barcode lesen</string>
|
||||
<string name="shortcut_encode">Barcode erstellen</string>
|
||||
<string name="shortcut_preferences">Einstellungen</string>
|
||||
<string name="background_request_failed">Background request failed</string>
|
||||
<string name="background_request_failed">Hintergrundanfrage fehlgeschlagen</string>
|
||||
</resources>
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
<item quantity="other">%2$d caracteres, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Nivel de corrección de errores</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Número de emisión</string>
|
||||
<string name="orientation">Orientación</string>
|
||||
<string name="other_meta_data">Metadatos</string>
|
||||
@@ -20,6 +24,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">Activar la linterna</string>
|
||||
<string name="share">Compartir</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Copiar al portapapeles</string>
|
||||
<string name="copied_to_clipboard">Copiado al portapapeles</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
@@ -42,6 +47,9 @@
|
||||
<string name="preferences">Configuración</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Aumento de cámara al deslizar hacia arriba/abajo</string>
|
||||
@@ -64,6 +72,8 @@
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Mostrar volcado hexagonal</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Abrir datos desconocidos con URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
@@ -72,6 +82,7 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">¿Realmente desea borrar el escaneo seleccionado?</string>
|
||||
<string name="really_remove_all_scans">¿Realmente desea borrar todo lo escaneado?</string>
|
||||
<string name="really_remove_selected_scans">¿Realmente desea borrar los escaneos seleccionados?</string>
|
||||
@@ -106,8 +117,6 @@
|
||||
<string name="search_web">Buscar en la web</string>
|
||||
<string name="search_scan">Buscar escaneos</string>
|
||||
<string name="export_to_file">Exportar a archivo</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">¿Dónde desea exportar?</string>
|
||||
<string name="export_csv_comma">CSV con comas</string>
|
||||
<string name="export_csv_semicolon">CSV con punto y coma</string>
|
||||
|
||||
@@ -7,118 +7,128 @@
|
||||
<string name="content">Contenu</string>
|
||||
<string name="binary_data">(binary data)</string>
|
||||
<plurals name="barcode_info">
|
||||
<item quantity="one">%2$d characters, %1$s</item>
|
||||
<item quantity="other">%2$d characters, %1$s</item>
|
||||
<item quantity="one">%2$d caractère, %1$s</item>
|
||||
<item quantity="other">%2$d caractères, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="error_correction_level">Niveau de correction d\'erreur</string>
|
||||
<string name="error_correction_level_l" formatted="false">Faible (~7% de correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Moyen (~15% de correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% de correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Élevé (~30% de correction)</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
<string name="pdf417_extra_metadata">PDF417 metadata</string>
|
||||
<string name="possible_country">Possible country of manufacture</string>
|
||||
<string name="suggested_price">Suggested price</string>
|
||||
<string name="other_meta_data">Métadonnées</string>
|
||||
<string name="pdf417_extra_metadata">PDF417 métadonnées</string>
|
||||
<string name="possible_country">Pays de fabrication possible</string>
|
||||
<string name="suggested_price">Prix suggéré</string>
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">Toggle flash</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="copy_to_clipboard">Copier dans le presse-papier</string>
|
||||
<string name="copied_to_clipboard">Mis dans le presse-papiers</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
<string name="copied_password_to_clipboard">Password copied to clipboard</string>
|
||||
<string name="share">Partager</string>
|
||||
<string name="share_as">Partager comme ?</string>
|
||||
<string name="copy_to_clipboard">Copier dans le presse-papiers</string>
|
||||
<string name="copied_to_clipboard">Copié dans le presse-papiers</string>
|
||||
<string name="copy_password">Copier le mot de passe dans le presse-papiers</string>
|
||||
<string name="copied_password_to_clipboard">Mot de passe copié dans le presse-papiers</string>
|
||||
<string name="open_url">Ouvrir l\'url</string>
|
||||
<string name="cannot_resolve_action">Aucune application ne peut ouvrir ça</string>
|
||||
<string name="pick_search_engine">Pick a search engine</string>
|
||||
<string name="cannot_resolve_action">Aucune application ne peut ouvrir cela</string>
|
||||
<string name="pick_search_engine">Choisir un moteur de recherche</string>
|
||||
<string name="format">Format</string>
|
||||
<string name="size">Taille en pixels</string>
|
||||
<string name="width_by_height">%1$d×%2$d</string>
|
||||
<string name="input_content_here">Entrez votre contenu ici</string>
|
||||
<string name="input_content_here">Votre contenu ici</string>
|
||||
<string name="encode">ENCODER</string>
|
||||
<string name="error_no_content">Contenu manquant</string>
|
||||
<string name="error_encoding_barcode">Barcode cannot be generated</string>
|
||||
<string name="error_encoding_barcode">Le code-barres ne peut pas être généré</string>
|
||||
<string name="view_barcode">Voir le code barre</string>
|
||||
<string name="info">Info</string>
|
||||
<string name="switch_camera">Changer de camera</string>
|
||||
<string name="bulk_mode">Scan continuously</string>
|
||||
<string name="bulk_mode">Scan continu</string>
|
||||
<string name="history">Historique</string>
|
||||
<string name="preferences">Preferences</string>
|
||||
<string name="preferences">Préférences</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Zoom camera by swiping up/down</string>
|
||||
<string name="zoom_by_swiping_summary">Swipe up or down in camera screen to control the camera zoom.</string>
|
||||
<string name="auto_rotate">Recognize 1D barcodes vertically</string>
|
||||
<string name="auto_rotate_summary">Automatically rotate the camera frame to recognize vertical 1D barcodes. Depending on the device, this may affect performance.</string>
|
||||
<string name="try_harder">Optimize reader for accuracy, not speed</string>
|
||||
<string name="try_harder_summary">Enable this option for very hard to read codes. Will affect performance.</string>
|
||||
<string name="vibrate">Vibrate on detection</string>
|
||||
<string name="vibrate_summary">Enable this if you want your device to vibrate when a code is recognized.</string>
|
||||
<string name="content_category">Contenu</string>
|
||||
<string name="locale_category">Langue</string>
|
||||
<string name="custom_locale">Local personnalisé</string>
|
||||
<string name="follow_system_settings">Suivre les réglages du système</string>
|
||||
<string name="show_crop_handle">Afficher le limiter de capture</string>
|
||||
<string name="show_crop_handle_summary">Restreindre le scan à une région personnalisée.</string>
|
||||
<string name="zoom_by_swiping">Balayage haut/bas pour zoomer</string>
|
||||
<string name="zoom_by_swiping_summary">Balayez vers le haut ou vers le bas dans l’écran de la caméra pour contrôler le zoom de la caméra.</string>
|
||||
<string name="auto_rotate">Reconnaître les codes-barres 1D verticaux</string>
|
||||
<string name="auto_rotate_summary">Tourner automatiquement le cadre de la caméra pour reconnaître les codes-barres 1D verticaux. En fonction de l\'appareil, cela peut affecter les performances.</string>
|
||||
<string name="try_harder">Optimiser la précision du lecteur</string>
|
||||
<string name="try_harder_summary">Activez cette option pour les codes très difficiles à lire. Affectera les performances.</string>
|
||||
<string name="vibrate">Vibrer à la détection</string>
|
||||
<string name="vibrate_summary">Activez ceci si vous voulez que votre appareil vibre lorsqu’un code est reconnu.</string>
|
||||
<string name="use_history">Sauvegarder l\'histoire des scans</string>
|
||||
<string name="use_history_summary">Save recognized codes on your device.</string>
|
||||
<string name="ignore_consecutive_duplicates">Do not save consecutive duplicates</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Do not save consecutive duplicates in the scan history.</string>
|
||||
<string name="open_immediately">Skip inspection and open contents immediately</string>
|
||||
<string name="open_immediately_summary">Skip inspection and open contents immediately. May open harmful content if enabled.</string>
|
||||
<string name="copy_immediately">Automatically copy contents into clipboard</string>
|
||||
<string name="copy_immediately_summary">Automatically copy scanned contents into clipboard. Please note that other apps may snoop on your clipboard in the background.</string>
|
||||
<string name="show_meta_data">Show metadata</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="use_history_summary">Sauvegarder les codes reconnus sur votre appareil.</string>
|
||||
<string name="ignore_consecutive_duplicates">Ignorer les doublons</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Ne pas sauvegarder les doublons dans l\'historique des scans.</string>
|
||||
<string name="open_immediately">Ouvrir immédiatement</string>
|
||||
<string name="open_immediately_summary">Sauter l\'inspection et ouvrir le contenu immédiatement. Si activé, cela peut ouvrir un contenu nocif.</string>
|
||||
<string name="copy_immediately">Mettre dans le presse-papiers</string>
|
||||
<string name="copy_immediately_summary">Copier automatiquement les contenus scannés dans le presse-papiers. Veuillez noter que les autres applications peuvent fouiner dans votre presse-papiers en arrière-plan.</string>
|
||||
<string name="show_meta_data">Afficher les méta-données</string>
|
||||
<string name="show_meta_data_summary">Afficher les données supplémentaires sur le code-barres scanné.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="open_with_url">Open unknown data with URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
<string name="send_scan_type">Type of request for every scan</string>
|
||||
<string name="send_type_get_add_content">GET and simply add content</string>
|
||||
<string name="send_type_get_query_string">GET with compelete query string</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Ouvrir des données inconnues avec l’URL</string>
|
||||
<string name="send_category">Transfert</string>
|
||||
<string name="send_scan_url">Envoyer chaque scan avec l\'URL</string>
|
||||
<string name="send_scan_type">Type de requête pour chaque scan</string>
|
||||
<string name="send_type_get_add_content">GET et ajouter simplement le contenu</string>
|
||||
<string name="send_type_get_query_string">GET avec chaîne de requête complète</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="really_remove_scan">Supprimer le scan?</string>
|
||||
<string name="really_remove_all_scans">Supprimer tous les scans?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
<string name="clear_history">Clear history</string>
|
||||
<string name="copy_scan">Copy scan</string>
|
||||
<string name="edit_scan">Edit label</string>
|
||||
<string name="remove_scan">Remove scan</string>
|
||||
<string name="enter_name">Enter a name to describe the scan</string>
|
||||
<string name="enter_name_hint">Name of the scan</string>
|
||||
<string name="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Supprimer le scan ?</string>
|
||||
<string name="really_remove_all_scans">Supprimer tous les scans ?</string>
|
||||
<string name="really_remove_selected_scans">Supprimer les scans sélectionnés ?</string>
|
||||
<string name="clear_history">Effacer l\'historique</string>
|
||||
<string name="copy_scan">Copier scan</string>
|
||||
<string name="edit_scan">Editer l\'étiquette</string>
|
||||
<string name="remove_scan">Supprimer le scan</string>
|
||||
<string name="enter_name">Saisir un nom décrivant le scan</string>
|
||||
<string name="enter_name_hint">Nom du scan</string>
|
||||
<string name="no_barcode_found">Aucun code-barres trouvé</string>
|
||||
<string name="pick_list_separator">How to separate list items?</string>
|
||||
<string name="separator_line_break">Line break</string>
|
||||
<string name="separator_ruler">Ruler</string>
|
||||
<string name="save_as_file_name">Save in Downloads as file?</string>
|
||||
<string name="file_name">File name</string>
|
||||
<string name="error_saving_file">Cannot save file</string>
|
||||
<string name="error_file_exists">File already exists</string>
|
||||
<string name="connect_to_wifi">Connect to WiFi</string>
|
||||
<string name="wifi_config_failed">Could not configure WiFi</string>
|
||||
<string name="wifi_added">WiFi added</string>
|
||||
<string name="sms_send">Send SMS</string>
|
||||
<string name="sms_error">Could not send SMS</string>
|
||||
<string name="tel_dial">Dial number</string>
|
||||
<string name="tel_error">Could not dial number</string>
|
||||
<string name="mail_send">Send mail</string>
|
||||
<string name="mail_error">Could not send mail</string>
|
||||
<string name="vcard_add">Add to contacts</string>
|
||||
<string name="vcard_failed">Could not add to contacts</string>
|
||||
<string name="vevent_add">Add to calendar</string>
|
||||
<string name="vevent_failed">Could not add to calendar</string>
|
||||
<string name="otpauth_add">Add 2FA</string>
|
||||
<string name="search_web">Search the web</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">Export to file</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="saved_in_downloads">Saved in downloads</string>
|
||||
<string name="rotate_image_cw">Rotate image clockwise</string>
|
||||
<string name="pick_file">Pick image file</string>
|
||||
<string name="pick_code_to_scan">Pick code to scan</string>
|
||||
<string name="shortcut_decode">Scan a barcode</string>
|
||||
<string name="shortcut_encode">Create a barcode</string>
|
||||
<string name="shortcut_preferences">Settings</string>
|
||||
<string name="background_request_failed">Background request failed</string>
|
||||
<string name="pick_list_separator">Comment séparer les éléments listés ?</string>
|
||||
<string name="separator_line_break">Saut de ligne</string>
|
||||
<string name="separator_ruler">Règle</string>
|
||||
<string name="save_as_file_name">Sauvegarder dans les Téléchargements ?</string>
|
||||
<string name="file_name">Nom du fichier</string>
|
||||
<string name="error_saving_file">Impossible de sauvegarder le fichier</string>
|
||||
<string name="error_file_exists">Fichier déjà existant</string>
|
||||
<string name="connect_to_wifi">Connecter au WiFi</string>
|
||||
<string name="wifi_config_failed">Impossible de configurer le WiFi</string>
|
||||
<string name="wifi_added">WiFi ajouté</string>
|
||||
<string name="sms_send">Envoyer SMS</string>
|
||||
<string name="sms_error">Ne pas envoyer de SMS</string>
|
||||
<string name="tel_dial">Numéro de téléphone</string>
|
||||
<string name="tel_error">Impossible de composer le numéro</string>
|
||||
<string name="mail_send">Envoyer le mail</string>
|
||||
<string name="mail_error">Impossible d\'envoyer le mail</string>
|
||||
<string name="vcard_add">Ajouter aux contacts</string>
|
||||
<string name="vcard_failed">Impossible d\'ajouter aux contacts</string>
|
||||
<string name="vevent_add">Ajouter à l\'agenda</string>
|
||||
<string name="vevent_failed">Impossible d\'ajouter à l\'agenda</string>
|
||||
<string name="otpauth_add">Ajouter 2FA</string>
|
||||
<string name="search_web">Rechercher sur internet</string>
|
||||
<string name="search_scan">Rechercher un scan</string>
|
||||
<string name="export_to_file">Exporter comme fichier</string>
|
||||
<string name="export_as">Exporter comme ?</string>
|
||||
<string name="export_csv_comma">CSV avec virgules</string>
|
||||
<string name="export_csv_semicolon">CSV avec points-virgules</string>
|
||||
<string name="export_json">Exporter comme JSON</string>
|
||||
<string name="export_database">Exporter la base de données SQLite</string>
|
||||
<string name="saved_in_downloads">Sauvegardé dans les Téléchargements</string>
|
||||
<string name="rotate_image_cw">Tourner l\'image dans le sens horaire</string>
|
||||
<string name="pick_file">Choisir un fichier image</string>
|
||||
<string name="pick_code_to_scan">Choisissez le code à scanner</string>
|
||||
<string name="shortcut_decode">Scanner un code-barres</string>
|
||||
<string name="shortcut_encode">Créer un code-barres</string>
|
||||
<string name="shortcut_preferences">Réglages</string>
|
||||
<string name="background_request_failed">Échec de la requête d\'arrière-plan</string>
|
||||
</resources>
|
||||
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
<item quantity="other">%2$d karakter, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
@@ -20,6 +24,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">Vaku be- vagy kikapcsolása</string>
|
||||
<string name="share">Megosztás</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Másolás a vágólapra</string>
|
||||
<string name="copied_to_clipboard">Vágólapra helyezés</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
@@ -42,6 +47,9 @@
|
||||
<string name="preferences">Beállítások</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Zoom camera by swiping up/down</string>
|
||||
@@ -64,6 +72,8 @@
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Ismeretlen adat megnyitása URL-lel</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
@@ -72,6 +82,7 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Valóban eltávolítja a beolvasást?</string>
|
||||
<string name="really_remove_all_scans">Valóban eltávolítja az összes beolvasását?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
@@ -106,13 +117,11 @@
|
||||
<string name="search_web">Keresés a weben</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">Exportálás fájlba</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="export_csv_comma">CSV file with commas</string>
|
||||
<string name="export_csv_semicolon">CSV file with semicolons</string>
|
||||
<string name="export_json">JSON file</string>
|
||||
<string name="export_database">SQLite database</string>
|
||||
<string name="saved_in_downloads">Elmentve a letöltésekbe</string>
|
||||
<string name="rotate_image_cw">Kép forgatása jobbra</string>
|
||||
<string name="pick_file">Képfájl kiválasztása</string>
|
||||
|
||||
@@ -10,19 +10,24 @@
|
||||
<item quantity="other">%1$s, %2$d karakter</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Level koreksi kesalahan</string>
|
||||
<string name="issue_number">Nomor pemindaian</string>
|
||||
<string name="error_correction_level_l" formatted="false">Rendah (~7% koreksi)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% koreksi)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Kuartil (~25% koreksi)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Tinggi (~30% koreksi)</string>
|
||||
<string name="issue_number">Nomor pindaian</string>
|
||||
<string name="orientation">Orientasi</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
<string name="pdf417_extra_metadata">Metadata PDF417</string>
|
||||
<string name="possible_country">Kemungkinan negara pembuat</string>
|
||||
<string name="suggested_price">Harga yang disarankan</string>
|
||||
<string name="upc_ean_extension">Ekstensi UPC EAN</string>
|
||||
<string name="toggle_flash">Nyala/Matikan blitz</string>
|
||||
<string name="toggle_flash">Nyala/matikan blitz</string>
|
||||
<string name="share">Bagikan</string>
|
||||
<string name="copy_to_clipboard">Salin ke papan klip</string>
|
||||
<string name="copied_to_clipboard">Simpan ke papan klip</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
<string name="copied_password_to_clipboard">Sandi disalin ke papan klip</string>
|
||||
<string name="share_as">Bagikan sebagai?</string>
|
||||
<string name="copy_to_clipboard">Salin ke clipboard</string>
|
||||
<string name="copied_to_clipboard">Disalin ke clipboard</string>
|
||||
<string name="copy_password">Salin sandi ke clipboard</string>
|
||||
<string name="copied_password_to_clipboard">Sandi disalin ke clipboard</string>
|
||||
<string name="open_url">Buka url</string>
|
||||
<string name="cannot_resolve_action">Tidak ada aplikasi yang bisa membukanya</string>
|
||||
<string name="pick_search_engine">Pilih mesin pencari</string>
|
||||
@@ -39,52 +44,58 @@
|
||||
<string name="bulk_mode">Pindai tanpa henti</string>
|
||||
<string name="history">Riwayat</string>
|
||||
<string name="preferences">Preferensi</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="scan_category">Pemindaian</string>
|
||||
<string name="content_category">Konten</string>
|
||||
<string name="locale_category">Bahasa</string>
|
||||
<string name="custom_locale">Bahasa lainnya</string>
|
||||
<string name="follow_system_settings">Ikuti pengaturan sistem</string>
|
||||
<string name="show_crop_handle">Tampilkan pembatas pemotongan</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Perbesar kamera dengan menggeser ke atas/bawah</string>
|
||||
<string name="zoom_by_swiping_summary">Swipe up or down in camera screen to control the camera zoom.</string>
|
||||
<string name="auto_rotate">Kenali barcode 1D secara vertikal</string>
|
||||
<string name="auto_rotate_summary">Automatically rotate the camera frame to recognize vertical 1D barcodes. Depending on the device, this may affect performance.</string>
|
||||
<string name="try_harder">Optimalkan akurasi, bukan kecepatan</string>
|
||||
<string name="try_harder_summary">Enable this option for very hard to read codes. Will affect performance.</string>
|
||||
<string name="show_crop_handle_summary">Batasi pemindaian ke batas area tertentu.</string>
|
||||
<string name="zoom_by_swiping">Geser ke atas/bawah untuk memperbesar</string>
|
||||
<string name="zoom_by_swiping_summary">Geser layar kamera ke atas atau ke bawah untuk mengontrol perbesaran gambar.</string>
|
||||
<string name="auto_rotate">Kenali barcode vertikal 1D</string>
|
||||
<string name="auto_rotate_summary">Otomatis putar frame kamera mengenali barcode vertikal 1D. Tergantung pada perangkat, mungkin akan berpengaruh pada performa.</string>
|
||||
<string name="try_harder">Optimalkan akurasi pembaca</string>
|
||||
<string name="try_harder_summary">Aktifkan opsi ini untuk kode yang susah dibaca. Akan berpengaruh pada performa.</string>
|
||||
<string name="vibrate">Bergetar saat mendeteksi</string>
|
||||
<string name="vibrate_summary">Enable this if you want your device to vibrate when a code is recognized.</string>
|
||||
<string name="vibrate_summary">Aktifkan opsi ini jika anda ingin perangkat anda bergetar ketika kode berhasil dipindai.</string>
|
||||
<string name="use_history">Simpan riwayat pemindaian</string>
|
||||
<string name="use_history_summary">Save recognized codes on your device.</string>
|
||||
<string name="ignore_consecutive_duplicates">Jangan simpan duplikat berturutan</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Do not save consecutive duplicates in the scan history.</string>
|
||||
<string name="open_immediately">Lewati inspeksi dan segera buka konten</string>
|
||||
<string name="open_immediately_summary">Skip inspection and open contents immediately. May open harmful content if enabled.</string>
|
||||
<string name="copy_immediately">Automatically copy contents into clipboard</string>
|
||||
<string name="copy_immediately_summary">Automatically copy scanned contents into clipboard. Please note that other apps may snoop on your clipboard in the background.</string>
|
||||
<string name="use_history_summary">Simpan kode yang berhasil dipindai pada perangkat anda.</string>
|
||||
<string name="ignore_consecutive_duplicates">Abaikan duplikat</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Jangan simpan duplikat yang berturutan di dalam riwayat pemindaian.</string>
|
||||
<string name="open_immediately">Buka segera</string>
|
||||
<string name="open_immediately_summary">Lewati inspeksi dan segera buka konten. Mungkin membuka konten berbahaya jika diaktifkan.</string>
|
||||
<string name="copy_immediately">Simpan ke dalam clipboard</string>
|
||||
<string name="copy_immediately_summary">Otomatis menyalin konten yang dipindai ke dalam clipboard. Harap diingat bahwa apl lain bisa melihat isi dari clipboard anda di latar belakang.</string>
|
||||
<string name="show_meta_data">Tampilkan metadata</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_meta_data_summary">Tampilkan data tambahan tentang barcode yang dipindai.</string>
|
||||
<string name="show_hex_dump">Tampilkan hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="show_hex_dump_summary">Tampilkan hex dump dari konten hasil pemindaian.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Buka data tak dikenal dengan URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
<string name="send_scan_type">Type of request for every scan</string>
|
||||
<string name="send_type_get_add_content">GET and simply add content</string>
|
||||
<string name="send_type_get_query_string">GET with compelete query string</string>
|
||||
<string name="send_category">Penerusan</string>
|
||||
<string name="send_scan_url">Kirim setiap pindaian ke URL</string>
|
||||
<string name="send_scan_type">Tipe permintaan untuk setiap pindaian</string>
|
||||
<string name="send_type_get_add_content">GET dan tambahkan konten</string>
|
||||
<string name="send_type_get_query_string">GET dengan kueri lema lengkap</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="really_remove_scan">Yakin menghapus pemindaian?</string>
|
||||
<string name="really_remove_all_scans">Yakin menghapus semua pemindaian?</string>
|
||||
<string name="really_remove_selected_scans">Yakin menghapus semua pemindaian?</string>
|
||||
<string name="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Yakin menghapus pindaian?</string>
|
||||
<string name="really_remove_all_scans">Yakin menghapus semua pindaian?</string>
|
||||
<string name="really_remove_selected_scans">Yakin menghapus pindaian yang dipilih?</string>
|
||||
<string name="clear_history">Hapus riwayat</string>
|
||||
<string name="copy_scan">Salin pemindaian</string>
|
||||
<string name="copy_scan">Salin pindaian</string>
|
||||
<string name="edit_scan">Sunting label</string>
|
||||
<string name="remove_scan">Buang pindaian</string>
|
||||
<string name="enter_name">Masukkan keterangan pemindaian</string>
|
||||
<string name="enter_name">Masukkan keterangan pindaian</string>
|
||||
<string name="enter_name_hint">Nama pindaian</string>
|
||||
<string name="no_barcode_found">Tidak ada barcode yang ditemukan</string>
|
||||
<string name="pick_list_separator">Pilih pemisah daftar item?</string>
|
||||
<string name="separator_line_break">Baris baru</string>
|
||||
<string name="separator_ruler">Penggaris</string>
|
||||
<string name="save_as_file_name">Simpan sebagai berkas?</string>
|
||||
<string name="save_as_file_name">Simpan sebagai berkas Unduhan?</string>
|
||||
<string name="file_name">Nama berkas</string>
|
||||
<string name="error_saving_file">Tidak bisa menyimpan berkas</string>
|
||||
<string name="error_file_exists">Berkas sudah ada</string>
|
||||
@@ -105,8 +116,6 @@
|
||||
<string name="search_web">Cari secara daring</string>
|
||||
<string name="search_scan">Cari pindaian</string>
|
||||
<string name="export_to_file">Ekspor ke berkas</string>
|
||||
<string name="export_png">Ekspor sebagai PNG</string>
|
||||
<string name="export_svg">Ekspor sebagai SVG</string>
|
||||
<string name="export_as">Ekspor sebagai?</string>
|
||||
<string name="export_csv_comma">CSV dengan koma</string>
|
||||
<string name="export_csv_semicolon">CSV dengan titik koma</string>
|
||||
@@ -119,5 +128,5 @@
|
||||
<string name="shortcut_decode">Pindai barcode</string>
|
||||
<string name="shortcut_encode">Buat barcode</string>
|
||||
<string name="shortcut_preferences">Pengaturan</string>
|
||||
<string name="background_request_failed">Background request failed</string>
|
||||
<string name="background_request_failed">Permintaan latar belakang gagal</string>
|
||||
</resources>
|
||||
|
||||
@@ -11,18 +11,23 @@
|
||||
<item quantity="other">%2$d caratteri, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Livello di correzione errori</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Numero di edizione</string>
|
||||
<string name="orientation">Orientamento</string>
|
||||
<string name="other_meta_data">Metadati</string>
|
||||
<string name="pdf417_extra_metadata">Metadati PDF417</string>
|
||||
<string name="possible_country">Probabile paese di fabbricazione</string>
|
||||
<string name="possible_country">Probabile Paese di fabbricazione</string>
|
||||
<string name="suggested_price">Prezzo consigliato</string>
|
||||
<string name="upc_ean_extension">Estensione UPC EAN</string>
|
||||
<string name="toggle_flash">Flash</string>
|
||||
<string name="share">Condividi</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Copia negli appunti</string>
|
||||
<string name="copied_to_clipboard">Metti negli appunti</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
<string name="copied_to_clipboard">Copiato negli appunti</string>
|
||||
<string name="copy_password">Copia password negli appunti</string>
|
||||
<string name="copied_password_to_clipboard">Password copiata negli appunti</string>
|
||||
<string name="open_url">Apri URL</string>
|
||||
<string name="cannot_resolve_action">Nessuna app può aprirlo</string>
|
||||
@@ -37,46 +42,52 @@
|
||||
<string name="view_barcode">Vedi codice a barre</string>
|
||||
<string name="info">Info</string>
|
||||
<string name="switch_camera">Cambia fotocamera</string>
|
||||
<string name="bulk_mode">Scan continuously</string>
|
||||
<string name="bulk_mode">Scansione continua</string>
|
||||
<string name="history">Cronologia</string>
|
||||
<string name="preferences">Preferenze</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="scan_category">Scansione</string>
|
||||
<string name="content_category">Contenuto</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Mostra riquadro di limite</string>
|
||||
<string name="show_crop_handle_summary">Limita la scansione ad una regione personalizzata.</string>
|
||||
<string name="zoom_by_swiping">Zoom fotocamera scorrendo su/giù</string>
|
||||
<string name="zoom_by_swiping_summary">Swipe up or down in camera screen to control the camera zoom.</string>
|
||||
<string name="auto_rotate">Recognize 1D barcodes vertically</string>
|
||||
<string name="auto_rotate_summary">Automatically rotate the camera frame to recognize vertical 1D barcodes. Depending on the device, this may affect performance.</string>
|
||||
<string name="zoom_by_swiping_summary">Scorri su o giù per controllare lo zoom della fotocamera.</string>
|
||||
<string name="auto_rotate">Riconosci i codici a barre 1D verticalmente</string>
|
||||
<string name="auto_rotate_summary">Ruota automaticamente la fotocamera per riconoscere i codici a barre 1D verticali. In base al dispositivo, potrebbe ridurre le prestazioni.</string>
|
||||
<string name="try_harder">Ottimizza il lettore per accuratezza, non velocità</string>
|
||||
<string name="try_harder_summary">Enable this option for very hard to read codes. Will affect performance.</string>
|
||||
<string name="try_harder_summary">Attiva questa opzione per codici molto difficili da leggere. Riduce le prestazioni.</string>
|
||||
<string name="vibrate">Vibra quando rilevato</string>
|
||||
<string name="vibrate_summary">Enable this if you want your device to vibrate when a code is recognized.</string>
|
||||
<string name="vibrate_summary">Attivalo se vuoi che il dispositivo vibri quando viene riconosciuto un codice.</string>
|
||||
<string name="use_history">Salva cronologia delle scansioni</string>
|
||||
<string name="use_history_summary">Save recognized codes on your device.</string>
|
||||
<string name="use_history_summary">Salva i codici riconosciuti sul dispositivo.</string>
|
||||
<string name="ignore_consecutive_duplicates">Non salvare doppi consecutivi</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Do not save consecutive duplicates in the scan history.</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Non salvare doppi consecutivi nella cronologia di scansione.</string>
|
||||
<string name="open_immediately">Salta l\'analisi e apri i contenuti direttamente</string>
|
||||
<string name="open_immediately_summary">Skip inspection and open contents immediately. May open harmful content if enabled.</string>
|
||||
<string name="copy_immediately">Automatically copy contents into clipboard</string>
|
||||
<string name="copy_immediately_summary">Automatically copy scanned contents into clipboard. Please note that other apps may snoop on your clipboard in the background.</string>
|
||||
<string name="open_immediately_summary">Salta l\'analisi e apri i contenuti direttamente. Se attivo potrebbe aprire contenuti dannosi.</string>
|
||||
<string name="copy_immediately">Copia negli appunti</string>
|
||||
<string name="copy_immediately_summary">Copia automaticamente i contenuti scansionati negli appunti. Nota che altre app potrebbero leggere gli appunti in secondo piano.</string>
|
||||
<string name="show_meta_data">Mostra metadati</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_meta_data_summary">Mostra dati aggiuntivi sul codice a barre scansionato.</string>
|
||||
<string name="show_hex_dump">Mostra dump esadecimale</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="show_hex_dump_summary">Mostra un dump esadecimale dei contenuti scansionati.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Apri dati sconosciuti con URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
<string name="send_scan_type">Type of request for every scan</string>
|
||||
<string name="send_type_get_add_content">GET and simply add content</string>
|
||||
<string name="send_type_get_query_string">GET with compelete query string</string>
|
||||
<string name="send_category">Inoltro</string>
|
||||
<string name="send_scan_url">Invia ogni scansione ad un URL</string>
|
||||
<string name="send_scan_type">Tipo di richiesta per ogni scansione</string>
|
||||
<string name="send_type_get_add_content">GET e aggiungi il contenuto</string>
|
||||
<string name="send_type_get_query_string">GET con stringa completa della richiesta</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Vuoi veramente rimuovere la scansione?</string>
|
||||
<string name="really_remove_all_scans">Vuoi veramente rimuovere tutte le scansioni?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
<string name="really_remove_selected_scans">Vuoi veramente rimuovere le scansioni selezionate?</string>
|
||||
<string name="clear_history">Pulisci cronologia</string>
|
||||
<string name="copy_scan">Copy scan</string>
|
||||
<string name="copy_scan">Copia scansione</string>
|
||||
<string name="edit_scan">Modifica etichetta</string>
|
||||
<string name="remove_scan">Rimuovi scansione</string>
|
||||
<string name="enter_name">Inserisci un nome per descrivere la scansione</string>
|
||||
@@ -106,12 +117,10 @@
|
||||
<string name="search_web">Cerca nel web</string>
|
||||
<string name="search_scan">Cerca scansione</string>
|
||||
<string name="export_to_file">Esporta su file</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Esportare come?</string>
|
||||
<string name="export_csv_comma">CSV con virgole</string>
|
||||
<string name="export_csv_semicolon">CSV con punti e virgola</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_json">Esporta come JSON</string>
|
||||
<string name="export_database">Esporta database SQLite</string>
|
||||
<string name="saved_in_downloads">Salvato nei download</string>
|
||||
<string name="rotate_image_cw">Ruota immagine in senso orario</string>
|
||||
@@ -120,5 +129,5 @@
|
||||
<string name="shortcut_decode">Scansiona un codice a barre</string>
|
||||
<string name="shortcut_encode">Crea un codice a barre</string>
|
||||
<string name="shortcut_preferences">Impostazioni</string>
|
||||
<string name="background_request_failed">Background request failed</string>
|
||||
<string name="background_request_failed">Richiesta in secondo piano fallita</string>
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
<resources>
|
||||
<string name="no_camera_no_fun">ამ აპლიკაციის გამოყენება შეუძლებელია კამერაზე ნებართვის მინიჭების გარეშე</string>
|
||||
<string name="camera_error">კამერაზე წვდომის მოპოვება ვერ ხერხდება, გთხოვთ, კიდევ სცადეთ</string>
|
||||
<string name="scan_code">შტრიხ-კოდის სკანირება</string>
|
||||
<string name="compose_barcode">შტრიხ-კოდის შექმნა</string>
|
||||
<string name="decode_barcode">შტრიხ-კოდის დეკოდირება</string>
|
||||
<string name="content">ტექსტი</string>
|
||||
<string name="binary_data">(ორობითი მონაცემები)</string>
|
||||
<plurals name="barcode_info">
|
||||
<item quantity="one">%2$d სიმბოლო, %1$s</item>
|
||||
<item quantity="few">%2$d სიმბოლო, %1$s</item>
|
||||
<item quantity="many">%2$d სიმბოლო, %1$s</item>
|
||||
<item quantity="other">%2$d სიმბოლო, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">შეცდომების კორექციის დონე</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">გამოშვების ნომერი</string>
|
||||
<string name="orientation">ორიენტაცია</string>
|
||||
<string name="other_meta_data">მეტამონაცემები</string>
|
||||
<string name="pdf417_extra_metadata">PDF417 მეტამონაცემები</string>
|
||||
<string name="possible_country">შესაძლო მწარმოებელი ქვეყანა</string>
|
||||
<string name="suggested_price">დაახლოებითი ფასი</string>
|
||||
<string name="upc_ean_extension">UPC EAN გაფართოება</string>
|
||||
<string name="toggle_flash">განათების ჩართვა</string>
|
||||
<string name="share">გაზიარება</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">გაცვლის ბუფერში კოპირება</string>
|
||||
<string name="copied_to_clipboard">კოპირებულია გაცვლის ბუფერში</string>
|
||||
<string name="copy_password">პაროლის გაცვლით ბუფერში კოპირება</string>
|
||||
<string name="copied_password_to_clipboard">პაროლი კოპირებულია გაცვლის ბუფერში</string>
|
||||
<string name="open_url">ბმულის გახსნა</string>
|
||||
<string name="cannot_resolve_action">ამ მოქმედებისთვის აპლიკაცია ნაპოვნი არაა</string>
|
||||
<string name="pick_search_engine">აირჩიეთ საძიებო სისტემა</string>
|
||||
<string name="format">ფორმატი</string>
|
||||
<string name="size">ზომა პიქსელებში</string>
|
||||
<string name="width_by_height">%1$d×%2$d</string>
|
||||
<string name="input_content_here">შეიყვანეთ ტექსტი აქ</string>
|
||||
<string name="encode">შექმნა"</string>
|
||||
<string name="error_no_content">მონაცემები არაა</string>
|
||||
<string name="error_encoding_barcode">შტრიხ-კოდის შექმნა შეუძლებელია</string>
|
||||
<string name="view_barcode">შტრიხ-კოდის ნახვა</string>
|
||||
<string name="info">ინფორმაცია</string>
|
||||
<string name="switch_camera">კამერის გადართვა</string>
|
||||
<string name="bulk_mode">სკანირება უწყვეტად</string>
|
||||
<string name="history">ისტორია</string>
|
||||
<string name="preferences">პარამეტრები</string>
|
||||
<string name="scan_category">სკანირება</string>
|
||||
<string name="content_category">კონტენტი</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">სკანირების არეალის ჩვენება</string>
|
||||
<string name="show_crop_handle_summary">სკანირების შეზღუდვა შერჩეული არეალით.</string>
|
||||
<string name="zoom_by_swiping">მასშტაბირება თითის მოძრაობით მაღლა/დაბლა</string>
|
||||
<string name="zoom_by_swiping_summary">გაატარეთ თითი მაღლა ან დაბლა კამერის მასშტაბირების სამართავად.</string>
|
||||
<string name="auto_rotate">1D ვერტიკალური შტრიხ-კოდების ამოცნობა</string>
|
||||
<string name="auto_rotate_summary">კამერის ავტომატური შეტრიალება ვერტიკალური 1D შტრიხ-კოდების ამოსაცნობად. მოწყობილობიდან გამომდინარე, შესაძლოა იმოქმედოს წარმადობაზე.</string>
|
||||
<string name="try_harder">წაკითხვის ოპტიმიზირება სიზუსტეზე და არა სისწრაფეზე</string>
|
||||
<string name="try_harder_summary">ეს პარამეტრი ჩართეთ იმ შტრიხ-კოდებისთვის, რომელთა ამოცნობაც ძალიან ძნელია. მოქმედებს წარმადობაზე.</string>
|
||||
<string name="vibrate">ვიბრირება პოვნისას</string>
|
||||
<string name="vibrate_summary">ჩართეთ ეს პარამეტრი, თუ გსურთ მოწყობილობის ვიბრირება,როდესაც შტრიხ-კოდი ამოცნობილი იქნება.</string>
|
||||
<string name="use_history">სკანირების ისტორიის შენახვა</string>
|
||||
<string name="use_history_summary">ამოცნობილი შტრიხ-კოდების მოწყობილობაზე შენახვა.</string>
|
||||
<string name="ignore_consecutive_duplicates">არ შევინახოთ შემდგომი ასლები</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">არ შევინახოთ შემდგომი ასლები სკანირების ისტორიაში.</string>
|
||||
<string name="open_immediately">შემოწმების გამოტოვება და მყისიერი გახსნა</string>
|
||||
<string name="open_immediately_summary">შემოწმების გამოტოვება და მყისიერი გახსნა. შესაძლოა გამოიწვიოს არასასარგებლო კონტენტის ჩვენება.</string>
|
||||
<string name="copy_immediately">გაცვლის ბუფერში ავტომატური კოპირება</string>
|
||||
<string name="copy_immediately_summary">სკანირებული შტრიხ-კოდის კონტენტის ავტომატური კოპირება გაცვლის ბუფერში. გთხოვთ გაითვალისწინოთ,ზოგიერთ პროგრამას შესაძლოა ჰქონდეს ფონური წვდომა გაცვლის ბუფერთან.</string>
|
||||
<string name="show_meta_data">მეტამონაცემების ჩვენება</string>
|
||||
<string name="show_meta_data_summary">სკანირებულ შტრიხ-კოდებზე დამატებითი ინფორმაციის ჩვენება.</string>
|
||||
<string name="show_hex_dump">თექვსმეტობითი dump-ის ჩვენება</string>
|
||||
<string name="show_hex_dump_summary">სკანირებული შტრიხ-კოდის კონტენტის თექვსმეტობითი dump-ის ჩვენება.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">უცნობი მონაცემების ამ ბმულის საშუალებით გახსნა</string>
|
||||
<string name="send_category">გადაგზავნა</string>
|
||||
<string name="send_scan_url">ყოველი სკანირებული შტრიხ-კოდის ბმულის საშუალებით გახსნა</string>
|
||||
<string name="send_scan_type">მოთხოვნის ტიპი ყოველი სკანირებული შტრიხ-კოდისთვის</string>
|
||||
<string name="send_type_get_add_content">GET კონტენტის დამატებით</string>
|
||||
<string name="send_type_get_query_string">GET მოთხოვნის სრული პარამეტრებით</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">ნამდვილად გსურთ სკანირების წაშლა?</string>
|
||||
<string name="really_remove_all_scans">ნამდვილად გსურთ ყველაფრის წაშლა?</string>
|
||||
<string name="really_remove_selected_scans">ნამდვილად გსურთ შერჩეული შტრიხ-კოდების წაშლა?</string>
|
||||
<string name="clear_history">ისტორიის გასუფთავება</string>
|
||||
<string name="copy_scan">კოპირება</string>
|
||||
<string name="edit_scan">რედაქტირება</string>
|
||||
<string name="remove_scan">სკანირების წაშლა</string>
|
||||
<string name="enter_name">მიანიჭეთ სახელი სკანირებას</string>
|
||||
<string name="enter_name_hint">სკანირების სახელი</string>
|
||||
<string name="no_barcode_found">შტრიხ-კოდი ვერ მოიძებნა</string>
|
||||
<string name="pick_list_separator">რითი გავყოთ სიის ელემენტები?</string>
|
||||
<string name="separator_line_break">ხაზის გამყოფი</string>
|
||||
<string name="separator_ruler">ჰორიზონტალური ხაზი</string>
|
||||
<string name="save_as_file_name">ფაილის შენახვა როგორც</string>
|
||||
<string name="file_name">ფაილის სახელი</string>
|
||||
<string name="error_saving_file">ფაილის შენახვა ვერ ხერხდება</string>
|
||||
<string name="error_file_exists">ფაილი უკვე არსებობს</string>
|
||||
<string name="connect_to_wifi">დაკავშირება WiFi-სთან</string>
|
||||
<string name="wifi_config_failed">WiFi კონფიგურაცია ვერ მოხერხდა</string>
|
||||
<string name="wifi_added">WiFi დამატებულია</string>
|
||||
<string name="sms_send">შეტყობინების გაგზავნა</string>
|
||||
<string name="sms_error">შეტყობინების გაგზავნა ვერ მოხერხდა</string>
|
||||
<string name="tel_dial">ნომრის აკრეფა</string>
|
||||
<string name="tel_error">ნომრის აკრეფა ვერ მოხერხდა</string>
|
||||
<string name="mail_send">წერილის გაგზავნა</string>
|
||||
<string name="mail_error">წერილი ვერ გაიგზავნა</string>
|
||||
<string name="vcard_add">კონტაქტებში დამატება</string>
|
||||
<string name="vcard_failed">კონტაქტებში დამატება ვერ მოხერხდა</string>
|
||||
<string name="vevent_add">კალენდარში დამატება</string>
|
||||
<string name="vevent_failed">კალენდარში დამატება ვერ მოხერხდა</string>
|
||||
<string name="otpauth_add">დავამატოთ 2FA</string>
|
||||
<string name="search_web">ქსელში მოძებნა</string>
|
||||
<string name="search_scan">სკანირების ძიება</string>
|
||||
<string name="export_to_file">ექსპორტი ფაილში</string>
|
||||
<string name="export_as">შესანახი ფაილის ფორმატი</string>
|
||||
<string name="export_csv_comma">CSV (გამყოფი - მძიმე)</string>
|
||||
<string name="export_csv_semicolon">CSV (გამყოფი - წერტილ-მძიმე,)</string>
|
||||
<string name="export_json">JSON</string>
|
||||
<string name="export_database">SQLite მონაცემთა ბაზა</string>
|
||||
<string name="saved_in_downloads">შენახულია გადმოწერებში</string>
|
||||
<string name="rotate_image_cw">გამოსახულების შემობრუნება საათის ისრის მიხედვით</string>
|
||||
<string name="pick_file">აირჩიეთ ფაილი გამოსახულებით</string>
|
||||
<string name="pick_code_to_scan">აირჩიეთ შტრიხ-კოდი სკანირებისთვის</string>
|
||||
<string name="shortcut_decode">შტრიხ-კოდის სკანირება</string>
|
||||
<string name="shortcut_encode">შტრიხ-კოდის შექმნა</string>
|
||||
<string name="shortcut_preferences">პარამეტრები</string>
|
||||
<string name="background_request_failed">ფონური მოთხოვნა ვერ მოხერხდა</string>
|
||||
</resources>
|
||||
@@ -11,6 +11,10 @@
|
||||
<item quantity="other">%2$d characters, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
@@ -20,6 +24,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">Flitslicht schakelen</string>
|
||||
<string name="share">Delen</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Kopiëren naar klembord</string>
|
||||
<string name="copied_to_clipboard">Kopieer de inhoud naar het klembord</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
@@ -42,6 +47,9 @@
|
||||
<string name="preferences">Voorkeuren</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Zoom camera by swiping up/down</string>
|
||||
@@ -64,6 +72,8 @@
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="really_remove_scan">Scan echt verwijderen?</string>
|
||||
<string name="really_remove_all_scans">Echt alle scans verwijderen?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
@@ -95,13 +105,11 @@
|
||||
<string name="search_web">Het net doorzoeken</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">Naar bestand exporteren</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="export_csv_comma">CSV file with commas</string>
|
||||
<string name="export_csv_semicolon">CSV file with semicolons</string>
|
||||
<string name="export_json">JSON file</string>
|
||||
<string name="export_database">SQLite database</string>
|
||||
<string name="error_saving_file">Kon bestand niet opslaan</string>
|
||||
<string name="open_with_url">Niet herkende data met URL openen</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
@@ -111,6 +119,7 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="pick_list_separator">Hoe de lijstonderdelen te separeren?</string>
|
||||
<string name="saved_in_downloads">In downloads opgeslagen</string>
|
||||
<string name="vevent_failed">Kon niet aan kalender toevoegen</string>
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
<string name="vevent_add">Dodaj do kalendarza</string>
|
||||
<string name="shortcut_preferences">Ustawienia</string>
|
||||
<string name="share">Udostępnij</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="error_saving_file">Nie można zapisać pliku</string>
|
||||
<string name="clear_history">Wyczyść historię</string>
|
||||
<string name="compose_barcode">Utwórz kod kreskowy</string>
|
||||
<string name="history">Historia</string>
|
||||
<string name="format">Format</string>
|
||||
<string name="export_to_file">Eksportuj do pliku</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="file_name">Nazwa pliku</string>
|
||||
<string name="export_json">Eksportuj jako JSON</string>
|
||||
<string name="pick_search_engine">Wybierz wyszukiwarkę</string>
|
||||
@@ -27,6 +26,10 @@
|
||||
<string name="separator_ruler">Linijka</string>
|
||||
<string name="scan_code">Skanuj kod</string>
|
||||
<string name="error_correction_level">Poziom korekcji błędów</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="export_csv_comma">CSV z przecinkami</string>
|
||||
<string name="export_csv_semicolon">CSV z średnikami</string>
|
||||
<string name="shortcut_encode">Stwórz kod kreskowy</string>
|
||||
@@ -54,6 +57,8 @@
|
||||
<string name="binary_data">(dane binarne)</string>
|
||||
<string name="show_hex_dump">Pokazuj zrzut szesnastkowy</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="show_meta_data">Pokazuj metadane</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="switch_camera">Przełącz aparat</string>
|
||||
@@ -93,6 +98,7 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
<string name="copied_password_to_clipboard">Hasło skopiowane do schowka</string>
|
||||
<string name="pdf417_extra_metadata">Metadane PDF417</string>
|
||||
@@ -100,6 +106,9 @@
|
||||
<string name="preferences">Ustawienia</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="decode_barcode">Dekoduj kod kreskowy</string>
|
||||
<string name="upc_ean_extension">Dodatek UPC EAN</string>
|
||||
<string name="possible_country">Możliwy kraj produkcji</string>
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
<item quantity="other">%2$d caracteres, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
@@ -20,6 +24,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">Ativar lanterna</string>
|
||||
<string name="share">Compartilhar</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Copiar para área de transferência</string>
|
||||
<string name="copied_to_clipboard">Colocar na área de transferência</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
@@ -42,6 +47,9 @@
|
||||
<string name="preferences">Preferências</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Zoom camera by swiping up/down</string>
|
||||
@@ -64,6 +72,8 @@
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Abrir dados desconhecidos com URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
@@ -72,6 +82,7 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Realmente deseja remover o escaneamento?</string>
|
||||
<string name="really_remove_all_scans">Realmente deseja remover todos escaneamentos?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
@@ -106,13 +117,11 @@
|
||||
<string name="search_web">Search the web</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">Export to file</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="export_csv_comma">CSV file with commas</string>
|
||||
<string name="export_csv_semicolon">CSV file with semicolons</string>
|
||||
<string name="export_json">JSON file</string>
|
||||
<string name="export_database">SQLite database</string>
|
||||
<string name="saved_in_downloads">Saved in downloads</string>
|
||||
<string name="rotate_image_cw">Rotate image clockwise</string>
|
||||
<string name="pick_file">Pick image file</string>
|
||||
|
||||
@@ -13,6 +13,10 @@
|
||||
<item quantity="other">%2$d символов, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Уровень коррекции ошибок</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Номер выпуская</string>
|
||||
<string name="orientation">Ориентация</string>
|
||||
<string name="other_meta_data">Метаданные</string>
|
||||
@@ -22,9 +26,10 @@
|
||||
<string name="upc_ean_extension">UPC EAN расширение</string>
|
||||
<string name="toggle_flash">Включить вспышку</string>
|
||||
<string name="share">Поделиться</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Скопировать в буфер обмена</string>
|
||||
<string name="copied_to_clipboard">Скопирован в буфер обмена</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
<string name="copy_password">Скопировать пароль в буфер обмена</string>
|
||||
<string name="copied_password_to_clipboard">Пароль скопирован в буфер обмена</string>
|
||||
<string name="open_url">Открыть URL</string>
|
||||
<string name="cannot_resolve_action">Не найдено приложение для этого действия</string>
|
||||
@@ -39,46 +44,52 @@
|
||||
<string name="view_barcode">Просмотр штрих-кода</string>
|
||||
<string name="info">Информация</string>
|
||||
<string name="switch_camera">Переключить камеру</string>
|
||||
<string name="bulk_mode">Scan continuously</string>
|
||||
<string name="bulk_mode">Сканировать непрерывно</string>
|
||||
<string name="history">История</string>
|
||||
<string name="preferences">Настройки</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="scan_category">Сканирование</string>
|
||||
<string name="content_category">Содержимое</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Показывать область сканирования</string>
|
||||
<string name="show_crop_handle_summary">Ограничить сканирование изменяемой областью.</string>
|
||||
<string name="zoom_by_swiping">Масштабировать движением пальцем вверх/вниз</string>
|
||||
<string name="zoom_by_swiping_summary">Swipe up or down in camera screen to control the camera zoom.</string>
|
||||
<string name="auto_rotate">Recognize 1D barcodes vertically</string>
|
||||
<string name="auto_rotate_summary">Automatically rotate the camera frame to recognize vertical 1D barcodes. Depending on the device, this may affect performance.</string>
|
||||
<string name="zoom_by_swiping_summary">Проведите пальцем вверх или вниз для управления масштабированием камеры.</string>
|
||||
<string name="auto_rotate">Распознавать 1D штрих-коды вертикально</string>
|
||||
<string name="auto_rotate_summary">Автоматически поварачивать камеру для распознавания вертикальных 1D штрих-кодов. В зависимости от устройства, это может повлиять на производительность.</string>
|
||||
<string name="try_harder">Оптимизировать считывание на точность, а не скорость</string>
|
||||
<string name="try_harder_summary">Enable this option for very hard to read codes. Will affect performance.</string>
|
||||
<string name="try_harder_summary">Включите эту настройку для штрих-кодов, которые очень сложно прочитать. Влияет на производительность.</string>
|
||||
<string name="vibrate">Вибрировать при обнаружении</string>
|
||||
<string name="vibrate_summary">Enable this if you want your device to vibrate when a code is recognized.</string>
|
||||
<string name="vibrate_summary">Включите эту настройку если хотите, чтобы устройство вибрировало, кода штрих-код распознан.</string>
|
||||
<string name="use_history">Сохранять историю сканирования</string>
|
||||
<string name="use_history_summary">Save recognized codes on your device.</string>
|
||||
<string name="use_history_summary">Сохранять распознанные штрих-коды на устройстве.</string>
|
||||
<string name="ignore_consecutive_duplicates">Не сохранять последовательные дубликаты</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Do not save consecutive duplicates in the scan history.</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Не сохранять последовательные дубликаты в истории сканирования.</string>
|
||||
<string name="open_immediately">Пропускать проверку и сразу открыть содержимое</string>
|
||||
<string name="open_immediately_summary">Skip inspection and open contents immediately. May open harmful content if enabled.</string>
|
||||
<string name="copy_immediately">Automatically copy contents into clipboard</string>
|
||||
<string name="copy_immediately_summary">Automatically copy scanned contents into clipboard. Please note that other apps may snoop on your clipboard in the background.</string>
|
||||
<string name="open_immediately_summary">Пропускать проверку и сразу открыть содержимое. Может привести к открытию небезопасного содержимого.</string>
|
||||
<string name="copy_immediately">Автоматически копировать содержимое в буфер обмена</string>
|
||||
<string name="copy_immediately_summary">Автоматически копировать содержимое отсканированного штрих-кода в буфер обмена. Имейте в виду, что другие приложения могут иметь доступ к буферу обмена в фоне.</string>
|
||||
<string name="show_meta_data">Показывать метаданные</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Показать шестнадцатеричный дамп</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="open_with_url">Открыть неизвестные данные с помощью URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
<string name="send_scan_type">Type of request for every scan</string>
|
||||
<string name="send_type_get_add_content">GET and simply add content</string>
|
||||
<string name="send_type_get_query_string">GET with compelete query string</string>
|
||||
<string name="show_meta_data_summary">Показывать дополнительную информацию об отсканированных штрих-кодах.</string>
|
||||
<string name="show_hex_dump">Показывать шестнадцатеричный дамп</string>
|
||||
<string name="show_hex_dump_summary">Показывать шестнадцатеричный дамп содержимого отсканированного штрих-кода.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Открывать неизвестные данные с помощью URL</string>
|
||||
<string name="send_category">Отправка</string>
|
||||
<string name="send_scan_url">Отправлять каждый отсканированный штрих-код на URL</string>
|
||||
<string name="send_scan_type">Тип запроса для каждого отсканированного штрих-кода</string>
|
||||
<string name="send_type_get_add_content">GET с добавлением содержимого</string>
|
||||
<string name="send_type_get_query_string">GET с полной строкой параметров запроса</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Действительно удалить сканирование?</string>
|
||||
<string name="really_remove_all_scans">Действительно удалить все сканирования?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
<string name="really_remove_selected_scans">Действительно удалить выбранные штрих-коды?</string>
|
||||
<string name="clear_history">Очистить историю</string>
|
||||
<string name="copy_scan">Copy scan</string>
|
||||
<string name="copy_scan">Копировать</string>
|
||||
<string name="edit_scan">Редактировать</string>
|
||||
<string name="remove_scan">Удалить сканирование</string>
|
||||
<string name="enter_name">Укажите название сканирования</string>
|
||||
@@ -108,12 +119,10 @@
|
||||
<string name="search_web">Искать в сети</string>
|
||||
<string name="search_scan">Поиск сканирования</string>
|
||||
<string name="export_to_file">Экспортировать в файл</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Формат экспортируемого файла</string>
|
||||
<string name="export_csv_comma">CSV (разделитель - запятая)</string>
|
||||
<string name="export_csv_semicolon">CSV (разделитель - точка с запятой)</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_json">JSON</string>
|
||||
<string name="export_database">SQLite база данных</string>
|
||||
<string name="saved_in_downloads">Сохранено в загрузках</string>
|
||||
<string name="rotate_image_cw">Повернуть изображение по часовой стрелке</string>
|
||||
@@ -122,5 +131,5 @@
|
||||
<string name="shortcut_decode">Сканировать штрих-код</string>
|
||||
<string name="shortcut_encode">Создать штрих-код</string>
|
||||
<string name="shortcut_preferences">Настройки</string>
|
||||
<string name="background_request_failed">Background request failed</string>
|
||||
<string name="background_request_failed">Фоновый запрос не удался</string>
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
<resources>
|
||||
<string name="no_camera_no_fun">Bu uygulama kamera izni olmadan anlamsızdır. Güle güle.</string>
|
||||
<string name="camera_error">Kameraya erişilemiyor, lütfen yeniden dene</string>
|
||||
<string name="scan_code">Kod tara</string>
|
||||
<string name="compose_barcode">Barkod yarat</string>
|
||||
<string name="decode_barcode">Barkod çöz</string>
|
||||
<string name="content">İçerik</string>
|
||||
<string name="binary_data">(ikili veri)</string>
|
||||
<plurals name="barcode_info">
|
||||
<item quantity="one">%2$d karakter, %1$s</item>
|
||||
<item quantity="other">%2$d karakter, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Hata düzeltme düzeyi</string>
|
||||
<string name="error_correction_level_l" formatted="false">Düşük (~%7 düzeltim)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Orta (~%15 düzeltim)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Dörtte Bir (~%25 düzeltim)</string>
|
||||
<string name="error_correction_level_h" formatted="false">Yüksek (~%30 düzeltim)</string>
|
||||
<string name="issue_number">Basım sayısı</string>
|
||||
<string name="orientation">Yönelim</string>
|
||||
<string name="other_meta_data">Üst veri</string>
|
||||
<string name="pdf417_extra_metadata">PDF417 üst verisi</string>
|
||||
<string name="possible_country">Olası üretim yeri</string>
|
||||
<string name="suggested_price">Önerilen fiyat</string>
|
||||
<string name="upc_ean_extension">UPC EAN eklentisi</string>
|
||||
<string name="toggle_flash">Flaşı aç</string>
|
||||
<string name="share">Paylaş</string>
|
||||
<string name="share_as">Şöyle paylaş:</string>
|
||||
<string name="copy_to_clipboard">Panoya kopyala</string>
|
||||
<string name="copied_to_clipboard">Panoya kopyalandı</string>
|
||||
<string name="copy_password">Parolayı panoya kopyala</string>
|
||||
<string name="copied_password_to_clipboard">Parola panoya kopyalandı</string>
|
||||
<string name="open_url">URL\'yi aç</string>
|
||||
<string name="cannot_resolve_action">Bunu açacak uygulama yok</string>
|
||||
<string name="pick_search_engine">Arama motoru seç</string>
|
||||
<string name="format">Biçim</string>
|
||||
<string name="size">Piksel türünde boyut</string>
|
||||
<string name="width_by_height">%1$d×%2$d</string>
|
||||
<string name="input_content_here">İçeriği buraya gir</string>
|
||||
<string name="encode">KODLA</string>
|
||||
<string name="error_no_content">İçerik eksik</string>
|
||||
<string name="error_encoding_barcode">Barkod yaratılamadı</string>
|
||||
<string name="view_barcode">Barkodu gör</string>
|
||||
<string name="info">Bilgi</string>
|
||||
<string name="switch_camera">Kamerayı değiştir</string>
|
||||
<string name="bulk_mode">Sürekli tara</string>
|
||||
<string name="history">Geçmiş</string>
|
||||
<string name="preferences">Tercihler</string>
|
||||
<string name="scan_category">Tarama</string>
|
||||
<string name="content_category">İçerik</string>
|
||||
<string name="locale_category">Dil</string>
|
||||
<string name="custom_locale">Özel yerel</string>
|
||||
<string name="follow_system_settings">Sistem ayarlarını izle</string>
|
||||
<string name="show_crop_handle">Kırpım kısıtlayıcıyı göster</string>
|
||||
<string name="show_crop_handle_summary">Taramayı özelleştirilebilir bölgeyle sınırla.</string>
|
||||
<string name="zoom_by_swiping">Aşağı/yukarı kaydırarak yakınlaştır</string>
|
||||
<string name="zoom_by_swiping_summary">Kamera yakınlığını denetlemek için kamera ekranında aşağı veya yukarı kaydır.</string>
|
||||
<string name="auto_rotate">Yatay 1B barkodları tanı</string>
|
||||
<string name="auto_rotate_summary">Yatay 1B barkodları tanımak için kamera çerçevesini kendiliğinden döndür. Bu, aygıta bağlı olarak performansı etkileyebilir.</string>
|
||||
<string name="try_harder">Kesinlik için okuyucuyu iyileştir</string>
|
||||
<string name="try_harder_summary">Okuması zor barkodlar için bu seçeneği etkinleştir. Performansı etkileyecektir.</string>
|
||||
<string name="vibrate">Tanıyınca titre</string>
|
||||
<string name="vibrate_summary">Kod tanındığında aygıtınızın titremesini istiyorsanız bunu etkinleştirin.</string>
|
||||
<string name="use_history">Tarama geçmişini kaydet</string>
|
||||
<string name="use_history_summary">Tanınan kodları aygıtınızda saklayın.</string>
|
||||
<string name="ignore_consecutive_duplicates">Yinelemeleri göz ardı et</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Ardışık yinelemeleri tarama geçmişine kaydetme.</string>
|
||||
<string name="open_immediately">Hemen aç</string>
|
||||
<string name="open_immediately_summary">İncelemeyi atla ve içeriği hemen aç. Eğer etkinse zararlı içerik açılabilir.</string>
|
||||
<string name="copy_immediately">Panoya koy</string>
|
||||
<string name="copy_immediately_summary">Taranan içerikleri kendiliğinden panoya kopyala. Unutmayın ki, diğer uygulamalar arka planda panonuzu gözetleyebilir.</string>
|
||||
<string name="show_meta_data">Üst veriyi göster</string>
|
||||
<string name="show_meta_data_summary">Taranan barkod ile ilgili ek veriyi göster</string>
|
||||
<string name="show_hex_dump">Hex yığınını göster</string>
|
||||
<string name="show_hex_dump_summary">Taranan içeriklerin hex yığınını göster.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">URL\'si olan bilinmeyen veriyi aç</string>
|
||||
<string name="send_category">Yönlendirme</string>
|
||||
<string name="send_scan_url">Her taramayı URL\'ye gönder</string>
|
||||
<string name="send_scan_type">Her tarama için isteğin türü</string>
|
||||
<string name="send_type_get_add_content">GET ve basitçe içeriği ekle</string>
|
||||
<string name="send_type_get_query_string">GET ile tam sorgu dizgesi</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Tarama gerçekten silinsin mi?</string>
|
||||
<string name="really_remove_all_scans">Tüm taramalar gerçekten silinsin mi?</string>
|
||||
<string name="really_remove_selected_scans">Seçili taramalar gerçekten silinsin mi?</string>
|
||||
<string name="clear_history">Geçmişi temizle</string>
|
||||
<string name="copy_scan">Taramayı kopyala</string>
|
||||
<string name="edit_scan">Etiketi düzenle</string>
|
||||
<string name="remove_scan">Taramayı sil</string>
|
||||
<string name="enter_name">Taramayı açıklayacak ad gir</string>
|
||||
<string name="enter_name_hint">Taramanın adı</string>
|
||||
<string name="no_barcode_found">Barkod bulunamadı</string>
|
||||
<string name="pick_list_separator">Liste ögeleri nasıl ayrılsın?</string>
|
||||
<string name="separator_line_break">Satır kesmesi</string>
|
||||
<string name="separator_ruler">Çizgi</string>
|
||||
<string name="save_as_file_name">Hangi adla İndirilenler\'e kaydedilsin?</string>
|
||||
<string name="file_name">Dosya adı</string>
|
||||
<string name="error_saving_file">Dosya kaydedilemedi</string>
|
||||
<string name="error_file_exists">Dosya zaten var</string>
|
||||
<string name="connect_to_wifi">WiFi\'ye bağlan</string>
|
||||
<string name="wifi_config_failed">WiFi yapılandırılamadı</string>
|
||||
<string name="wifi_added">WiFi eklendi</string>
|
||||
<string name="sms_send">SMS gönder</string>
|
||||
<string name="sms_error">SMS gönderilemedi</string>
|
||||
<string name="tel_dial">Numarayı çevir</string>
|
||||
<string name="tel_error">Numara çevrilemedi</string>
|
||||
<string name="mail_send">Posta gönder</string>
|
||||
<string name="mail_error">Posta gönderilemedi</string>
|
||||
<string name="vcard_add">Kişilere ekle</string>
|
||||
<string name="vcard_failed">Kişilere eklenemedi</string>
|
||||
<string name="vevent_add">Takvime ekle</string>
|
||||
<string name="vevent_failed">Takvime eklenemedi</string>
|
||||
<string name="otpauth_add">2FA\'ya ekle</string>
|
||||
<string name="search_web">Web\'i ara</string>
|
||||
<string name="search_scan">Taramayı ara</string>
|
||||
<string name="export_to_file">Dosyaya dışa aktar</string>
|
||||
<string name="export_as">Ne olarak dışa aktar?</string>
|
||||
<string name="export_csv_comma">Virgüller ile CSV</string>
|
||||
<string name="export_csv_semicolon">Noktalı virgüller ile CSV</string>
|
||||
<string name="export_json">JSON olarak dışa aktar</string>
|
||||
<string name="export_database">SQLite veri tabanı olarak dışa aktar</string>
|
||||
<string name="saved_in_downloads">İndirilenlere kaydedildi</string>
|
||||
<string name="rotate_image_cw">Görüntüyü saat yönünde döndür</string>
|
||||
<string name="pick_file">Görüntü dosyası seç</string>
|
||||
<string name="pick_code_to_scan">Taranacak kod seç</string>
|
||||
<string name="shortcut_decode">Barkod tara</string>
|
||||
<string name="shortcut_encode">Barkod yarat</string>
|
||||
<string name="shortcut_preferences">Ayarlar</string>
|
||||
<string name="background_request_failed">Arka plan isteği başarısız</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,134 @@
|
||||
<resources>
|
||||
<string name="no_camera_no_fun">Ця програма немає сенсу без доступу до камери. До побачення.</string>
|
||||
<string name="camera_error">Неможливо отримати доступ до камери, будь ласка, спробуйте ще раз</string>
|
||||
<string name="scan_code">Сканування коду</string>
|
||||
<string name="compose_barcode">Створити штрих-код</string>
|
||||
<string name="decode_barcode">Розшифрувати штрих-код</string>
|
||||
<string name="content">Вміст</string>
|
||||
<string name="binary_data">(двійкові дані)</string>
|
||||
<plurals name="barcode_info">
|
||||
<item quantity="one">%2$d символ, %1$s</item>
|
||||
<item quantity="few">%2$d символи, %1$s</item>
|
||||
<item quantity="many">%2$d символів, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Рівень виправлення помилок</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Номер випуску</string>
|
||||
<string name="orientation">Орієнтація</string>
|
||||
<string name="other_meta_data">Метадані</string>
|
||||
<string name="pdf417_extra_metadata">Метадані PDF417</string>
|
||||
<string name="possible_country">Можлива країна-виробник</string>
|
||||
<string name="suggested_price">Рекомендована ціна</string>
|
||||
<string name="upc_ean_extension">Розширення UPC EAN</string>
|
||||
<string name="toggle_flash">Увімкнути спалах</string>
|
||||
<string name="share">Поділитися</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Копіювати у буфер обміну</string>
|
||||
<string name="copied_to_clipboard">Скопійовано у буфер обміну</string>
|
||||
<string name="copy_password">Копіювати пароль у буфер обміну</string>
|
||||
<string name="copied_password_to_clipboard">Пароль скопійовано у буфер обміну</string>
|
||||
<string name="open_url">Відкрити URL-адресу</string>
|
||||
<string name="cannot_resolve_action">Жодey додаток не може цього відкрити</string>
|
||||
<string name="pick_search_engine">Вибрати пошукову систему</string>
|
||||
<string name="format">Формат</string>
|
||||
<string name="size">Розмір у пікселях</string>
|
||||
<string name="width_by_height">%1$d×%2$d</string>
|
||||
<string name="input_content_here">Введіть вміст сюди</string>
|
||||
<string name="encode">КОДУВАТИ</string>
|
||||
<string name="error_no_content">Відсутній вміст</string>
|
||||
<string name="error_encoding_barcode">Неможливо створити штрих-код</string>
|
||||
<string name="view_barcode">Переглянути штрих-код</string>
|
||||
<string name="info">Інформація</string>
|
||||
<string name="switch_camera">Переключити камеру</string>
|
||||
<string name="bulk_mode">Сканувати безперервно</string>
|
||||
<string name="history">Історія</string>
|
||||
<string name="preferences">Налаштування</string>
|
||||
<string name="scan_category">Сканування</string>
|
||||
<string name="content_category">Вміст</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Обмежити область сканування</string>
|
||||
<string name="show_crop_handle_summary">Обмежити сканування до налаштованої області.</string>
|
||||
<string name="zoom_by_swiping">Проведіть пальцем вгору/вниз, для масштабування</string>
|
||||
<string name="zoom_by_swiping_summary">Проведіть пальцем вгору або вниз по екрану камери, щоб керувати масштабуванням камери.</string>
|
||||
<string name="auto_rotate">Розпізнавати вертикальні 1D штрихкоди</string>
|
||||
<string name="auto_rotate_summary">Автоматично повертати кадр камери, щоб розпізнати вертикальні 1D штрих-коди. Залежно від пристрою, це може вплинути на продуктивність.</string>
|
||||
<string name="try_harder">Оптимізувати зчитувач для точності</string>
|
||||
<string name="try_harder_summary">Увімкніть цю опцію для дуже важких для зчитування кодів. Це вплине на продуктивність.</string>
|
||||
<string name="vibrate">Вібрувати при виявленні</string>
|
||||
<string name="vibrate_summary">Увімкніть це, якщо хочете, щоб пристрій вібрував, коли код розпізнано.</string>
|
||||
<string name="use_history">Зберігати історію сканування</string>
|
||||
<string name="use_history_summary">Збережіть розпізнані коди на своєму пристрої.</string>
|
||||
<string name="ignore_consecutive_duplicates">Ігнорувати дублікати</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Не зберігати послідовні дублікати в історії сканування.</string>
|
||||
<string name="open_immediately">Відкривати негайно</string>
|
||||
<string name="open_immediately_summary">Пропустити перегляд та негайно відкрити вміст. Якщо увімкнено, може відкрити шкідливий вміст.</string>
|
||||
<string name="copy_immediately">Помістити в буфер обміну</string>
|
||||
<string name="copy_immediately_summary">Автоматично копіювати відсканований вміст у буфер обміну. Зверніть увагу, що інші програми можуть стежити за буфером обміну в фоновому режимі.</string>
|
||||
<string name="show_meta_data">Показувати метадані</string>
|
||||
<string name="show_meta_data_summary">Показувати додаткові дані про відскановані штрих-коди.</string>
|
||||
<string name="show_hex_dump">Показувати шістнадцятковий дамп</string>
|
||||
<string name="show_hex_dump_summary">Показувати шістнадцятковий дамп відсканованого вмісту.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Відкривати невідомі дані за допомогою URL</string>
|
||||
<string name="send_category">Пересилання</string>
|
||||
<string name="send_scan_url">Надсилати кожне сканування на URL</string>
|
||||
<string name="send_scan_type">Тип запиту для кожного сканування</string>
|
||||
<string name="send_type_get_add_content">GET і просто додати контент</string>
|
||||
<string name="send_type_get_query_string">GET з повним рядком параметрів запиту</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Дійсно видалити сканування?</string>
|
||||
<string name="really_remove_all_scans">Дійсно видалити всі сканування?</string>
|
||||
<string name="really_remove_selected_scans">Дійсно видалити вибрані сканування?</string>
|
||||
<string name="clear_history">Очистити історію</string>
|
||||
<string name="copy_scan">Скопіювати сканування</string>
|
||||
<string name="edit_scan">Редагувати мітку</string>
|
||||
<string name="remove_scan">Видалити сканування</string>
|
||||
<string name="enter_name">Введіть ім\'я щоб описати сканування</string>
|
||||
<string name="enter_name_hint">Ім\'я сканування</string>
|
||||
<string name="no_barcode_found">Штрих-коду не знайдено</string>
|
||||
<string name="pick_list_separator">Як розділяти елементи списку?</string>
|
||||
<string name="separator_line_break">Розрив рядка</string>
|
||||
<string name="separator_ruler">Горизонтальна лінія</string>
|
||||
<string name="save_as_file_name">Як зберегти файл у Завантаженнях?</string>
|
||||
<string name="file_name">Ім\'я файлу</string>
|
||||
<string name="error_saving_file">Не вдалося зберегти файл</string>
|
||||
<string name="error_file_exists">Файл вже існує</string>
|
||||
<string name="connect_to_wifi">Підключитися до WiFi</string>
|
||||
<string name="wifi_config_failed">Не вдалося налаштувати WiFi</string>
|
||||
<string name="wifi_added">WiFi додано</string>
|
||||
<string name="sms_send">Надіслати SMS</string>
|
||||
<string name="sms_error">Не вдалося надіслати SMS</string>
|
||||
<string name="tel_dial">Набрати номер</string>
|
||||
<string name="tel_error">Не вдалося набрати номер</string>
|
||||
<string name="mail_send">Надіслати листа</string>
|
||||
<string name="mail_error">Не вдалося надіслати листа</string>
|
||||
<string name="vcard_add">Додати до списку контактів</string>
|
||||
<string name="vcard_failed">Не вдалося додати до списку контактів</string>
|
||||
<string name="vevent_add">Додати до календаря</string>
|
||||
<string name="vevent_failed">Не вдалося додати до календаря</string>
|
||||
<string name="otpauth_add">Додати 2FA</string>
|
||||
<string name="search_web">Шукати в мережі</string>
|
||||
<string name="search_scan">Шукати сканування</string>
|
||||
<string name="export_to_file">Експортувати в файл</string>
|
||||
<string name="export_as">Експортувати як?</string>
|
||||
<string name="export_csv_comma">CSV із комами</string>
|
||||
<string name="export_csv_semicolon">CSV із крапкою з комою</string>
|
||||
<string name="export_json">Експортувати як JSON</string>
|
||||
<string name="export_database">Експортувати базу даних SQLite</string>
|
||||
<string name="saved_in_downloads">Збережено в Завантаженнях</string>
|
||||
<string name="rotate_image_cw">Повернути зображення за годинниковою стрілкою</string>
|
||||
<string name="pick_file">Вибрати файл зображення</string>
|
||||
<string name="pick_code_to_scan">Вибрати код для сканування</string>
|
||||
<string name="shortcut_decode">Сканувати штрих-код</string>
|
||||
<string name="shortcut_encode">Створити штрих-код</string>
|
||||
<string name="shortcut_preferences">Налаштування</string>
|
||||
<string name="background_request_failed">Помилка фонового запиту</string>
|
||||
</resources>
|
||||
@@ -1,28 +1,33 @@
|
||||
<resources>
|
||||
<string name="no_camera_no_fun">没有给我相机权限,扫个锤子。再见!</string>
|
||||
<string name="no_camera_no_fun">没给我相机权限,不给你扫了,哼!</string>
|
||||
<string name="camera_error">无法访问相机,请重试。</string>
|
||||
<string name="scan_code">扫描</string>
|
||||
<string name="compose_barcode">制作条形码</string>
|
||||
<string name="decode_barcode">解码条形码</string>
|
||||
<string name="content">内容</string>
|
||||
<string name="binary_data">(二进制数据)</string>
|
||||
<string name="binary_data">(二进制数据)</string>
|
||||
<plurals name="barcode_info">
|
||||
<item quantity="other">%2$d 字符, %1$s</item>
|
||||
<item quantity="other">%2$d 字符, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
<string name="pdf417_extra_metadata">PDF417 metadata</string>
|
||||
<string name="possible_country">Possible country of manufacture</string>
|
||||
<string name="suggested_price">Suggested price</string>
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="error_correction_level">纠错级别</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">发行编号</string>
|
||||
<string name="orientation">方向</string>
|
||||
<string name="other_meta_data">元数据</string>
|
||||
<string name="pdf417_extra_metadata">PDF417 元数据</string>
|
||||
<string name="possible_country">可能产地</string>
|
||||
<string name="suggested_price">隐含价格</string>
|
||||
<string name="upc_ean_extension">UPC EAN 扩展</string>
|
||||
<string name="toggle_flash">开关闪光灯</string>
|
||||
<string name="share">分享</string>
|
||||
<string name="copy_to_clipboard">复制到剪切板</string>
|
||||
<string name="copied_to_clipboard">复制到剪切板</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
<string name="copied_password_to_clipboard">Password copied to clipboard</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">复制到剪贴板</string>
|
||||
<string name="copied_to_clipboard">已复制到剪贴板</string>
|
||||
<string name="copy_password">复制密码到剪贴板</string>
|
||||
<string name="copied_password_to_clipboard">已复制密码到剪贴板</string>
|
||||
<string name="open_url">打开链接</string>
|
||||
<string name="cannot_resolve_action">没有相关APP可以打开它</string>
|
||||
<string name="pick_search_engine">选择一个搜索引擎</string>
|
||||
@@ -34,57 +39,63 @@
|
||||
<string name="error_no_content">缺少内容</string>
|
||||
<string name="error_encoding_barcode">无法生成条形码</string>
|
||||
<string name="view_barcode">查看条形码</string>
|
||||
<string name="info">信息</string>
|
||||
<string name="info">关于</string>
|
||||
<string name="switch_camera">切换摄像头</string>
|
||||
<string name="bulk_mode">Scan continuously</string>
|
||||
<string name="bulk_mode">连续扫描</string>
|
||||
<string name="history">历史</string>
|
||||
<string name="preferences">首选项</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Zoom camera by swiping up/down</string>
|
||||
<string name="zoom_by_swiping_summary">Swipe up or down in camera screen to control the camera zoom.</string>
|
||||
<string name="auto_rotate">Recognize 1D barcodes vertically</string>
|
||||
<string name="auto_rotate_summary">Automatically rotate the camera frame to recognize vertical 1D barcodes. Depending on the device, this may affect performance.</string>
|
||||
<string name="try_harder">Optimize reader for accuracy, not speed</string>
|
||||
<string name="try_harder_summary">Enable this option for very hard to read codes. Will affect performance.</string>
|
||||
<string name="vibrate">Vibrate on detection</string>
|
||||
<string name="vibrate_summary">Enable this if you want your device to vibrate when a code is recognized.</string>
|
||||
<string name="scan_category">扫描</string>
|
||||
<string name="content_category">内容</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">限制扫描区域</string>
|
||||
<string name="show_crop_handle_summary">把扫描区域限制在选定范围内</string>
|
||||
<string name="zoom_by_swiping">上下滑动缩放</string>
|
||||
<string name="zoom_by_swiping_summary">通过上下滑动在扫描界面控制相机缩放</string>
|
||||
<string name="auto_rotate">识别竖直的1D条形码</string>
|
||||
<string name="auto_rotate_summary">自动旋转相机以识别竖直的1D条形码(可能会影响一些设备的扫描性能)</string>
|
||||
<string name="try_harder">提高扫描精度</string>
|
||||
<string name="try_harder_summary">扫描很难识别的条形码时可启用该选项,会降低扫描速度</string>
|
||||
<string name="vibrate">振动提示</string>
|
||||
<string name="vibrate_summary">扫描完成时振动提示</string>
|
||||
<string name="use_history">保存扫描历史</string>
|
||||
<string name="use_history_summary">Save recognized codes on your device.</string>
|
||||
<string name="ignore_consecutive_duplicates">Do not save consecutive duplicates</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">Do not save consecutive duplicates in the scan history.</string>
|
||||
<string name="open_immediately">跳过内容展示并立即打开</string>
|
||||
<string name="open_immediately_summary">Skip inspection and open contents immediately. May open harmful content if enabled.</string>
|
||||
<string name="copy_immediately">Automatically copy contents into clipboard</string>
|
||||
<string name="copy_immediately_summary">Automatically copy scanned contents into clipboard. Please note that other apps may snoop on your clipboard in the background.</string>
|
||||
<string name="show_meta_data">Show metadata</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="use_history_summary">在本地保存扫描历史</string>
|
||||
<string name="ignore_consecutive_duplicates">不保存重复历史</string>
|
||||
<string name="ignore_consecutive_duplicates_summary">在扫描历史中不保存重复项</string>
|
||||
<string name="open_immediately">不查看内容立即打开</string>
|
||||
<string name="open_immediately_summary">可能会打开有害内容</string>
|
||||
<string name="copy_immediately">自动复制扫描结果到剪贴板</string>
|
||||
<string name="copy_immediately_summary">注意其他APP可能会在后台监控剪贴板</string>
|
||||
<string name="show_meta_data">显示元数据</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="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">使用URL打开未知数据</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
<string name="send_scan_type">Type of request for every scan</string>
|
||||
<string name="send_type_get_add_content">GET and simply add content</string>
|
||||
<string name="send_type_get_query_string">GET with compelete query string</string>
|
||||
<string name="send_category">转发</string>
|
||||
<string name="send_scan_url">将每个扫描结果发送到URL</string>
|
||||
<string name="send_scan_type">请求类型</string>
|
||||
<string name="send_type_get_add_content">GET 简单附加数据</string>
|
||||
<string name="send_type_get_query_string">GET 完整查询数据</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="really_remove_scan">确定删除记录?</string>
|
||||
<string name="really_remove_all_scans">确定删除全部记录?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
<string name="clear_history">删除记录</string>
|
||||
<string name="copy_scan">Copy scan</string>
|
||||
<string name="edit_scan">Edit label</string>
|
||||
<string name="remove_scan">Remove scan</string>
|
||||
<string name="enter_name">Enter a name to describe the scan</string>
|
||||
<string name="enter_name_hint">Name of the scan</string>
|
||||
<string name="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">确定删除记录?</string>
|
||||
<string name="really_remove_all_scans">确定删除全部记录?</string>
|
||||
<string name="really_remove_selected_scans">确定删除所选记录?</string>
|
||||
<string name="clear_history">清空记录</string>
|
||||
<string name="copy_scan">复制扫描记录</string>
|
||||
<string name="edit_scan">编辑名称</string>
|
||||
<string name="remove_scan">删除所选记录</string>
|
||||
<string name="enter_name">输入名称</string>
|
||||
<string name="enter_name_hint">扫描描述</string>
|
||||
<string name="no_barcode_found">未找到条形码</string>
|
||||
<string name="pick_list_separator">如何分隔列表项?</string>
|
||||
<string name="separator_line_break">无</string>
|
||||
<string name="pick_list_separator">如何分隔列表项?</string>
|
||||
<string name="separator_line_break">换行符</string>
|
||||
<string name="separator_ruler">分割线</string>
|
||||
<string name="save_as_file_name">保存为文件?</string>
|
||||
<string name="save_as_file_name">保存为文件?</string>
|
||||
<string name="file_name">文件名</string>
|
||||
<string name="error_saving_file">无法保存文件</string>
|
||||
<string name="error_file_exists">文件已存在</string>
|
||||
@@ -103,21 +114,19 @@
|
||||
<string name="vevent_failed">无法添加到日历</string>
|
||||
<string name="otpauth_add">添加两步验证</string>
|
||||
<string name="search_web">在互联网中搜索</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">导出为CSV文件</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="search_scan">搜索扫描记录</string>
|
||||
<string name="export_to_file">导出为文件</string>
|
||||
<string name="export_as">另存为?</string>
|
||||
<string name="export_csv_comma">逗号分隔的CSV</string>
|
||||
<string name="export_csv_semicolon">分号分隔的CSV</string>
|
||||
<string name="export_json">JSON</string>
|
||||
<string name="export_database">导出SQLite数据库</string>
|
||||
<string name="saved_in_downloads">已保存到下载目录</string>
|
||||
<string name="rotate_image_cw">旋转图片</string>
|
||||
<string name="pick_file">选择图片文件</string>
|
||||
<string name="pick_code_to_scan">选择扫描的编码</string>
|
||||
<string name="shortcut_decode">Scan a barcode</string>
|
||||
<string name="shortcut_encode">Create a barcode</string>
|
||||
<string name="shortcut_preferences">Settings</string>
|
||||
<string name="background_request_failed">Background request failed</string>
|
||||
<string name="pick_code_to_scan">选择扫描编码</string>
|
||||
<string name="shortcut_decode">扫描条形码</string>
|
||||
<string name="shortcut_encode">创建条形码</string>
|
||||
<string name="shortcut_preferences">设置</string>
|
||||
<string name="background_request_failed">后台请求失败</string>
|
||||
</resources>
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
<item quantity="other">%2$d 個字符, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
@@ -19,6 +23,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">閃光燈</string>
|
||||
<string name="share">分享</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">複製</string>
|
||||
<string name="copied_to_clipboard">複製</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
@@ -60,6 +65,8 @@
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="really_remove_scan">真的要移除掃描記錄?</string>
|
||||
<string name="really_remove_all_scans">真的要移除所有掃描記錄?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
@@ -93,6 +100,9 @@
|
||||
<string name="preferences">Preferences</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="open_with_url">Open unknown data with URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
@@ -101,17 +111,16 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="otpauth_add">Add 2FA</string>
|
||||
<string name="search_web">Search the web</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">Export to file</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="export_csv_comma">CSV file with commas</string>
|
||||
<string name="export_csv_semicolon">CSV file with semicolons</string>
|
||||
<string name="export_json">JSON file</string>
|
||||
<string name="export_database">SQLite database</string>
|
||||
<string name="saved_in_downloads">Saved in downloads</string>
|
||||
<string name="rotate_image_cw">Rotate image clockwise</string>
|
||||
<string name="pick_file">Pick image file</string>
|
||||
@@ -1,5 +1,6 @@
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">Binary Eye</string>
|
||||
<string name="url_hint" translatable="false">http://example.com?content=</string>
|
||||
<string name="url_hint" translatable="false">http://example.com/</string>
|
||||
<string name="url_hint_add_content" translatable="false">http://example.com/?content=</string>
|
||||
<string name="project_url" translatable="false">https://github.com/markusfisch/BinaryEye</string>
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<resources>
|
||||
<string-array name="error_correction_levels">
|
||||
<item>@string/error_correction_level_l</item>
|
||||
<item>@string/error_correction_level_m</item>
|
||||
<item>@string/error_correction_level_q</item>
|
||||
<item>@string/error_correction_level_h</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,40 @@
|
||||
<resources>
|
||||
<string-array name="locale_names">
|
||||
<item>@string/follow_system_settings</item>
|
||||
<item>English</item>
|
||||
<item>German</item>
|
||||
<item>Spanish</item>
|
||||
<item>French</item>
|
||||
<item>Hungarian</item>
|
||||
<item>Indonesian</item>
|
||||
<item>Italian</item>
|
||||
<item>Georgian</item>
|
||||
<item>Dutch</item>
|
||||
<item>Polish</item>
|
||||
<item>Portuguese (Brazil)</item>
|
||||
<item>Russian</item>
|
||||
<item>Turkish</item>
|
||||
<item>Ukrainian</item>
|
||||
<item>Chinese</item>
|
||||
<item>Chinese (Simplified Han,China)</item>
|
||||
</string-array>
|
||||
<string-array name="locale_values">
|
||||
<item></item>
|
||||
<item>en</item>
|
||||
<item>de</item>
|
||||
<item>es</item>
|
||||
<item>fr</item>
|
||||
<item>hu</item>
|
||||
<item>in</item>
|
||||
<item>it</item>
|
||||
<item>ka</item>
|
||||
<item>nl</item>
|
||||
<item>pl</item>
|
||||
<item>pt-rBR</item>
|
||||
<item>ru-rRU</item>
|
||||
<item>tr</item>
|
||||
<item>uk</item>
|
||||
<item>zh</item>
|
||||
<item>zh-rCN</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -11,6 +11,10 @@
|
||||
<item quantity="other">%2$d characters, %1$s</item>
|
||||
</plurals>
|
||||
<string name="error_correction_level">Error correction level</string>
|
||||
<string name="error_correction_level_l" formatted="false">Low (~7% correction)</string>
|
||||
<string name="error_correction_level_m" formatted="false">Medium (~15% correction)</string>
|
||||
<string name="error_correction_level_q" formatted="false">Quartile (~25% correction)</string>
|
||||
<string name="error_correction_level_h" formatted="false">High (~30% correction)</string>
|
||||
<string name="issue_number">Issue number</string>
|
||||
<string name="orientation">Orientation</string>
|
||||
<string name="other_meta_data">Metadata</string>
|
||||
@@ -20,6 +24,7 @@
|
||||
<string name="upc_ean_extension">UPC EAN extension</string>
|
||||
<string name="toggle_flash">Toggle flash</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="share_as">Share as?</string>
|
||||
<string name="copy_to_clipboard">Copy to clipboard</string>
|
||||
<string name="copied_to_clipboard">Copied to clipboard</string>
|
||||
<string name="copy_password">Copy password into clipboard</string>
|
||||
@@ -42,6 +47,9 @@
|
||||
<string name="preferences">Preferences</string>
|
||||
<string name="scan_category">Scan</string>
|
||||
<string name="content_category">Content</string>
|
||||
<string name="locale_category">Language</string>
|
||||
<string name="custom_locale">Custom locale</string>
|
||||
<string name="follow_system_settings">Follow system settings</string>
|
||||
<string name="show_crop_handle">Show cropping limiter</string>
|
||||
<string name="show_crop_handle_summary">Restrict scanning to a customizable region.</string>
|
||||
<string name="zoom_by_swiping">Swipe up/down to zoom</string>
|
||||
@@ -61,9 +69,11 @@
|
||||
<string name="copy_immediately">Put into clipboard</string>
|
||||
<string name="copy_immediately_summary">Automatically copy scanned contents into clipboard. Please note that other apps may snoop on your clipboard in the background.</string>
|
||||
<string name="show_meta_data">Show metadata</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcoded.</string>
|
||||
<string name="show_meta_data_summary">Show additional data about the scanned barcode.</string>
|
||||
<string name="show_hex_dump">Show hex dump</string>
|
||||
<string name="show_hex_dump_summary">Show a hex dump of the scanned contents.</string>
|
||||
<string name="close_automatically">Go back after Copy/Share</string>
|
||||
<string name="close_automatically_summary">Automatically return to the scan screen after copying or sharing the read contents.</string>
|
||||
<string name="open_with_url">Open unknown data with URL</string>
|
||||
<string name="send_category">Forwarding</string>
|
||||
<string name="send_scan_url">Send every scan to URL</string>
|
||||
@@ -72,6 +82,7 @@
|
||||
<string name="send_type_get_query_string">GET with compelete query string</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="test_url">Test URL</string>
|
||||
<string name="really_remove_scan">Really remove scan?</string>
|
||||
<string name="really_remove_all_scans">Really remove all scans?</string>
|
||||
<string name="really_remove_selected_scans">Really remove selected scans?</string>
|
||||
@@ -106,13 +117,11 @@
|
||||
<string name="search_web">Search the web</string>
|
||||
<string name="search_scan">Search scan</string>
|
||||
<string name="export_to_file">Export to file</string>
|
||||
<string name="export_png">Export as PNG</string>
|
||||
<string name="export_svg">Export as SVG</string>
|
||||
<string name="export_as">Export as?</string>
|
||||
<string name="export_csv_comma">CSV with commas</string>
|
||||
<string name="export_csv_semicolon">CSV with semicolons</string>
|
||||
<string name="export_json">Export as JSON</string>
|
||||
<string name="export_database">Export SQLite database</string>
|
||||
<string name="export_csv_comma">CSV file with commas</string>
|
||||
<string name="export_csv_semicolon">CSV file with semicolons</string>
|
||||
<string name="export_json">JSON file</string>
|
||||
<string name="export_database">SQLite database</string>
|
||||
<string name="saved_in_downloads">Saved in downloads</string>
|
||||
<string name="rotate_image_cw">Rotate image clockwise</string>
|
||||
<string name="pick_file">Pick image file</string>
|
||||
|
||||
@@ -47,8 +47,7 @@
|
||||
<PreferenceCategory android:title="@string/send_category">
|
||||
<de.markusfisch.android.binaryeye.preference.UrlPreference
|
||||
android:key="send_scan_url"
|
||||
android:title="@string/send_scan_url"
|
||||
android:summary="@string/url_hint"/>
|
||||
android:title="@string/send_scan_url"/>
|
||||
<ListPreference
|
||||
android:key="send_scan_type"
|
||||
android:title="@string/send_scan_type"
|
||||
@@ -72,9 +71,21 @@
|
||||
android:key="show_hex_dump"
|
||||
android:title="@string/show_hex_dump"
|
||||
android:summary="@string/show_hex_dump_summary"/>
|
||||
<android.support.v7.preference.SwitchPreferenceCompat
|
||||
android:defaultValue="true"
|
||||
android:key="close_automatically"
|
||||
android:title="@string/close_automatically"
|
||||
android:summary="@string/close_automatically_summary"/>
|
||||
<de.markusfisch.android.binaryeye.preference.UrlPreference
|
||||
android:key="open_with_url"
|
||||
android:title="@string/open_with_url"
|
||||
android:summary="@string/url_hint"/>
|
||||
android:title="@string/open_with_url"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/locale_category">
|
||||
<ListPreference
|
||||
android:key="custom_locale"
|
||||
android:title="@string/custom_locale"
|
||||
android:entries="@array/locale_names"
|
||||
android:entryValues="@array/locale_values"
|
||||
android:defaultValue="0"/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#pragma version(1)
|
||||
#pragma rs java_package_name(de.markusfisch.android.binaryeye.rs)
|
||||
#pragma rs reduce(analyze) initializer(analyzeInit) accumulator(analyzeAccumulator) combiner(analyzeCombiner) outconverter(analyzeConverter)
|
||||
|
||||
const static float3 relativeLuminance = {0.2126f, 0.7152f, 0.0722f};
|
||||
|
||||
typedef struct {
|
||||
int transparent;
|
||||
int visible;
|
||||
int bright;
|
||||
} Report;
|
||||
|
||||
static void analyzeInit(Report *report) {
|
||||
report->transparent = 0;
|
||||
report->visible = 0;
|
||||
report->bright = 0;
|
||||
}
|
||||
|
||||
static void analyzeAccumulator(Report *accum, uchar4 val) {
|
||||
if (val.a < 255) {
|
||||
accum->transparent = 1;
|
||||
}
|
||||
if (val.a > 0) {
|
||||
++accum->visible;
|
||||
float4 f4 = rsUnpackColor8888(val);
|
||||
float3 result = dot(f4.rgb, relativeLuminance);
|
||||
accum->bright += step(0.5f, result.r + result.g + result.b);
|
||||
}
|
||||
}
|
||||
|
||||
static void analyzeCombiner(Report *accum, const Report *val) {
|
||||
accum->transparent += val->transparent;
|
||||
accum->visible += val->visible;
|
||||
accum->bright += val->bright;
|
||||
}
|
||||
|
||||
static void analyzeConverter(int2 *result, const Report *report) {
|
||||
result->x = report->transparent;
|
||||
result->y = report->bright > 0 && report->visible / report->bright < 2;
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
buildscript {
|
||||
ext {
|
||||
kotlin_version = '1.3.72'
|
||||
tools_version = '4.0.1'
|
||||
kotlin_version = '1.4.10'
|
||||
tools_version = '4.1.1'
|
||||
build_tools_version = '29.0.3'
|
||||
sdk_version = 29
|
||||
sdk_version = 30
|
||||
support_version = '25.3.1'
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
* Alternatively remove region of interest by dragging handle to a screen corner
|
||||
* Restrict region of interest to screen space
|
||||
* Remove extra action item to create barcode
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
* Add a setting to sending scanned codes to a custom URL in background
|
||||
* Add a setting to automatically put contents into clipboard
|
||||
* Add an explicit button to copy WiFi password into clipboard
|
||||
* Update Indonesian translation
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
* Use Material Design settings with headers
|
||||
* Add a setting to choose the message type when forwarding scanned content
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
* Put images with transparent pixels on white/black
|
||||
* Use cropping limiter when scanning from images too
|
||||
* Support setting the error correction level when creating QR Codes
|
||||
* Support setting a custom deviating locale
|
||||
* Use adaptive icons for shortcut icons
|
||||
* Add exporting barcodes as plain text
|
||||
* Add Ukrainian translation
|
||||
* Add Turkish translation
|
||||
* Add Georgian translation
|
||||
* Update Indonesian translation
|
||||
* Update Russian translation
|
||||
* Update Italian translation
|
||||
* Update Simplified Chinese translation
|
||||
|
||||
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 435 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 787 KiB |
@@ -0,0 +1,9 @@
|
||||
Працює в книжковій та альбомній орієнтації, може читати перевернуті коди,
|
||||
інтерфейс Material Design, а також може генерувати штрих-коди.
|
||||
|
||||
Використовує бібліотеку сканування штрих-коду ZXing ("Zebra Crossing").
|
||||
Підтримувані формати штрих-коду: 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 and UPC EAN EXTENSION.
|
||||
|
||||
Код додатку: https://github.com/markusfisch/BinaryEye
|
||||
@@ -0,0 +1 @@
|
||||
Ще один сканер штрих-коду для Android. Безкоштовно, без реклами та з відкритим кодом.
|
||||
@@ -0,0 +1,8 @@
|
||||
横竖翻转都能扫,MD风格,可创建条形码。
|
||||
|
||||
使用ZXing ("Zebra Crossing") 条形码扫描库。
|
||||
支持的条形码格式: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 和 UPC EAN 扩展。
|
||||
|
||||
源代码:https://github.com/markusfisch/BinaryEye
|
||||
@@ -0,0 +1 @@
|
||||
一个Android条形码扫描器,开源、免费、无广告。
|
||||
@@ -0,0 +1,8 @@
|
||||
可以掃描各種條碼,Material設計,可以建立條碼,更開放原始碼。
|
||||
|
||||
基於ZXing ("Zebra Crossing") 條碼掃描器。
|
||||
適用於各種格式: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 和 UPC EAN EXTENSION。
|
||||
|
||||
原始碼:https://github.com/markusfisch/BinaryEye
|
||||
@@ -0,0 +1 @@
|
||||
Android的條碼掃描器。免費,無廣告,開放原始碼。
|
||||
@@ -1,6 +1,6 @@
|
||||
#Sun May 31 13:11:56 CEST 2020
|
||||
#Sun Oct 18 14:14:42 CEST 2020
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24 24H0V0h24v24z" fill="none"/>
|
||||
<path d="M 4.413 15.067 L 3.533 15.067 L 3.533 16.997 L 2.163 16.997 L 2.163 11.307 L 4.433 11.307 C 4.866 11.307 5.25 11.387 5.583 11.547 C 5.923 11.707 6.183 11.937 6.363 12.237 C 6.55 12.53 6.643 12.864 6.643 13.237 C 6.643 13.79 6.443 14.234 6.043 14.567 C 5.643 14.9 5.1 15.067 4.413 15.067 Z M 3.533 12.367 L 3.533 14.007 L 4.433 14.007 C 4.7 14.007 4.903 13.94 5.043 13.807 C 5.183 13.674 5.253 13.487 5.253 13.247 C 5.253 12.98 5.18 12.767 5.033 12.607 C 4.893 12.447 4.696 12.367 4.443 12.367 L 3.533 12.367 ZM 12.12 11.307 L 12.12 16.997 L 10.76 16.997 L 8.74 13.457 L 8.74 16.997 L 7.37 16.997 L 7.37 11.307 L 8.74 11.307 L 10.75 14.847 L 10.75 11.307 L 12.12 11.307 ZM 17.647 13.957 L 17.647 16.297 C 17.434 16.53 17.124 16.717 16.717 16.857 C 16.31 17.004 15.864 17.077 15.377 17.077 C 14.637 17.077 14.044 16.847 13.597 16.387 C 13.15 15.934 12.91 15.3 12.877 14.487 L 12.877 13.997 C 12.877 13.437 12.977 12.947 13.177 12.527 C 13.37 12.114 13.654 11.794 14.027 11.567 C 14.394 11.34 14.82 11.227 15.307 11.227 C 16.014 11.227 16.564 11.39 16.957 11.717 C 17.344 12.037 17.57 12.52 17.637 13.167 L 16.317 13.167 C 16.27 12.847 16.17 12.62 16.017 12.487 C 15.857 12.354 15.634 12.287 15.347 12.287 C 15.007 12.287 14.744 12.43 14.557 12.717 C 14.364 13.01 14.267 13.427 14.267 13.967 L 14.267 14.317 C 14.267 14.884 14.364 15.31 14.557 15.597 C 14.75 15.877 15.057 16.017 15.477 16.017 C 15.83 16.017 16.094 15.94 16.267 15.787 L 16.267 14.897 L 15.317 14.897 L 15.317 13.957 L 17.647 13.957 Z" transform="matrix(1, 0, 0, 1, 0, 0)" style="white-space: pre;"/>
|
||||
<path d="M 20.373 6.135 L 17.614 8.888 L 19.684 8.888 L 19.684 11.809 L 21.063 11.809 L 21.063 8.888 L 23.133 8.888 L 20.373 6.135 Z" style="" transform="matrix(0.707107, 0.707107, -0.707107, 0.707107, 12.311422, -11.778402)"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24 24H0V0h24v24z" fill="none"/>
|
||||
<path d="M 5.45 15.487 C 5.45 15.287 5.38 15.13 5.24 15.017 C 5.1 14.904 4.85 14.787 4.49 14.667 C 4.137 14.547 3.847 14.43 3.62 14.317 C 2.88 13.957 2.51 13.46 2.51 12.827 C 2.51 12.514 2.603 12.237 2.79 11.997 C 2.97 11.757 3.23 11.57 3.57 11.437 C 3.903 11.297 4.28 11.227 4.7 11.227 C 5.107 11.227 5.473 11.3 5.8 11.447 C 6.127 11.594 6.377 11.804 6.55 12.077 C 6.73 12.344 6.82 12.65 6.82 12.997 L 5.46 12.997 C 5.46 12.764 5.387 12.584 5.24 12.457 C 5.1 12.33 4.91 12.267 4.67 12.267 C 4.423 12.267 4.23 12.32 4.09 12.427 C 3.95 12.534 3.88 12.67 3.88 12.837 C 3.88 12.984 3.957 13.117 4.11 13.237 C 4.263 13.357 4.537 13.48 4.93 13.607 C 5.323 13.734 5.647 13.87 5.9 14.017 C 6.513 14.37 6.82 14.857 6.82 15.477 C 6.82 15.977 6.633 16.367 6.26 16.647 C 5.887 16.934 5.373 17.077 4.72 17.077 C 4.26 17.077 3.843 16.994 3.47 16.827 C 3.097 16.66 2.813 16.434 2.62 16.147 C 2.433 15.86 2.34 15.53 2.34 15.157 L 3.72 15.157 C 3.72 15.457 3.797 15.68 3.95 15.827 C 4.11 15.974 4.367 16.047 4.72 16.047 C 4.947 16.047 5.127 15.997 5.26 15.897 C 5.387 15.797 5.45 15.66 5.45 15.487 ZM 8.608 11.307 L 9.738 15.447 L 10.868 11.307 L 12.398 11.307 L 10.488 16.997 L 8.988 16.997 L 7.088 11.307 L 8.608 11.307 ZM 17.422 13.957 L 17.422 16.297 C 17.209 16.53 16.899 16.717 16.492 16.857 C 16.085 17.004 15.639 17.077 15.152 17.077 C 14.412 17.077 13.819 16.847 13.372 16.387 C 12.925 15.934 12.685 15.3 12.652 14.487 L 12.652 13.997 C 12.652 13.437 12.752 12.947 12.952 12.527 C 13.145 12.114 13.429 11.794 13.802 11.567 C 14.169 11.34 14.595 11.227 15.082 11.227 C 15.789 11.227 16.339 11.39 16.732 11.717 C 17.119 12.037 17.345 12.52 17.412 13.167 L 16.092 13.167 C 16.045 12.847 15.945 12.62 15.792 12.487 C 15.632 12.354 15.409 12.287 15.122 12.287 C 14.782 12.287 14.519 12.43 14.332 12.717 C 14.139 13.01 14.042 13.427 14.042 13.967 L 14.042 14.317 C 14.042 14.884 14.139 15.31 14.332 15.597 C 14.525 15.877 14.832 16.017 15.252 16.017 C 15.605 16.017 15.869 15.94 16.042 15.787 L 16.042 14.897 L 15.092 14.897 L 15.092 13.957 L 17.422 13.957 Z" transform="matrix(1, 0, 0, 1, 0, 0)" style="white-space: pre;"/>
|
||||
<path d="M 19.58 6.075 L 16.821 8.828 L 18.891 8.828 L 18.891 11.749 L 20.27 11.749 L 20.27 8.828 L 22.34 8.828 L 19.58 6.075 Z" style="" transform="matrix(0.707107, 0.707107, -0.707107, 0.707107, 12.036731, -11.23524)"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 108 108" width="108px" height="108px" xmlns="http://www.w3.org/2000/svg">
|
||||
<style type="text/css" id="style3">
|
||||
.st0{clip-path:url(#SVGID_2_);fill:#FFFFFF;}
|
||||
</style>
|
||||
<circle style="opacity:1;fill:#ffffff;stop-opacity:1" cx="54" cy="55.787" r="5.719" id="circle911"/>
|
||||
<path style="opacity:1;fill:#ffffff;stop-opacity:1" d="M 48.639 37.916 L 45.368 41.491 L 39.703 41.491 C 37.738 41.491 36.129 43.099 36.129 45.065 L 36.129 66.509 C 36.129 68.475 37.738 70.084 39.703 70.084 L 68.297 70.084 C 70.262 70.084 71.871 68.475 71.871 66.509 L 71.871 45.065 C 71.871 43.099 70.262 41.491 68.297 41.491 L 62.632 41.491 L 59.361 37.916 Z M 54 64.722 C 49.068 64.722 45.065 60.719 45.065 55.787 C 45.065 50.855 49.068 46.852 54 46.852 C 58.932 46.852 62.935 50.855 62.935 55.787 C 62.935 60.719 58.932 64.722 54 64.722 Z" id="path913"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 931 B |
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg height="108px" width="108px" viewBox="0 0 108 108" y="0px" x="0px" id="Ebene_1" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<style id="style3" type="text/css">
|
||||
.st0{clip-path:url(#SVGID_2_);fill:#FFFFFF;}
|
||||
</style>
|
||||
<path id="path879" d="M 69.75 56.25 L 56.25 56.25 L 56.25 69.75 L 51.75 69.75 L 51.75 56.25 L 38.25 56.25 L 38.25 51.75 L 51.75 51.75 L 51.75 38.25 L 56.25 38.25 L 56.25 51.75 L 69.75 51.75 Z" style="opacity: 1; stop-opacity: 1; fill: rgb(255, 255, 255);"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 529 B |
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg height="108px" width="108px" viewBox="0 0 108 108" y="0px" x="0px" id="Ebene_1" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<style id="style3" type="text/css">
|
||||
.st0{clip-path:url(#SVGID_2_);fill:#FFFFFF;}
|
||||
</style>
|
||||
<path id="path895" d="M 70.057 56.114 C 70.147 55.439 70.192 54.742 70.192 54 C 70.192 53.281 70.147 52.561 70.034 51.886 L 74.6 48.333 C 75.005 48.018 75.117 47.411 74.87 46.961 L 70.552 39.495 C 70.282 39 69.72 38.843 69.225 39 L 63.85 41.159 C 62.726 40.305 61.534 39.585 60.207 39.045 L 59.397 33.333 C 59.307 32.793 58.858 32.411 58.318 32.411 L 49.682 32.411 C 49.142 32.411 48.715 32.793 48.625 33.333 L 47.816 39.045 C 46.489 39.585 45.274 40.327 44.172 41.159 L 38.798 39 C 38.303 38.82 37.741 39 37.471 39.495 L 33.175 46.961 C 32.906 47.433 32.996 48.018 33.445 48.333 L 38.011 51.886 C 37.898 52.561 37.808 53.303 37.808 54 C 37.808 54.697 37.853 55.439 37.966 56.114 L 33.4 59.667 C 32.996 59.982 32.883 60.589 33.13 61.039 L 37.448 68.505 C 37.718 69 38.28 69.158 38.775 69 L 44.15 66.841 C 45.274 67.696 46.466 68.415 47.793 68.955 L 48.603 74.667 C 48.715 75.207 49.142 75.589 49.682 75.589 L 58.318 75.589 C 58.858 75.589 59.307 75.207 59.375 74.667 L 60.184 68.955 C 61.511 68.415 62.726 67.696 63.828 66.841 L 69.202 69 C 69.697 69.18 70.259 69 70.529 68.505 L 74.847 61.039 C 75.117 60.544 75.005 59.982 74.577 59.667 Z M 54 62.096 C 49.547 62.096 45.904 58.453 45.904 54 C 45.904 49.547 49.547 45.904 54 45.904 C 58.453 45.904 62.096 49.547 62.096 54 C 62.096 58.453 58.453 62.096 54 62.096 Z" style="opacity:1;fill:#ffffff;stop-opacity:1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |