@@ -16,11 +16,9 @@ import androidx.lifecycle.repeatOnLifecycle
1616import com.processout.sdk.R
1717import com.processout.sdk.api.dispatcher.POEventDispatcher
1818import com.processout.sdk.api.model.response.POAlternativePaymentMethodResponse
19- import com.processout.sdk.core.POUnit
20- import com.processout.sdk.core.ProcessOutActivityResult
21- import com.processout.sdk.core.ProcessOutResult
19+ import com.processout.sdk.core.*
20+ import com.processout.sdk.core.POFailure.GenericCode.mobileHeadlessModeNotSupported
2221import com.processout.sdk.core.logger.POLogger
23- import com.processout.sdk.core.toActivityResult
2422import com.processout.sdk.ui.apm.POAlternativePaymentMethodCustomTabLauncher
2523import com.processout.sdk.ui.napm.NativeAlternativePaymentCompletion.Failure
2624import com.processout.sdk.ui.napm.NativeAlternativePaymentCompletion.Success
@@ -281,7 +279,26 @@ class PONativeAlternativePaymentLauncher private constructor(
281279 viewModel.completion.collect { completion ->
282280 when (completion) {
283281 Success -> complete(result = ProcessOutResult .Success (POUnit ))
284- is Failure -> complete(result = completion.failure)
282+ is Failure -> {
283+ val isHeadlessModeNotSupported = when (val code = completion.failure.code) {
284+ is POFailure .Code .Generic -> code.genericCode == mobileHeadlessModeNotSupported
285+ else -> false
286+ }
287+ if (isHeadlessModeNotSupported) {
288+ val configuration = viewModel.configuration
289+ viewModel.reset()
290+ launcher.launch(
291+ input = configuration.copy(
292+ redirect = configuration.redirect?.copy(
293+ enableHeadlessMode = false
294+ )
295+ ),
296+ options = activityOptions
297+ )
298+ } else {
299+ complete(result = completion.failure)
300+ }
301+ }
285302 else -> {}
286303 }
287304 }
0 commit comments