From f90d1bbe11a5e075c23d76bd8cc0154d48caed2e Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Thu, 18 Dec 2025 16:03:26 +0200 Subject: [PATCH 1/8] AGP '8.13.2' --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 49a4706a..e1b21495 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension buildscript { ext { - androidGradlePluginVersion = '8.13.1' + androidGradlePluginVersion = '8.13.2' kotlinVersion = '2.1.20' kspVersion = '2.1.20-1.0.32' dokkaVersion = '1.9.20' From 245fa32250b5f7153fd91565edf0d53c5e5167e6 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Thu, 18 Dec 2025 17:59:26 +0200 Subject: [PATCH 2/8] Keep all class names from obfuscation for telemetry logs --- sdk/consumer-rules.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/consumer-rules.pro b/sdk/consumer-rules.pro index e69de29b..d1ed4061 100644 --- a/sdk/consumer-rules.pro +++ b/sdk/consumer-rules.pro @@ -0,0 +1 @@ +-keepnames class com.processout.sdk.** From 507c05a65181e028d669346cf72ef142fb043845 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Thu, 18 Dec 2025 18:00:14 +0200 Subject: [PATCH 3/8] Cleanup proguard-rules.pro of example app --- example/proguard-rules.pro | 2 -- 1 file changed, 2 deletions(-) diff --git a/example/proguard-rules.pro b/example/proguard-rules.pro index e163f008..f1b42451 100644 --- a/example/proguard-rules.pro +++ b/example/proguard-rules.pro @@ -19,5 +19,3 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile - --keep class com.processout.sdk.api.model.request.POAllGatewayConfigurationsRequest$Filter From 4cff7feedf62e8fdcdbbfe986439caf078aa81cb Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Thu, 18 Dec 2025 18:07:15 +0200 Subject: [PATCH 4/8] Open 'moshi-adapters' api --- sdk/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/build.gradle b/sdk/build.gradle index b74915dc..0b199d01 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -117,7 +117,7 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" implementation "com.squareup.retrofit2:converter-moshi:$retrofitVersion" api "com.squareup.moshi:moshi:$moshiVersion" - implementation "com.squareup.moshi:moshi-adapters:$moshiVersion" + api "com.squareup.moshi:moshi-adapters:$moshiVersion" implementation "com.squareup.okhttp3:okhttp:$okhttpVersion" implementation "com.squareup.okhttp3:logging-interceptor:$okhttpVersion" implementation "com.squareup.okio:okio:$okioVersion" From 6ab9bc3f7335eced8a2cff224bc6a76372f3f63f Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Thu, 18 Dec 2025 18:15:56 +0200 Subject: [PATCH 5/8] Added error code "processout-mobile.generic.app-process-killed" --- sdk/src/main/kotlin/com/processout/sdk/core/POFailure.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/src/main/kotlin/com/processout/sdk/core/POFailure.kt b/sdk/src/main/kotlin/com/processout/sdk/core/POFailure.kt index a0d7279e..3230f938 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/core/POFailure.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/core/POFailure.kt @@ -207,6 +207,7 @@ class POFailure private constructor() { @Suppress("EnumEntryName") enum class GenericCode(val rawValue: String) : Parcelable { mobile("processout-mobile.generic.error"), + mobileAppProcessKilled("processout-mobile.generic.app-process-killed"), cardExceededLimits("card.exceeded-limits"), cardFailedCvc("card.failed-cvc"), cardInvalidCvc("card.invalid-cvc"), From 0627ef0a204e15801735822e2433305c66f3c3d1 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 19 Dec 2025 13:16:57 +0200 Subject: [PATCH 6/8] Update .gitignore --- .idea/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.idea/.gitignore b/.idea/.gitignore index 31cd16df..a803d87b 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -4,4 +4,5 @@ /deploymentTargetDropDown.xml /runConfigurations.xml /deviceManager.xml +/swift-toolchain.xml /other.xml From 4431133fd783cdfc2c4b30ab51ed79be0a828740 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 19 Dec 2025 13:47:29 +0200 Subject: [PATCH 7/8] Return error code 'mobileAppProcessKilled' from all activity contracts when result is not provided --- .../PONativeAlternativePaymentMethodActivityContract.kt | 9 +++++---- .../sdk/ui/card/scanner/CardScannerActivityContract.kt | 9 +++++---- .../tokenization/CardTokenizationActivityContract.kt | 9 +++++---- .../sdk/ui/card/update/CardUpdateActivityContract.kt | 9 +++++---- .../sdk/ui/checkout/DynamicCheckoutActivityContract.kt | 9 +++++---- .../ui/napm/NativeAlternativePaymentActivityContract.kt | 9 +++++---- .../SavedPaymentMethodsActivityContract.kt | 9 +++++---- 7 files changed, 35 insertions(+), 28 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/PONativeAlternativePaymentMethodActivityContract.kt b/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/PONativeAlternativePaymentMethodActivityContract.kt index 1b42999b..3ca5bf1b 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/PONativeAlternativePaymentMethodActivityContract.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/PONativeAlternativePaymentMethodActivityContract.kt @@ -4,7 +4,8 @@ import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract import com.processout.sdk.BuildConfig -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.logger.POLogger class PONativeAlternativePaymentMethodActivityContract : ActivityResultContract @@ -29,8 +30,8 @@ class PONativeAlternativePaymentMethodActivityContract : ActivityResultContract intent?.setExtrasClassLoader(PONativeAlternativePaymentMethodResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: PONativeAlternativePaymentMethodResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/scanner/CardScannerActivityContract.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/scanner/CardScannerActivityContract.kt index 33ccea4a..3219f163 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/scanner/CardScannerActivityContract.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/scanner/CardScannerActivityContract.kt @@ -3,7 +3,8 @@ package com.processout.sdk.ui.card.scanner import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.core.logger.POLogger import com.processout.sdk.ui.BuildConfig @@ -31,8 +32,8 @@ internal class CardScannerActivityContract : ActivityResultContract intent?.setExtrasClassLoader(ProcessOutActivityResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: ProcessOutActivityResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationActivityContract.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationActivityContract.kt index e822aeba..8269896d 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationActivityContract.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationActivityContract.kt @@ -4,7 +4,8 @@ import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract import com.processout.sdk.api.model.response.POCard -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.core.logger.POLogger import com.processout.sdk.ui.BuildConfig @@ -31,8 +32,8 @@ internal class CardTokenizationActivityContract : ActivityResultContract intent?.setExtrasClassLoader(ProcessOutActivityResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: ProcessOutActivityResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateActivityContract.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateActivityContract.kt index 0e47f2e9..6a12878f 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateActivityContract.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateActivityContract.kt @@ -4,7 +4,8 @@ import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract import com.processout.sdk.api.model.response.POCard -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.core.logger.POLogger import com.processout.sdk.ui.BuildConfig @@ -31,8 +32,8 @@ internal class CardUpdateActivityContract : ActivityResultContract intent?.setExtrasClassLoader(ProcessOutActivityResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: ProcessOutActivityResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutActivityContract.kt b/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutActivityContract.kt index 33107429..04911064 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutActivityContract.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/checkout/DynamicCheckoutActivityContract.kt @@ -3,7 +3,8 @@ package com.processout.sdk.ui.checkout import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.POUnit import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.core.logger.POLogger @@ -31,8 +32,8 @@ internal class DynamicCheckoutActivityContract : ActivityResultContract intent?.setExtrasClassLoader(ProcessOutActivityResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: ProcessOutActivityResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentActivityContract.kt b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentActivityContract.kt index 61ca5c09..3d408aee 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentActivityContract.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentActivityContract.kt @@ -3,7 +3,8 @@ package com.processout.sdk.ui.napm import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.POUnit import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.core.logger.POLogger @@ -31,8 +32,8 @@ internal class NativeAlternativePaymentActivityContract : ActivityResultContract intent?.setExtrasClassLoader(ProcessOutActivityResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: ProcessOutActivityResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/savedpaymentmethods/SavedPaymentMethodsActivityContract.kt b/ui/src/main/kotlin/com/processout/sdk/ui/savedpaymentmethods/SavedPaymentMethodsActivityContract.kt index baff8afb..a446531c 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/savedpaymentmethods/SavedPaymentMethodsActivityContract.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/savedpaymentmethods/SavedPaymentMethodsActivityContract.kt @@ -3,7 +3,8 @@ package com.processout.sdk.ui.savedpaymentmethods import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract -import com.processout.sdk.core.POFailure +import com.processout.sdk.core.POFailure.Code.Generic +import com.processout.sdk.core.POFailure.GenericCode import com.processout.sdk.core.POUnit import com.processout.sdk.core.ProcessOutActivityResult import com.processout.sdk.core.logger.POLogger @@ -32,8 +33,8 @@ internal class SavedPaymentMethodsActivityContract : ActivityResultContract intent?.setExtrasClassLoader(ProcessOutActivityResult::class.java.classLoader) return intent?.getParcelableExtra(EXTRA_RESULT) ?: ProcessOutActivityResult.Failure( - code = POFailure.Code.Internal(), - message = "Activity result was not provided." - ).also { POLogger.error("%s", it) } + code = Generic(GenericCode.mobileAppProcessKilled), + message = "App process was killed." + ).also { POLogger.warn("%s", it) } } } From 32ccd05af496c544993f941a93ed9953071f429c Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 19 Dec 2025 14:02:42 +0200 Subject: [PATCH 8/8] Logs --- .../sdk/ui/apm/POAlternativePaymentMethodCustomTabLauncher.kt | 2 +- .../sdk/ui/web/WebAuthorizationActivityResultDispatcher.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/ui/apm/POAlternativePaymentMethodCustomTabLauncher.kt b/sdk/src/main/kotlin/com/processout/sdk/ui/apm/POAlternativePaymentMethodCustomTabLauncher.kt index 736b5a35..7d5607ac 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/ui/apm/POAlternativePaymentMethodCustomTabLauncher.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/ui/apm/POAlternativePaymentMethodCustomTabLauncher.kt @@ -214,7 +214,7 @@ class POAlternativePaymentMethodCustomTabLauncher private constructor( @Deprecated("Used in other deprecated functions.") private val activityResultCallback = ActivityResultCallback> { result -> if (!delegateCache.isCached()) { - POLogger.error("Cannot provide result. Delegate is not cached. Possibly process was killed.") + POLogger.warn("App process was killed during deprecated APM authorization.") return@ActivityResultCallback } result diff --git a/sdk/src/main/kotlin/com/processout/sdk/ui/web/WebAuthorizationActivityResultDispatcher.kt b/sdk/src/main/kotlin/com/processout/sdk/ui/web/WebAuthorizationActivityResultDispatcher.kt index 1cb6936c..cc5ccd3d 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/ui/web/WebAuthorizationActivityResultDispatcher.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/ui/web/WebAuthorizationActivityResultDispatcher.kt @@ -14,7 +14,7 @@ internal object WebAuthorizationActivityResultDispatcher : override fun dispatch(result: ProcessOutActivityResult) { if (!isCached()) { - POLogger.error("Cannot provide result. Delegate is not cached. Possibly process was killed.") + POLogger.warn("App process was killed during web authorization.") return } result