diff --git a/android/src/main/kotlin/ru/yoomoney/sdk/kassa/payments/flutter/YookassaPaymentsFlutterPlugin.kt b/android/src/main/kotlin/ru/yoomoney/sdk/kassa/payments/flutter/YookassaPaymentsFlutterPlugin.kt index 32dc77d..45b1f4b 100644 --- a/android/src/main/kotlin/ru/yoomoney/sdk/kassa/payments/flutter/YookassaPaymentsFlutterPlugin.kt +++ b/android/src/main/kotlin/ru/yoomoney/sdk/kassa/payments/flutter/YookassaPaymentsFlutterPlugin.kt @@ -1,21 +1,16 @@ package ru.yoomoney.sdk.kassa.payments.flutter -import android.graphics.Color; +import android.graphics.Color import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle -import android.widget.Toast import androidx.annotation.NonNull -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.plugins.FlutterPlugin 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.common.PluginRegistry.Registrar import io.flutter.embedding.engine.plugins.activity.ActivityAware import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding import java.io.StringReader @@ -24,7 +19,7 @@ import java.util.Currency import ru.yoomoney.sdk.kassa.payments.checkoutParameters.Amount import ru.yoomoney.sdk.kassa.payments.Checkout import ru.yoomoney.sdk.kassa.payments.ui.color.ColorScheme -import ru.yoomoney.sdk.kassa.payments.checkoutParameters.HostParameters; +import ru.yoomoney.sdk.kassa.payments.checkoutParameters.HostParameters import ru.yoomoney.sdk.kassa.payments.checkoutParameters.GooglePayParameters import ru.yoomoney.sdk.kassa.payments.checkoutParameters.GooglePayCardNetwork import ru.yoomoney.sdk.kassa.payments.checkoutParameters.MockConfiguration @@ -39,7 +34,7 @@ import ru.yoomoney.sdk.kassa.payments.checkoutParameters.UiParameters private const val CANCELED_RESULT = "{\"status\":\"canceled\"}" private const val ERROR_RESULT = "{\"status\":\"error\"}" -class YookassaPaymentsFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, PluginRegistry.ActivityResultListener { +class YookassaPaymentsFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAware { private lateinit var flutterResult: Result private lateinit var channel : MethodChannel @@ -129,7 +124,19 @@ class YookassaPaymentsFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityA activity.startActivityForResult(intent, REQUEST_CODE_TOKENIZE) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean { + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + } + + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + activity = binding.activity + binding.addActivityResultListener { requestCode, resultCode, data -> + handleActivityResult(requestCode, resultCode, data) + } + this.binding = binding + } + + private fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean { if (requestCode == REQUEST_CODE_TOKENIZE) { if (resultCode == Activity.RESULT_CANCELED) { flutterResult.success(CANCELED_RESULT) @@ -142,33 +149,27 @@ class YookassaPaymentsFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityA } else if (requestCode == REQUEST_CODE_CONFIRMATION) { flutterResult.success(resultCode) } - - return false - } - - override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) - } - - override fun onAttachedToActivity(binding: ActivityPluginBinding) { - activity = binding.activity - binding.addActivityResultListener(this) - this.binding = binding + return true } override fun onDetachedFromActivity() { - binding?.removeActivityResultListener(this) + binding?.removeActivityResultListener { requestCode, resultCode, data -> + handleActivityResult(requestCode, resultCode, data) + } binding = null } override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { - this.binding?.removeActivityResultListener(this) this.binding = binding - binding.addActivityResultListener(this) + binding.addActivityResultListener { requestCode, resultCode, data -> + handleActivityResult(requestCode, resultCode, data) + } } override fun onDetachedFromActivityForConfigChanges() { - binding?.removeActivityResultListener(this) + binding?.removeActivityResultListener { requestCode, resultCode, data -> + handleActivityResult(requestCode, resultCode, data) + } binding = null } }