Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9dbb78ce67 | ||
|
|
47c252ab18 | ||
|
|
10e02b3164 | ||
|
|
7e82dbe730 | ||
|
|
e91c30f7c2 | ||
|
|
30a36e7e07 | ||
|
|
5f91fe2f02 | ||
|
|
cab8d6c038 | ||
|
|
4aac5dc61b | ||
|
|
fbbc20d327 | ||
|
|
5595b68ff4 |
@@ -1,5 +1,13 @@
|
||||
# Change Log
|
||||
|
||||
## 1.46.2
|
||||
* Fix saving external files on Android Q and newer
|
||||
|
||||
## 1.46.1
|
||||
* Use cropping limiter settings for image picking too
|
||||
* Remove extra link on result screen
|
||||
* Update Turkish translation
|
||||
|
||||
## 1.46.0
|
||||
* Support deep links
|
||||
* Support "A:" in WIFI codes
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ android {
|
||||
minSdkVersion 9
|
||||
targetSdkVersion sdk_version
|
||||
|
||||
versionCode 87
|
||||
versionName '1.46.0'
|
||||
versionCode 89
|
||||
versionName '1.46.2'
|
||||
|
||||
// It's recommended to set this value to the lowest API level
|
||||
// able to provide all the functionality.
|
||||
|
||||
@@ -155,7 +155,7 @@ class CameraActivity : AppCompatActivity() {
|
||||
resetPreProcessor()
|
||||
fallbackBuffer = null
|
||||
saveZoom()
|
||||
saveCropHandlePos()
|
||||
detectorView.saveCropHandlePos()
|
||||
rs.destroy()
|
||||
}
|
||||
|
||||
@@ -489,22 +489,7 @@ class CameraActivity : AppCompatActivity() {
|
||||
recreatePreprocessor = true
|
||||
}
|
||||
detectorView.setPaddingFromWindowInsets()
|
||||
restoreCropHandlePos()
|
||||
}
|
||||
|
||||
private fun saveCropHandlePos() {
|
||||
val pos = detectorView.getCropHandlePos()
|
||||
prefs.cropHandleX = pos.x
|
||||
prefs.cropHandleY = pos.y
|
||||
prefs.cropHandleOrientation = detectorView.currentOrientation
|
||||
}
|
||||
|
||||
private fun restoreCropHandlePos() {
|
||||
detectorView.setCropHandlePos(
|
||||
prefs.cropHandleX,
|
||||
prefs.cropHandleY,
|
||||
prefs.cropHandleOrientation
|
||||
)
|
||||
detectorView.restoreCropHandlePos()
|
||||
}
|
||||
|
||||
private fun updateFlashFab(unavailable: Boolean) {
|
||||
|
||||
@@ -74,11 +74,7 @@ class PickActivity : AppCompatActivity() {
|
||||
colorSystemAndToolBars(this@PickActivity)
|
||||
}
|
||||
|
||||
val bitmap = fixTransparency(
|
||||
rs,
|
||||
getBitmapFromIntent()
|
||||
)
|
||||
|
||||
val bitmap = fixTransparency(rs, getBitmapFromIntent())
|
||||
if (bitmap == null) {
|
||||
applicationContext.toast(R.string.error_no_content)
|
||||
finish()
|
||||
@@ -97,6 +93,7 @@ class PickActivity : AppCompatActivity() {
|
||||
scanWithinBounds(bitmap)
|
||||
}
|
||||
detectorView.setPaddingFromWindowInsets()
|
||||
detectorView.restoreCropHandlePos()
|
||||
|
||||
findViewById(R.id.scan).setOnClickListener {
|
||||
showResult()
|
||||
@@ -159,6 +156,7 @@ class PickActivity : AppCompatActivity() {
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
detectorView.saveCropHandlePos()
|
||||
rs.destroy()
|
||||
}
|
||||
|
||||
@@ -194,12 +192,13 @@ class PickActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun showResult() {
|
||||
result?.let {
|
||||
showResult(this, it, vibrator)
|
||||
val r = result
|
||||
if (r != null) {
|
||||
showResult(this, r, vibrator)
|
||||
finish()
|
||||
return
|
||||
} else {
|
||||
applicationContext.toast(R.string.no_barcode_found)
|
||||
}
|
||||
applicationContext.toast(R.string.no_barcode_found)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ class BarcodeFragment : Fragment() {
|
||||
@SuppressLint("InflateParams")
|
||||
private fun askForFileNameAndSave(fileType: FileType) {
|
||||
val ac = activity ?: return
|
||||
// write permission is only required before Android Q
|
||||
// Write permission is only required before Android Q.
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q &&
|
||||
!hasWritePermission(ac) { askForFileNameAndSave(fileType) }
|
||||
) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.support.design.widget.FloatingActionButton
|
||||
import android.support.v4.app.Fragment
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.*
|
||||
import android.widget.EditText
|
||||
import android.widget.TableLayout
|
||||
@@ -38,7 +37,6 @@ class DecodeFragment : Fragment() {
|
||||
private lateinit var dataView: TableLayout
|
||||
private lateinit var metaView: TableLayout
|
||||
private lateinit var hexView: TextView
|
||||
private lateinit var linksView: TextView
|
||||
private lateinit var format: String
|
||||
private lateinit var fab: FloatingActionButton
|
||||
|
||||
@@ -86,7 +84,6 @@ class DecodeFragment : Fragment() {
|
||||
format = scan.format
|
||||
|
||||
contentView = view.findViewById(R.id.content)
|
||||
linksView = view.findViewById(R.id.links)
|
||||
fab = view.findViewById(R.id.open)
|
||||
|
||||
if (!isBinary) {
|
||||
@@ -118,8 +115,6 @@ class DecodeFragment : Fragment() {
|
||||
if (prefs.openImmediately) {
|
||||
executeAction(content.toByteArray())
|
||||
}
|
||||
linksView.text = getLinks(inputContent).joinToString("\n")
|
||||
linksView.movementMethod = LinkMovementMethod.getInstance()
|
||||
} else {
|
||||
contentView.setText(R.string.binary_data)
|
||||
contentView.isEnabled = false
|
||||
@@ -349,7 +344,10 @@ class DecodeFragment : Fragment() {
|
||||
|
||||
private fun askForFileNameAndSave(raw: ByteArray) {
|
||||
val ac = activity ?: return
|
||||
if (!hasWritePermission(ac) { askForFileNameAndSave(raw) }) {
|
||||
// Write permission is only required before Android Q.
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q &&
|
||||
!hasWritePermission(ac) { askForFileNameAndSave(raw) }
|
||||
) {
|
||||
return
|
||||
}
|
||||
scope.launch(Dispatchers.Main) {
|
||||
|
||||
@@ -364,7 +364,10 @@ class HistoryFragment : Fragment() {
|
||||
scope.launch {
|
||||
val ac = activity ?: return@launch
|
||||
progressView.useVisibility {
|
||||
if (!hasWritePermission(ac) { askToExportToFile() }) {
|
||||
// Write permission is only required before Android Q.
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q &&
|
||||
!hasWritePermission(ac) { askToExportToFile() }
|
||||
) {
|
||||
return@useVisibility
|
||||
}
|
||||
val options = context.resources.getStringArray(
|
||||
|
||||
@@ -21,12 +21,12 @@ import kotlin.math.roundToInt
|
||||
|
||||
class DetectorView : View {
|
||||
val coordinates = FloatArray(32)
|
||||
val currentOrientation = resources.configuration.orientation
|
||||
val roi = Rect()
|
||||
|
||||
var onRoiChange: (() -> Unit)? = null
|
||||
var onRoiChanged: (() -> Unit)? = null
|
||||
|
||||
private val currentOrientation = resources.configuration.orientation
|
||||
private val invalidateRunnable: Runnable = Runnable {
|
||||
coordinatesLast = 0
|
||||
invalidate()
|
||||
@@ -78,7 +78,28 @@ class DetectorView : View {
|
||||
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) :
|
||||
super(context, attrs, defStyleAttr)
|
||||
|
||||
fun setCropHandlePos(x: Int, y: Int, orientation: Int) {
|
||||
fun saveCropHandlePos() {
|
||||
val pos = getCropHandlePos()
|
||||
prefs.cropHandleX = pos.x
|
||||
prefs.cropHandleY = pos.y
|
||||
prefs.cropHandleOrientation = currentOrientation
|
||||
}
|
||||
|
||||
private fun getCropHandlePos() = if (handleActive) {
|
||||
handlePos
|
||||
} else {
|
||||
Point(-1, -1)
|
||||
}
|
||||
|
||||
fun restoreCropHandlePos() {
|
||||
setCropHandlePos(
|
||||
prefs.cropHandleX,
|
||||
prefs.cropHandleY,
|
||||
prefs.cropHandleOrientation
|
||||
)
|
||||
}
|
||||
|
||||
private fun setCropHandlePos(x: Int, y: Int, orientation: Int) {
|
||||
if (orientation == currentOrientation) {
|
||||
handlePos.set(x, y)
|
||||
} else {
|
||||
@@ -89,14 +110,8 @@ class DetectorView : View {
|
||||
}
|
||||
}
|
||||
|
||||
fun getCropHandlePos() = if (handleActive) {
|
||||
handlePos
|
||||
} else {
|
||||
Point(-1, -1)
|
||||
}
|
||||
|
||||
fun update(numberOfResultPoints: Int) {
|
||||
coordinatesLast = numberOfResultPoints * 2
|
||||
fun update(numberOfCoordinates: Int) {
|
||||
coordinatesLast = numberOfCoordinates
|
||||
invalidate()
|
||||
removeCallbacks(invalidateRunnable)
|
||||
postDelayed(invalidateRunnable, 500)
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/data"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginRight="16dp" />
|
||||
android:layout_marginRight="16dp"/>
|
||||
<TextView
|
||||
android:id="@+id/hex"
|
||||
android:layout_width="match_parent"
|
||||
@@ -65,20 +65,9 @@
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:textSize="12sp"
|
||||
android:typeface="monospace"
|
||||
tools:text="54 65 73 74 20 51 52 20 Test QR\n43 6F 64 65 Code" />
|
||||
<TextView
|
||||
android:id="@+id/links"
|
||||
android:autoLink="web"
|
||||
android:lineHeight="24sp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/hex"
|
||||
android:layout_marginHorizontal="16dp"
|
||||
android:textSize="12sp"
|
||||
android:typeface="monospace"
|
||||
tools:text="@tools:sample/lorem/random" />
|
||||
tools:text="54 65 73 74 20 51 52 20 Test QR\n43 6F 64 65 Code"/>
|
||||
</RelativeLayout>
|
||||
</de.markusfisch.android.binaryeye.widget.ConfinedScrollView>
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
@@ -89,6 +78,6 @@
|
||||
style="@style/FAB"
|
||||
android:id="@+id/open"
|
||||
android:contentDescription="@string/open_url"
|
||||
android:src="@drawable/ic_action_open" />
|
||||
android:src="@drawable/ic_action_open"/>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</FrameLayout>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<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="camera_error">Kameraya erişilemiyor, lütfen yeniden deneyin</string>
|
||||
<string name="scan_code">Kod tara</string>
|
||||
<string name="compose_barcode">Barkod yarat</string>
|
||||
<string name="decode_barcode">Barkod çöz</string>
|
||||
@@ -43,13 +43,13 @@
|
||||
<string name="info">Bilgi</string>
|
||||
<string name="switch_camera">Kamerayı değiştir</string>
|
||||
<string name="bulk_mode">Sürekli tara</string>
|
||||
<string name="bulk_mode_summary">Always start scanning continuously.</string>
|
||||
<string name="bulk_mode_delay">Delay between continuous scans</string>
|
||||
<string name="quarter_second">A quarter second</string>
|
||||
<string name="half_second">Half a second</string>
|
||||
<string name="a_second">One second</string>
|
||||
<string name="two_seconds">Two seconds</string>
|
||||
<string name="five_seconds">Five seconds</string>
|
||||
<string name="bulk_mode_summary">Her zaman sürekli taramaya başla.</string>
|
||||
<string name="bulk_mode_delay">Sürekli taramalar arasındaki gecikme</string>
|
||||
<string name="quarter_second">Çeyrek saniye</string>
|
||||
<string name="half_second">Yarım saniye</string>
|
||||
<string name="a_second">Bir saniye</string>
|
||||
<string name="two_seconds">İki saniye</string>
|
||||
<string name="five_seconds">Beş saniye</string>
|
||||
<string name="history">Geçmiş</string>
|
||||
<string name="preferences">Tercihler</string>
|
||||
<string name="scan_category">Tarama</string>
|
||||
@@ -59,15 +59,15 @@
|
||||
<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="barcode_formats">Barcode formats</string>
|
||||
<string name="barcode_formats">Barkod biçimleri</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="show_toast_in_bulk_mode">Show data in continuous mode</string>
|
||||
<string name="show_toast_in_bulk_mode_summary">Briefly show the scanned data when scanning continuously.</string>
|
||||
<string name="try_harder_summary">Okuması zor barkodlar için bu seçeneği etkinleştirin. Performansı etkileyecektir.</string>
|
||||
<string name="show_toast_in_bulk_mode">Sürekli kipte verileri göster</string>
|
||||
<string name="show_toast_in_bulk_mode_summary">Sürekli tarama yaparken taranan verileri kısaca göster.</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>
|
||||
@@ -82,16 +82,16 @@
|
||||
<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="default_search_engine">Open unknown data in</string>
|
||||
<string name="always_ask">Always ask</string>
|
||||
<string name="close_automatically">Kopyala/Paylaş\'tan sonra geri dön</string>
|
||||
<string name="close_automatically_summary">Okunan içeriği kopyaladıktan veya paylaştıktan sonra kendiliğinden tarama ekranına dön.</string>
|
||||
<string name="default_search_engine">Bilinmeyen verileri şurada aç</string>
|
||||
<string name="always_ask">Her zaman sor</string>
|
||||
<string name="open_with_url">URL\'si olan bilinmeyen veriyi aç</string>
|
||||
<string name="clear_network_suggestions">Clear network suggestions</string>
|
||||
<string name="clear_network_suggestions_summary">Remove all of the network suggestions that were previously provided by this app.</string>
|
||||
<string name="really_remove_all_networks">Really remove all networks?</string>
|
||||
<string name="clear_network_suggestions_success">Network suggestions cleared</string>
|
||||
<string name="clear_network_suggestions_nothing_to_remove">Nothing to remove</string>
|
||||
<string name="clear_network_suggestions">Ağ önerilerini temizle</string>
|
||||
<string name="clear_network_suggestions_summary">Bu uygulama tarafından daha önce sağlanan tüm ağ önerilerini kaldır.</string>
|
||||
<string name="really_remove_all_networks">Tüm ağlar gerçekten kaldırılsın mı?</string>
|
||||
<string name="clear_network_suggestions_success">Ağ önerileri temizlendi</string>
|
||||
<string name="clear_network_suggestions_nothing_to_remove">Kaldırılacak bir şey yok</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>
|
||||
@@ -99,7 +99,7 @@
|
||||
<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="test_url">URL\'yi sına</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>
|
||||
@@ -134,7 +134,7 @@
|
||||
<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_as">Ne olarak dışa aktarılsın?</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>
|
||||
@@ -147,14 +147,14 @@
|
||||
<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>
|
||||
<string name="entry_type">Type</string>
|
||||
<string name="wifi_network">Wi-Fi network</string>
|
||||
<string name="wifi_ssid">Name</string>
|
||||
<string name="wifi_type">Authentication type</string>
|
||||
<string name="wifi_password">Password</string>
|
||||
<string name="wifi_hidden">Hidden network</string>
|
||||
<string name="wifi_eap">EAP method</string>
|
||||
<string name="wifi_anonymous_identity">Anonymous identity</string>
|
||||
<string name="wifi_identity">Identity</string>
|
||||
<string name="wifi_phase2">Phase 2 method</string>
|
||||
<string name="entry_type">Tür</string>
|
||||
<string name="wifi_network">Wi-Fi ağı</string>
|
||||
<string name="wifi_ssid">Ad</string>
|
||||
<string name="wifi_type">Kimlik doğrulama türü</string>
|
||||
<string name="wifi_password">Parola</string>
|
||||
<string name="wifi_hidden">Gizli ağ</string>
|
||||
<string name="wifi_eap">EAP yöntemi</string>
|
||||
<string name="wifi_anonymous_identity">Anonim kimlik</string>
|
||||
<string name="wifi_identity">Kimlik</string>
|
||||
<string name="wifi_phase2">2. aşama yöntemi</string>
|
||||
</resources>
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
buildscript {
|
||||
ext {
|
||||
kotlin_version = '1.5.30'
|
||||
tools_version = '7.0.3'
|
||||
kotlin_version = '1.6.0'
|
||||
tools_version = '7.0.4'
|
||||
build_tools_version = '30.0.2'
|
||||
sdk_version = 30
|
||||
support_version = '25.3.1'
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
* Support deep links
|
||||
* Support "A:" in WIFI codes
|
||||
* Allow multiple query arguments in custom URL
|
||||
* Add Wi-Fi info data section
|
||||
* Add Vietnamese translation
|
||||
* Update Brazilian Portuguese translation
|
||||
* Update Hungarian translation
|
||||
* Update Ukrainian translation
|
||||
* Update Russian translation
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
* Use cropping limiter settings for image picking too
|
||||
* Remove extra link on result screen
|
||||
* Update Turkish translation
|
||||
|
||||
Reference in New Issue
Block a user