From 5d69344dccefe2b2476de2af502e5d4b136a2250 Mon Sep 17 00:00:00 2001 From: Julian Steenbakker Date: Mon, 14 Dec 2020 15:56:13 +0100 Subject: [PATCH] Added support for embedding V1. --- .../qr/flutterqr/FlutterQrPlugin.kt | 52 ++++++++----------- .../net/touchcapture/qr/flutterqr/Shared.kt | 1 - 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt index 035431e..ca59f08 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt @@ -1,61 +1,55 @@ package net.touchcapture.qr.flutterqr import android.Manifest -import android.app.Activity -import android.content.Context import android.content.pm.PackageManager import android.os.Build import androidx.annotation.NonNull import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.activity.ActivityAware import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.BinaryMessenger import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result import io.flutter.plugin.common.PluginRegistry +import io.flutter.plugin.platform.PlatformViewRegistry class FlutterQrPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { var cameraPermissionContinuation: Runnable? = null var requestingPermission = false -// private var activity: Activity? = null -// /** Plugin registration embedding v1 */ -// companion object { -// @JvmStatic -// fun registerWith(registrar: Registrar) { -// FlutterQrPlugin().onAttachedToEngine(registrar) -// } -// } + /** Plugin registration embedding v1 */ + companion object { + @JvmStatic + fun registerWith(registrar: PluginRegistry.Registrar) { + FlutterQrPlugin().onAttachedToV1(registrar) + } + } + + private fun onAttachedToV1(registrar: PluginRegistry.Registrar) { + Shared.activity = registrar.activity() + registrar.addRequestPermissionsResultListener(CameraRequestPermissionsListener()) + checkAndRequestPermission(null) + onAttachedToEngines(registrar.platformViewRegistry(), registrar.messenger()) + } /** Plugin registration embedding v2 */ override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - onAttachedToEngines(flutterPluginBinding) + onAttachedToEngines(flutterPluginBinding.platformViewRegistry, flutterPluginBinding.binaryMessenger) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { } - // TODO: Fix v1 embedding for Flutter < 1.12 support /** Plugin start for both embedding v1 & v2 */ - private fun onAttachedToEngines(binding: FlutterPlugin.FlutterPluginBinding) { - binding.platformViewRegistry + private fun onAttachedToEngines(platformViewRegistry: PlatformViewRegistry, messenger: BinaryMessenger) { + platformViewRegistry .registerViewFactory( - "net.touchcapture.qr.flutterqr/qrview", QRViewFactory(binding.binaryMessenger)) + "net.touchcapture.qr.flutterqr/qrview", QRViewFactory(messenger)) } -// private fun onAttachedToEngine(registrar: Registrar) { -// activity = registrar.activity() -// registrar.addRequestPermissionsResultListener(CameraRequestPermissionsListener()) -// checkAndRequestPermission(null) -// registrar -// .platformViewRegistry() -// .registerViewFactory( -// "net.touchcapture.qr.flutterqr/qrview", QRViewFactory(registrar)) -// } - override fun onMethodCall(call: MethodCall, result: Result) { when (call.method) { "checkAndRequestPermission" -> checkAndRequestPermission(result) @@ -63,24 +57,20 @@ class FlutterQrPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { } override fun onAttachedToActivity(activityPluginBinding: ActivityPluginBinding) { - Shared.activityPluginBinding = activityPluginBinding Shared.activity = activityPluginBinding.activity activityPluginBinding.addRequestPermissionsResultListener(CameraRequestPermissionsListener()) checkAndRequestPermission(null) } override fun onDetachedFromActivityForConfigChanges() { - Shared.activityPluginBinding = null Shared.activity = null } override fun onReattachedToActivityForConfigChanges(activityPluginBinding: ActivityPluginBinding) { - Shared.activityPluginBinding = activityPluginBinding Shared.activity = activityPluginBinding.activity } override fun onDetachedFromActivity() { - Shared.activityPluginBinding = null Shared.activity = null } @@ -101,7 +91,7 @@ class FlutterQrPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { private fun checkAndRequestPermission(result: Result?) { if (cameraPermissionContinuation != null) { - result?.error("cameraPermission", "Camera permission request ongoing", null); + result?.error("cameraPermission", "Camera permission request ongoing", null) } cameraPermissionContinuation = Runnable { diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt index 5957725..7823e01 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt @@ -5,6 +5,5 @@ import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding object Shared { - var activityPluginBinding: ActivityPluginBinding? = null var activity: Activity? = null } \ No newline at end of file