This commit is contained in:
Mikhail Dolmatov 2025-03-21 21:10:18 +05:00
parent 3a9355aff4
commit 424a96c3fc

View File

@ -1,21 +1,16 @@
package ru.yoomoney.sdk.kassa.payments.flutter package ru.yoomoney.sdk.kassa.payments.flutter
import android.graphics.Color; import android.graphics.Color
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.widget.Toast
import androidx.annotation.NonNull 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.embedding.engine.plugins.FlutterPlugin
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.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result 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.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import java.io.StringReader 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.checkoutParameters.Amount
import ru.yoomoney.sdk.kassa.payments.Checkout import ru.yoomoney.sdk.kassa.payments.Checkout
import ru.yoomoney.sdk.kassa.payments.ui.color.ColorScheme 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.GooglePayParameters
import ru.yoomoney.sdk.kassa.payments.checkoutParameters.GooglePayCardNetwork import ru.yoomoney.sdk.kassa.payments.checkoutParameters.GooglePayCardNetwork
import ru.yoomoney.sdk.kassa.payments.checkoutParameters.MockConfiguration 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 CANCELED_RESULT = "{\"status\":\"canceled\"}"
private const val ERROR_RESULT = "{\"status\":\"error\"}" 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 flutterResult: Result
private lateinit var channel : MethodChannel private lateinit var channel : MethodChannel
@ -129,7 +124,19 @@ class YookassaPaymentsFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityA
activity.startActivityForResult(intent, REQUEST_CODE_TOKENIZE) 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 (requestCode == REQUEST_CODE_TOKENIZE) {
if (resultCode == Activity.RESULT_CANCELED) { if (resultCode == Activity.RESULT_CANCELED) {
flutterResult.success(CANCELED_RESULT) flutterResult.success(CANCELED_RESULT)
@ -142,33 +149,27 @@ class YookassaPaymentsFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityA
} else if (requestCode == REQUEST_CODE_CONFIRMATION) { } else if (requestCode == REQUEST_CODE_CONFIRMATION) {
flutterResult.success(resultCode) flutterResult.success(resultCode)
} }
return true
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
} }
override fun onDetachedFromActivity() { override fun onDetachedFromActivity() {
binding?.removeActivityResultListener(this) binding?.removeActivityResultListener { requestCode, resultCode, data ->
handleActivityResult(requestCode, resultCode, data)
}
binding = null binding = null
} }
override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
this.binding?.removeActivityResultListener(this)
this.binding = binding this.binding = binding
binding.addActivityResultListener(this) binding.addActivityResultListener { requestCode, resultCode, data ->
handleActivityResult(requestCode, resultCode, data)
}
} }
override fun onDetachedFromActivityForConfigChanges() { override fun onDetachedFromActivityForConfigChanges() {
binding?.removeActivityResultListener(this) binding?.removeActivityResultListener { requestCode, resultCode, data ->
handleActivityResult(requestCode, resultCode, data)
}
binding = null binding = null
} }
} }