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 @@
+
+