From eefd7bd37a4eb648892f6f956a9f2c2543b7ea60 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 10 Aug 2022 11:20:50 -0400 Subject: [PATCH] Fix QR scanning issues. --- qr/app/build.gradle | 3 ++ .../java/org/signal/qrtest/QrMainActivity.kt | 34 ++++++++++++++++++- qr/app/src/main/res/layout/activity_main.xml | 15 ++++++++ .../main/java/org/signal/qr/QrProcessor.kt | 4 +++ .../main/java/org/signal/qr/ScannerView21.kt | 2 +- 5 files changed, 56 insertions(+), 2 deletions(-) diff --git a/qr/app/build.gradle b/qr/app/build.gradle index 2652aaf47..09c599873 100644 --- a/qr/app/build.gradle +++ b/qr/app/build.gradle @@ -11,4 +11,7 @@ dependencies { implementation libs.rxjava3.rxjava implementation libs.rxjava3.rxandroid implementation libs.rxjava3.rxkotlin + + implementation libs.google.zxing.android.integration + implementation libs.google.zxing.core } \ No newline at end of file diff --git a/qr/app/src/main/java/org/signal/qrtest/QrMainActivity.kt b/qr/app/src/main/java/org/signal/qrtest/QrMainActivity.kt index 72d91c176..ed8074ce7 100644 --- a/qr/app/src/main/java/org/signal/qrtest/QrMainActivity.kt +++ b/qr/app/src/main/java/org/signal/qrtest/QrMainActivity.kt @@ -1,14 +1,23 @@ package org.signal.qrtest +import android.annotation.SuppressLint +import android.graphics.Bitmap import android.os.Build import android.os.Bundle +import android.widget.TextView import android.widget.Toast 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.kotlin.subscribeBy +import org.signal.core.util.ThreadUtil +import org.signal.qr.ImageProxyLuminanceSource +import org.signal.qr.QrProcessor import org.signal.qr.QrScannerView class QrMainActivity : AppCompatActivity() { + @SuppressLint("NewApi", "SetTextI18n") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -20,9 +29,32 @@ class QrMainActivity : AppCompatActivity() { val scanner = findViewById(R.id.scanner) scanner.start(this) + val qrText = findViewById(R.id.text_qr_data) + scanner.qrData .distinctUntilChanged() .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(R.id.scanner_source) + val qrSize = findViewById(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) + } + } + } } } diff --git a/qr/app/src/main/res/layout/activity_main.xml b/qr/app/src/main/res/layout/activity_main.xml index d37c2a1bc..2e3d0d27e 100644 --- a/qr/app/src/main/res/layout/activity_main.xml +++ b/qr/app/src/main/res/layout/activity_main.xml @@ -10,11 +10,26 @@ android:gravity="center_horizontal" android:orientation="vertical"> + + + + + + \ No newline at end of file diff --git a/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt b/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt index da1e982df..03f87a707 100644 --- a/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt +++ b/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt @@ -45,6 +45,8 @@ class QrProcessor { previousHeight = source.height } + listener?.invoke(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")) @@ -65,5 +67,7 @@ class QrProcessor { companion object { private val TAG = Log.tag(QrProcessor::class.java) + + var listener: ((LuminanceSource) -> Unit)? = null } } diff --git a/qr/lib/src/main/java/org/signal/qr/ScannerView21.kt b/qr/lib/src/main/java/org/signal/qr/ScannerView21.kt index 9de2cc570..28441fa14 100644 --- a/qr/lib/src/main/java/org/signal/qr/ScannerView21.kt +++ b/qr/lib/src/main/java/org/signal/qr/ScannerView21.kt @@ -74,7 +74,7 @@ internal class ScannerView21 constructor( val preview = Preview.Builder().build() val imageAnalysis = ImageAnalysis.Builder() - .setTargetResolution(Size(1920, 1080)) + .setTargetResolution(Size(1280, 960)) .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .build()