Fix QRCode scanner
This commit is contained in:
@@ -62,8 +62,8 @@ class QRScanActivity : AbstractActivity<ActivityQrScanBinding>() {
|
|||||||
} else {
|
} else {
|
||||||
setResult(RESULT_CANCELED)
|
setResult(RESULT_CANCELED)
|
||||||
finish()
|
finish()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private lateinit var imageAnalysis: ImageAnalysis
|
private lateinit var imageAnalysis: ImageAnalysis
|
||||||
private lateinit var imageAnalyzer: ImageAnalysis.Analyzer
|
private lateinit var imageAnalyzer: ImageAnalysis.Analyzer
|
||||||
@@ -75,10 +75,21 @@ class QRScanActivity : AbstractActivity<ActivityQrScanBinding>() {
|
|||||||
}
|
}
|
||||||
private val onFailure: (Exception) -> Unit = {
|
private val onFailure: (Exception) -> Unit = {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
errorDialogBuilder(it).show()
|
resetAnalyzer()
|
||||||
|
errorDialogBuilder("MLKit error: ${it.localizedMessage}").show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private val vendorAnalyzer = Vendor.createQRCodeAnalyzer(onSuccess, onFailure)
|
private val vendorAnalyzer = Vendor.createQRCodeAnalyzer(onSuccess, onFailure)
|
||||||
|
private var useVendorAnalyzer = vendorAnalyzer != null
|
||||||
|
private fun resetAnalyzer() {
|
||||||
|
if (useVendorAnalyzer) {
|
||||||
|
useVendorAnalyzer = false
|
||||||
|
imageAnalysis.clearAnalyzer()
|
||||||
|
imageAnalyzer = ZxingQRCodeAnalyzer(onSuccess, onFailure)
|
||||||
|
imageAnalysis.setAnalyzer(analysisExecutor, imageAnalyzer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private lateinit var cameraProvider: ProcessCameraProvider
|
private lateinit var cameraProvider: ProcessCameraProvider
|
||||||
private lateinit var cameraPreview: Preview
|
private lateinit var cameraPreview: Preview
|
||||||
private lateinit var camera: Camera
|
private lateinit var camera: Camera
|
||||||
@@ -146,11 +157,19 @@ class QRScanActivity : AbstractActivity<ActivityQrScanBinding>() {
|
|||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
|
||||||
|
if (!useVendorAnalyzer) {
|
||||||
|
menu!!.findItem(R.id.action_use_vendor_analyzer).also {
|
||||||
|
it.isEnabled = false
|
||||||
|
it.isChecked = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.qr_scan_menu, menu)
|
menuInflater.inflate(R.menu.qr_scan_menu, menu)
|
||||||
if (vendorAnalyzer == null) {
|
if (useVendorAnalyzer) {
|
||||||
menu.findItem(R.id.action_use_vendor_analyzer).isEnabled = false
|
|
||||||
} else {
|
|
||||||
menu.findItem(R.id.action_use_vendor_analyzer).isChecked = true
|
menu.findItem(R.id.action_use_vendor_analyzer).isChecked = true
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -29,7 +29,9 @@ class MLKitQRCodeAnalyzer(
|
|||||||
override fun analyze(image: ImageProxy) {
|
override fun analyze(image: ImageProxy) {
|
||||||
if (image.image == null) return
|
if (image.image == null) return
|
||||||
|
|
||||||
if (failureOccurred && System.currentTimeMillis() - failureTimestamp < 1000L) {
|
val nowMills = System.currentTimeMillis()
|
||||||
|
if (failureOccurred && nowMills - failureTimestamp < 5000L) {
|
||||||
|
failureTimestamp = nowMills
|
||||||
Log.d("MLKitQRCodeAnalyzer", "throttled analysis since error occurred in previous pass")
|
Log.d("MLKitQRCodeAnalyzer", "throttled analysis since error occurred in previous pass")
|
||||||
image.close()
|
image.close()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '8.7.0' apply false
|
id 'com.android.application' version '8.7.1' apply false
|
||||||
id 'com.android.library' version '8.7.0' apply false
|
id 'com.android.library' version '8.7.1' apply false
|
||||||
id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
|
id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
|
||||||
id 'com.google.devtools.ksp' version '1.9.23-1.0.20' apply false
|
id 'com.google.devtools.ksp' version '1.9.23-1.0.20' apply false
|
||||||
id 'com.github.triplet.play' version '3.8.4' apply false
|
id 'com.github.triplet.play' version '3.8.4' apply false
|
||||||
|
|||||||
Reference in New Issue
Block a user