Просмотр исходного кода

Improve and fix bugs

flutter-beta
Leon 7 лет назад
committed by unknown
Родитель
Сommit
486b740ec1
1 измененных файлов: 54 добавлений и 27 удалений
  1. +54
    -27
      android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt

+ 54
- 27
android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt Просмотреть файл

@@ -5,6 +5,7 @@ import android.app.Activity
import android.app.Application import android.app.Application
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
@@ -12,7 +13,6 @@ import com.google.zxing.ResultPoint
import com.journeyapps.barcodescanner.BarcodeCallback import com.journeyapps.barcodescanner.BarcodeCallback
import com.journeyapps.barcodescanner.BarcodeResult import com.journeyapps.barcodescanner.BarcodeResult
import com.journeyapps.barcodescanner.BarcodeView import com.journeyapps.barcodescanner.BarcodeView
import com.journeyapps.barcodescanner.DefaultDecoderFactory
import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry import io.flutter.plugin.common.PluginRegistry
@@ -24,57 +24,84 @@ class QRView(context: Context, private val registrar: PluginRegistry.Registrar,
companion object { companion object {
const val CAMERA_REQUEST_ID = 513469796 const val CAMERA_REQUEST_ID = 513469796
} }
var barcodeView = BarcodeView(context)

var barcodeView: BarcodeView? = null
private val activity = registrar.activity() private val activity = registrar.activity()
var cameraPermissionContinuation: Runnable? = null var cameraPermissionContinuation: Runnable? = null
var requestingPermission = false var requestingPermission = false
val channel: MethodChannel

init { init {
registrar.addRequestPermissionsResultListener(CameraRequestPermissionsListener()) registrar.addRequestPermissionsResultListener(CameraRequestPermissionsListener())

val channel = MethodChannel(registrar.messenger(), "net.touchcapture.qr.flutterqr/qrview_$id")
channel = MethodChannel(registrar.messenger(), "net.touchcapture.qr.flutterqr/qrview_$id")
channel.setMethodCallHandler(this) channel.setMethodCallHandler(this)
checkAndRequestPermission(null)
registrar.activity().application.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityPaused(p0: Activity?) {
if (p0 == registrar.activity()) {
barcodeView?.pause()
}
}


barcodeView.decodeContinuous(
object : BarcodeCallback {
override fun barcodeResult(result: BarcodeResult) {
channel.invokeMethod("onRecognizeQR",result.text)
}
override fun possibleResultPoints(resultPoints: List<ResultPoint>) {}
override fun onActivityResumed(p0: Activity?) {
if (p0 == registrar.activity()) {
barcodeView?.resume()
} }
)
barcodeView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
override fun onViewDetachedFromWindow(p0: View?) {
barcodeView.pause()
} }


override fun onViewAttachedToWindow(p0: View?) {
barcodeView.resume()
override fun onActivityStarted(p0: Activity?) {
}

override fun onActivityDestroyed(p0: Activity?) {
}

override fun onActivitySaveInstanceState(p0: Activity?, p1: Bundle?) {
}

override fun onActivityStopped(p0: Activity?) {
}

override fun onActivityCreated(p0: Activity?, p1: Bundle?) {
} }
}) })
} }




private fun init(){
if(!hasCameraPermission()) {
checkAndRequestPermission(null)
} else {
barcodeView.resume()
}
override fun getView(): View {
return initBarCodeView()?.apply {
resume()
}!!
} }


override fun getView(): View {
return barcodeView.apply {
init()
private fun initBarCodeView(): BarcodeView? {
if (barcodeView == null) {
barcodeView = createBarCodeView()
} }
return barcodeView
}

private fun createBarCodeView(): BarcodeView? {
val barcode = BarcodeView(registrar.activity())
barcode.decodeContinuous(
object : BarcodeCallback {
override fun barcodeResult(result: BarcodeResult) {
channel.invokeMethod("onRecognizeQR", result.text)
}

override fun possibleResultPoints(resultPoints: List<ResultPoint>) {}
}
)
return barcode
} }


override fun dispose() { override fun dispose() {
barcodeView.pause()
barcodeView?.pause()
barcodeView = null
} }


private inner class CameraRequestPermissionsListener : PluginRegistry.RequestPermissionsResultListener { private inner class CameraRequestPermissionsListener : PluginRegistry.RequestPermissionsResultListener {
override fun onRequestPermissionsResult(id: Int, permissions: Array<String>, grantResults: IntArray): Boolean { override fun onRequestPermissionsResult(id: Int, permissions: Array<String>, grantResults: IntArray): Boolean {
if (id == CAMERA_REQUEST_ID) {
if (id == CAMERA_REQUEST_ID && grantResults[0] == PERMISSION_GRANTED) {
cameraPermissionContinuation?.run() cameraPermissionContinuation?.run()
return true return true
} }


Загрузка…
Отмена
Сохранить