1 package com.airbnb.lottie.samples 2 3 import android.content.Context 4 import android.content.Intent 5 import android.graphics.PointF 6 import android.os.Bundle 7 import android.os.Vibrator 8 import androidx.appcompat.app.AppCompatActivity 9 import com.airbnb.lottie.samples.databinding.QrscanActivityBinding 10 import com.airbnb.lottie.samples.model.CompositionArgs 11 import com.airbnb.lottie.samples.utils.vibrateCompat 12 import com.airbnb.lottie.samples.utils.viewBinding 13 import com.dlazaro66.qrcodereaderview.QRCodeReaderView 14 15 class QRScanActivity : AppCompatActivity(), QRCodeReaderView.OnQRCodeReadListener { 16 private val binding: QrscanActivityBinding by viewBinding() 17 @Suppress("DEPRECATION") <lambda>null18 private val vibrator by lazy { getSystemService(Context.VIBRATOR_SERVICE) as Vibrator } 19 20 // Sometimes the qr code is read twice in rapid succession. This prevents it from being read 21 // multiple times. 22 private var hasReadQrCode = false 23 onCreatenull24 override fun onCreate(savedInstanceState: Bundle?) { 25 super.onCreate(savedInstanceState) 26 27 binding.qrView.setQRDecodingEnabled(true) 28 binding.qrView.setAutofocusInterval(2000L) 29 binding.qrView.setBackCamera() 30 binding.qrView.setOnQRCodeReadListener(this) 31 binding.qrView.setOnClickListener { binding.qrView.forceAutoFocus() } 32 } 33 onResumenull34 override fun onResume() { 35 super.onResume() 36 binding.qrView.startCamera() 37 hasReadQrCode = false 38 } 39 onPausenull40 override fun onPause() { 41 super.onPause() 42 binding.qrView.stopCamera() 43 } 44 onQRCodeReadnull45 override fun onQRCodeRead(url: String, pointFS: Array<PointF>) { 46 if (hasReadQrCode) return 47 hasReadQrCode = true 48 vibrator.vibrateCompat(100) 49 finish() 50 startActivity(PlayerActivity.intent(this, CompositionArgs(url = url))) 51 } 52 53 companion object { intentnull54 fun intent(context: Context) = Intent(context, QRScanActivity::class.java) 55 } 56 }