Update QR code scanner screen

8039ac5c0b6bbc065c8d2181bce358c3f79b868c
This commit is contained in:
nikita-kladov
2024-05-15 11:35:17 +03:00
parent 0d23e297cd
commit 1cfb09572d
5 changed files with 50 additions and 19 deletions
+1
View File
@@ -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",
@@ -106,5 +106,9 @@
android:configChanges="orientation|screenSize"
android:theme="@style/AppTheme.NoActionBar"/>
<activity android:name=".utils.QRCaptureActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar.QrScan"/>
</application>
</manifest>
@@ -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 {
@@ -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<DecoratedBarcodeView>(R.id.zxing_barcode_scanner)?.apply {
viewFinder.setLaserVisibility(false)
}
}
}
@@ -128,4 +128,8 @@
<style name="Div.Image.Demo"/>
<style name="AppTheme.NoActionBar.QrScan">
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>