diff --git a/action-core/src/main/java/com/adyen/checkout/action/core/internal/ui/DefaultGenericActionDelegate.kt b/action-core/src/main/java/com/adyen/checkout/action/core/internal/ui/DefaultGenericActionDelegate.kt index 5a19fd0bb4..ebbdd57ed3 100644 --- a/action-core/src/main/java/com/adyen/checkout/action/core/internal/ui/DefaultGenericActionDelegate.kt +++ b/action-core/src/main/java/com/adyen/checkout/action/core/internal/ui/DefaultGenericActionDelegate.kt @@ -196,6 +196,11 @@ internal class DefaultGenericActionDelegate( } override fun setOnRedirectListener(listener: () -> Unit) { + _delegate?.let { delegate -> + if (delegate is RedirectableDelegate) { + delegate.setOnRedirectListener(listener) + } + } onRedirectListener = listener } diff --git a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/DefaultRedirectHandler.kt b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/DefaultRedirectHandler.kt index d225ad10fa..8adeaafddb 100644 --- a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/DefaultRedirectHandler.kt +++ b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/DefaultRedirectHandler.kt @@ -23,11 +23,12 @@ import com.adyen.checkout.core.internal.util.adyenLog import com.adyen.checkout.ui.core.internal.util.ThemeUtil import org.json.JSONException import org.json.JSONObject +import java.lang.ref.WeakReference @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) class DefaultRedirectHandler : RedirectHandler { - private var onRedirectListener: (() -> Unit)? = null + private var onRedirectListener: WeakReference<(() -> Unit)>? = null override fun parseRedirectResult(data: Uri?): JSONObject { adyenLog(AdyenLogLevel.DEBUG) { "parseRedirectResult - $data" } @@ -72,7 +73,7 @@ class DefaultRedirectHandler : RedirectHandler { launchWithCustomTabs(context, uri) || launchBrowser(context, uri) ) { - onRedirectListener?.invoke() + onRedirectListener?.get()?.invoke() return } @@ -194,10 +195,11 @@ class DefaultRedirectHandler : RedirectHandler { } override fun setOnRedirectListener(listener: () -> Unit) { - onRedirectListener = listener + onRedirectListener = WeakReference(listener) } override fun removeOnRedirectListener() { + onRedirectListener?.clear() onRedirectListener = null }