MyIdPlugin.kt 3.08 KB
Newer Older
Javohir Savriy's avatar
Javohir Savriy committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package uz.aigroup.myid

import android.content.Context
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.Registrar
import uz.myid.android.sdk.capture.MyIdClient

class MyIdPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {

    private lateinit var myIdSdk: MyIdSdk
    private lateinit var activityListener: MyIdSdkActivityListener
    private lateinit var methodChannel: MethodChannel
    private lateinit var applicationContext: Context
    private lateinit var pluginBinding: ActivityPluginBinding

    private val myIdClient = MyIdClient()

    override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
        onAttachedToEngine(
            flutterPluginBinding.applicationContext,
            flutterPluginBinding.binaryMessenger
        )
    }

    companion object {
        @JvmStatic
        fun registerWith(registrar: Registrar) {
            val instance = MyIdPlugin()
            instance.onAttachedToEngine(registrar.context(), registrar.messenger())
            instance.myIdSdk.setActivity(registrar.activity())
            registrar.addActivityResultListener(instance.activityListener)
        }
    }

    override fun onMethodCall(call: MethodCall, result: Result) {
        if (call.method == "startSdk") {
            val config = call.arguments as HashMap<*, *>
            @Suppress("UNCHECKED_CAST")
            myIdSdk.start(config["config"] as? HashMap<String, Any?>, result)
        } else {
            result.notImplemented()
        }
    }

    private fun onAttachedToEngine(context: Context, messenger: BinaryMessenger) {
        applicationContext = context
        methodChannel = MethodChannel(messenger, "myid")
        methodChannel.setMethodCallHandler(this)
        activityListener = MyIdSdkActivityListener(myIdClient)
        myIdSdk = MyIdSdk(myIdClient, activityListener)
    }

    override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
        methodChannel.setMethodCallHandler(null)
    }

    override fun onDetachedFromActivity() {
        myIdSdk.setActivity(null)
        pluginBinding.removeActivityResultListener(activityListener)
    }

    override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
        onReattachedToActivityForConfigChanges(binding)
    }

    override fun onAttachedToActivity(binding: ActivityPluginBinding) {
        myIdSdk.setActivity(binding.activity)
        pluginBinding = binding
        pluginBinding.addActivityResultListener(activityListener)
    }

    override fun onDetachedFromActivityForConfigChanges() {
        onDetachedFromActivityForConfigChanges()
    }
}