From 1cfb09572dbdbbb907eff19e30d51daed3084689 Mon Sep 17 00:00:00 2001 From: nikita-kladov Date: Wed, 15 May 2024 11:31:42 +0300 Subject: [PATCH] Update QR code scanner screen 8039ac5c0b6bbc065c8d2181bce358c3f79b868c --- .mapping.json | 1 + .../src/main/AndroidManifest.xml | 4 ++ .../yandex/divkit/demo/div/Div2Activity.kt | 44 +++++++++++-------- .../divkit/demo/utils/QRCaptureActivity.kt | 16 +++++++ .../src/main/res/values/styles.xml | 4 ++ 5 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/QRCaptureActivity.kt diff --git a/.mapping.json b/.mapping.json index 9c9c972aa..855390d15 100644 --- a/.mapping.json +++ b/.mapping.json @@ -1647,6 +1647,7 @@ "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/HttpUtil.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/HttpUtil.kt", "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/JsonAssetReader.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/JsonAssetReader.kt", "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/MetricaUtils.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/MetricaUtils.kt", + "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/QRCaptureActivity.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/QRCaptureActivity.kt", "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/Toasts.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/Toasts.kt", "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/Views.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/Views.kt", "client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/VisualAssertionErrorHandler.kt":"divkit/public/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/VisualAssertionErrorHandler.kt", diff --git a/client/android/divkit-demo-app/src/main/AndroidManifest.xml b/client/android/divkit-demo-app/src/main/AndroidManifest.xml index f7b341903..6eb722b79 100644 --- a/client/android/divkit-demo-app/src/main/AndroidManifest.xml +++ b/client/android/divkit-demo-app/src/main/AndroidManifest.xml @@ -106,5 +106,9 @@ android:configChanges="orientation|screenSize" android:theme="@style/AppTheme.NoActionBar"/> + + diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/Div2Activity.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/Div2Activity.kt index 5d49601b4..aaf080581 100644 --- a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/Div2Activity.kt +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/Div2Activity.kt @@ -19,8 +19,8 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.transition.TransitionManager -import com.google.zxing.integration.android.IntentIntegrator -import com.google.zxing.integration.android.IntentResult +import com.journeyapps.barcodescanner.ScanContract +import com.journeyapps.barcodescanner.ScanOptions import com.yandex.div.DivDataTag import com.yandex.div.core.DivDataChangeListener import com.yandex.div.core.DivViewFacade @@ -47,6 +47,7 @@ import com.yandex.divkit.demo.div.editor.list.DivEditorAdapter import com.yandex.divkit.demo.screenshot.DivAssetReader import com.yandex.divkit.demo.ui.SCHEME_DIV_ACTION import com.yandex.divkit.demo.utils.DivkitDemoUriHandler +import com.yandex.divkit.demo.utils.QRCaptureActivity import com.yandex.divkit.demo.utils.lifecycleOwner import com.yandex.divkit.demo.utils.showToast import org.json.JSONObject @@ -65,6 +66,7 @@ const val DIV2_KEY_URL = "key_url" private const val DIV2_TEXT_INPUT_VARIABLE = "div2activity_text" private const val OPEN_FILE_ACTIVITY_REQUEST_CODE = 102 +private const val SCAN_QR_CODE_REQUEST_CODE = 103 class Div2Activity : AppCompatActivity() { private val preferences by lazy { getSharedPreferences("div2", Context.MODE_PRIVATE) } @@ -74,7 +76,7 @@ class Div2Activity : AppCompatActivity() { private lateinit var div: Div2View private lateinit var div2Adapter: DivEditorAdapter - private lateinit var qrScan: IntentIntegrator + private lateinit var qrScanContract: ScanContract private lateinit var variable: Variable.StringVariable private val fileStorage by lazy { DivFileStorage() } @@ -132,8 +134,7 @@ class Div2Activity : AppCompatActivity() { div.layoutParams.width = MATCH_PARENT div.layoutParams.height = MATCH_PARENT - qrScan = IntentIntegrator(this) - qrScan.setOrientationLocked(false) + qrScanContract = ScanContract() bindLink() } @@ -145,24 +146,17 @@ class Div2Activity : AppCompatActivity() { checkInputAndShowIfCorrect() } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - val result: IntentResult = IntentIntegrator.parseActivityResult( - requestCode, - resultCode, - data - ) ?: return super.onActivityResult(requestCode, resultCode, data) + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { OPEN_FILE_ACTIVITY_REQUEST_CODE -> { data?.data?.path?.let { loadDivJsonPath(it) } ?: showToast("No json path data") } - else -> { - result.contents?.let { - variable.setValue(Variable.StringVariable(DIV2_TEXT_INPUT_VARIABLE, result.contents)) - } - if (result.contents.isNullOrEmpty()) { - variable.setValue(Variable.StringVariable(DIV2_TEXT_INPUT_VARIABLE, "sorry, fail =(")) - } + SCAN_QR_CODE_REQUEST_CODE -> { + val result = qrScanContract.parseResult(resultCode, data).contents ?: "sorry, fail =(" + + variable.setValue(Variable.StringVariable(DIV2_TEXT_INPUT_VARIABLE, result)) } } } @@ -182,7 +176,7 @@ class Div2Activity : AppCompatActivity() { when (uri.getQueryParameter(PARAM_ACTION)) { OPEN_FILE -> loadDivJson() - QR_CODE -> qrScan.initiateScan() + QR_CODE -> scanQrCode() PASTE -> pasteFromClipboard() SHOW_RESULT -> checkInputAndShowIfCorrect() else -> return false @@ -258,6 +252,18 @@ class Div2Activity : AppCompatActivity() { } } + private fun scanQrCode() { + val scanOptions = ScanOptions().apply { + setBeepEnabled(false) + setPrompt("") + setDesiredBarcodeFormats(ScanOptions.QR_CODE) + setCaptureActivity(QRCaptureActivity::class.java) + } + val intent = qrScanContract.createIntent(this, scanOptions) + + startActivityForResult(intent, SCAN_QR_CODE_REQUEST_CODE) + } + private fun loadDivJsonPath(path: String) = { try { diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/QRCaptureActivity.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/QRCaptureActivity.kt new file mode 100644 index 000000000..4aa12eedc --- /dev/null +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/utils/QRCaptureActivity.kt @@ -0,0 +1,16 @@ +package com.yandex.divkit.demo.utils + +import android.os.Bundle +import com.google.zxing.client.android.R +import com.journeyapps.barcodescanner.CaptureActivity +import com.journeyapps.barcodescanner.DecoratedBarcodeView + +internal class QRCaptureActivity: CaptureActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + findViewById(R.id.zxing_barcode_scanner)?.apply { + viewFinder.setLaserVisibility(false) + } + } +} diff --git a/client/android/divkit-demo-app/src/main/res/values/styles.xml b/client/android/divkit-demo-app/src/main/res/values/styles.xml index e460ef01e..021a5aa41 100644 --- a/client/android/divkit-demo-app/src/main/res/values/styles.xml +++ b/client/android/divkit-demo-app/src/main/res/values/styles.xml @@ -128,4 +128,8 @@ +