mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
Update QR code scanner screen
8039ac5c0b6bbc065c8d2181bce358c3f79b868c
This commit is contained in:
@@ -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>
|
||||
|
||||
+25
-19
@@ -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 {
|
||||
|
||||
+16
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user