Fix QR scanning issues.

fork-5.53.8
Cody Henthorne 2022-08-10 11:20:50 -04:00 zatwierdzone przez Alex Hart
rodzic 019025ab8a
commit eefd7bd37a
5 zmienionych plików z 56 dodań i 2 usunięć

Wyświetl plik

@ -11,4 +11,7 @@ dependencies {
implementation libs.rxjava3.rxjava implementation libs.rxjava3.rxjava
implementation libs.rxjava3.rxandroid implementation libs.rxjava3.rxandroid
implementation libs.rxjava3.rxkotlin implementation libs.rxjava3.rxkotlin
implementation libs.google.zxing.android.integration
implementation libs.google.zxing.core
} }

Wyświetl plik

@ -1,14 +1,23 @@
package org.signal.qrtest package org.signal.qrtest
import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatImageView
import com.google.zxing.PlanarYUVLuminanceSource
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.kotlin.subscribeBy
import org.signal.core.util.ThreadUtil
import org.signal.qr.ImageProxyLuminanceSource
import org.signal.qr.QrProcessor
import org.signal.qr.QrScannerView import org.signal.qr.QrScannerView
class QrMainActivity : AppCompatActivity() { class QrMainActivity : AppCompatActivity() {
@SuppressLint("NewApi", "SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
@ -20,9 +29,32 @@ class QrMainActivity : AppCompatActivity() {
val scanner = findViewById<QrScannerView>(R.id.scanner) val scanner = findViewById<QrScannerView>(R.id.scanner)
scanner.start(this) scanner.start(this)
val qrText = findViewById<TextView>(R.id.text_qr_data)
scanner.qrData scanner.qrData
.distinctUntilChanged() .distinctUntilChanged()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribeBy { Toast.makeText(this, it, Toast.LENGTH_SHORT).show() } .subscribeBy {
qrText.text = it
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
}
val sourceView = findViewById<AppCompatImageView>(R.id.scanner_source)
val qrSize = findViewById<TextView>(R.id.text_size)
QrProcessor.listener = { source ->
val bitmap = when (source) {
is ImageProxyLuminanceSource -> Bitmap.createBitmap(source.render(), 0, source.width, source.width, source.height, Bitmap.Config.ARGB_8888)
is PlanarYUVLuminanceSource -> Bitmap.createBitmap(source.renderThumbnail(), 0, source.thumbnailWidth, source.thumbnailWidth, source.thumbnailHeight, Bitmap.Config.ARGB_8888)
else -> null
}
if (bitmap != null) {
ThreadUtil.runOnMain {
qrSize.text = "${bitmap.width} x ${bitmap.height}"
sourceView.setImageBitmap(bitmap)
}
}
}
} }
} }

Wyświetl plik

@ -10,11 +10,26 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:orientation="vertical"> android:orientation="vertical">
<TextView
android:id="@+id/text_qr_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/text_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<org.signal.qr.QrScannerView <org.signal.qr.QrScannerView
android:id="@+id/scanner" android:id="@+id/scanner"
android:layout_width="240dp" android:layout_width="240dp"
android:layout_height="240dp" /> android:layout_height="240dp" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/scanner_source"
android:layout_width="240dp"
android:layout_height="240dp" />
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>

Wyświetl plik

@ -45,6 +45,8 @@ class QrProcessor {
previousHeight = source.height previousHeight = source.height
} }
listener?.invoke(source)
val bitmap = BinaryBitmap(HybridBinarizer(source)) val bitmap = BinaryBitmap(HybridBinarizer(source))
val result: Result? = reader.decode(bitmap, mapOf(DecodeHintType.TRY_HARDER to true, DecodeHintType.CHARACTER_SET to "ISO-8859-1")) val result: Result? = reader.decode(bitmap, mapOf(DecodeHintType.TRY_HARDER to true, DecodeHintType.CHARACTER_SET to "ISO-8859-1"))
@ -65,5 +67,7 @@ class QrProcessor {
companion object { companion object {
private val TAG = Log.tag(QrProcessor::class.java) private val TAG = Log.tag(QrProcessor::class.java)
var listener: ((LuminanceSource) -> Unit)? = null
} }
} }

Wyświetl plik

@ -74,7 +74,7 @@ internal class ScannerView21 constructor(
val preview = Preview.Builder().build() val preview = Preview.Builder().build()
val imageAnalysis = ImageAnalysis.Builder() val imageAnalysis = ImageAnalysis.Builder()
.setTargetResolution(Size(1920, 1080)) .setTargetResolution(Size(1280, 960))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build() .build()