Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PayTo - Stored payment method #2027

Open
wants to merge 5 commits into
base: chore/payto_component_state_translations
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion components-core/api/components-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -2763,13 +2763,16 @@ public final class com/adyen/checkout/components/core/paymentmethod/PayToPayment
public static final field Companion Lcom/adyen/checkout/components/core/paymentmethod/PayToPaymentMethod$Companion;
public static final field PAYMENT_METHOD_TYPE Ljava/lang/String;
public static final field SERIALIZER Lcom/adyen/checkout/core/internal/data/model/ModelObject$Serializer;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun describeContents ()I
public fun getCheckoutAttemptId ()Ljava/lang/String;
public final fun getShopperAccountIdentifier ()Ljava/lang/String;
public final fun getStoredPaymentMethodId ()Ljava/lang/String;
public fun getType ()Ljava/lang/String;
public fun setCheckoutAttemptId (Ljava/lang/String;)V
public final fun setShopperAccountIdentifier (Ljava/lang/String;)V
public final fun setStoredPaymentMethodId (Ljava/lang/String;)V
public fun setType (Ljava/lang/String;)V
public fun writeToParcel (Landroid/os/Parcel;I)V
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@ import org.json.JSONObject
class PayToPaymentMethod(
override var type: String?,
override var checkoutAttemptId: String?,
var shopperAccountIdentifier: String?,
var shopperAccountIdentifier: String? = null,
var storedPaymentMethodId: String? = null,
) : PaymentMethodDetails() {

companion object {

const val PAYMENT_METHOD_TYPE = PaymentMethodTypes.PAY_TO
private const val SHOPPER_ACCOUNT_IDENTIFIER = "shopperAccountIdentifier"
private const val STORED_PAYMENT_METHOD_ID = "storedPaymentMethodId"

@JvmField
val SERIALIZER: Serializer<PayToPaymentMethod> = object : Serializer<PayToPaymentMethod> {
Expand All @@ -35,6 +37,7 @@ class PayToPaymentMethod(
putOpt(TYPE, modelObject.type)
putOpt(CHECKOUT_ATTEMPT_ID, modelObject.checkoutAttemptId)
putOpt(SHOPPER_ACCOUNT_IDENTIFIER, modelObject.shopperAccountIdentifier)
putOpt(STORED_PAYMENT_METHOD_ID, modelObject.storedPaymentMethodId)
}
} catch (e: JSONException) {
throw ModelSerializationException(PayToPaymentMethod::class.java, e)
Expand All @@ -46,6 +49,7 @@ class PayToPaymentMethod(
type = jsonObject.getStringOrNull(TYPE),
checkoutAttemptId = jsonObject.getStringOrNull(CHECKOUT_ATTEMPT_ID),
shopperAccountIdentifier = jsonObject.getStringOrNull(SHOPPER_ACCOUNT_IDENTIFIER),
storedPaymentMethodId = jsonObject.getStringOrNull(STORED_PAYMENT_METHOD_ID),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,16 @@ internal fun getComponentFor(
)
}

checkCompileOnly { PayToComponent.PROVIDER.isPaymentMethodSupported(storedPaymentMethod) } -> {
PayToComponentProvider(dropInOverrideParams, analyticsManager).get(
fragment = fragment,
storedPaymentMethod = storedPaymentMethod,
checkoutConfiguration = checkoutConfiguration,
callback = componentCallback as ComponentCallback<PayToComponentState>,
key = storedPaymentMethod.id,
)
}

checkCompileOnly { TwintComponent.PROVIDER.isPaymentMethodSupported(storedPaymentMethod) } -> {
TwintComponentProvider(dropInOverrideParams, analyticsManager).get(
fragment = fragment,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@ internal data class StoredPayByBankUSModel(
val environment: Environment,
) : StoredPaymentMethodModel()

internal data class StoredPayToModel(
override val id: String,
override val imageId: String,
override val isRemovable: Boolean,
val name: String,
val description: String?,
// We need the environment to load the logo
val environment: Environment,
) : StoredPaymentMethodModel()

internal data class GenericStoredModel(
override val id: String,
override val imageId: String,
Expand Down Expand Up @@ -103,5 +113,15 @@ internal fun StoredPaymentMethodModel.mapToStoredPaymentMethodItem(context: Cont
popUpMessage = context.getString(R.string.last_four_digits_format, lastFour),
)
}

is StoredPayToModel -> {
StoredPaymentMethodItem(
title = name,
subtitle = description,
imageId = imageId,
environment = environment,
popUpMessage = name,
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ import com.adyen.checkout.dropin.internal.ui.model.GenericStoredModel
import com.adyen.checkout.dropin.internal.ui.model.StoredACHDirectDebitModel
import com.adyen.checkout.dropin.internal.ui.model.StoredCardModel
import com.adyen.checkout.dropin.internal.ui.model.StoredPayByBankUSModel
import com.adyen.checkout.dropin.internal.ui.model.StoredPayToModel
import com.adyen.checkout.dropin.internal.ui.model.StoredPaymentMethodModel

@Suppress("LongMethod")
internal fun StoredPaymentMethod.mapStoredModel(
isRemovingEnabled: Boolean,
environment: Environment
Expand Down Expand Up @@ -66,6 +68,17 @@ internal fun StoredPaymentMethod.mapStoredModel(
)
}

PaymentMethodTypes.PAY_TO -> {
StoredPayToModel(
id = id.orEmpty(),
imageId = type.orEmpty(),
isRemovable = isRemovingEnabled,
name = label.orEmpty(),
description = name,
environment = environment,
)
}

else -> GenericStoredModel(
id = id.orEmpty(),
imageId = type.orEmpty(),
Expand Down
Loading