Skip to content

Commit

Permalink
Improve handling of n/a and null values
Browse files Browse the repository at this point in the history
COAND-999
jreij committed Oct 18, 2024
1 parent 054e610 commit 25a1adc
Showing 7 changed files with 56 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -31,8 +31,14 @@ data class CreditCardData(
fun toDomain() = CreditCard(
number = number,
expiryDate = expiryDate,
securityCode = securityCode,
issuingCountry = issuingCountry,
securityCode = securityCode.takeIfNotNA(),
issuingCountry = issuingCountry.takeIfNotNA(),
is3DS = is3DS,
)
}

private fun String.takeIfNotNA(): String? {
return takeIf { it != NA_STRING }
}

private const val NA_STRING = "n/a"
Original file line number Diff line number Diff line change
@@ -11,12 +11,12 @@ data class CreditCardGroup(
data class CreditCard(
val number: String,
val expiryDate: String,
val securityCode: String,
val issuingCountry: String,
val securityCode: String?,
val issuingCountry: String?,
val is3DS: Boolean,
val isFavorite: Boolean = false,
@DrawableRes val icon: Int? = null,
) {

fun toSearchString(): String = "$number $expiryDate $securityCode $issuingCountry"
fun toSearchString(): String = "$number $expiryDate ${securityCode.orEmpty()} ${issuingCountry.orEmpty()}"
}
39 changes: 31 additions & 8 deletions app/src/main/java/com/adyen/testcards/ui/CreditCard.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.adyen.testcards.ui

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyListScope
@@ -19,6 +21,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
@@ -87,24 +90,29 @@ internal fun CreditCard(
) {
Column {
Text(text = card.number)
Spacer(modifier = Modifier.padding(4.dp))
Row {
Spacer(modifier = Modifier.height(8.dp))
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Text(text = card.expiryDate, style = MaterialTheme.typography.labelSmall)
Spacer(modifier = Modifier.padding(8.dp))
Text(text = card.securityCode, style = MaterialTheme.typography.labelSmall)
Spacer(modifier = Modifier.padding(8.dp))
Text(text = card.issuingCountry, style = MaterialTheme.typography.labelSmall)
Text(
text = card.securityCode ?: stringResource(R.string.cvc_not_applicable),
style = MaterialTheme.typography.labelSmall,
)
if (card.issuingCountry != null) {
Text(
text = card.issuingCountry,
style = MaterialTheme.typography.labelSmall,
)
}

if (card.is3DS) {
Spacer(modifier = Modifier.padding(8.dp))
Text(text = "3DS", style = MaterialTheme.typography.labelSmall)
}
}
}
}
}

@Preview(showBackground = true)
@Preview(showBackground = true, name = "All params are set")
@Composable
private fun CreditCardPreview() {
val card = CreditCard(
@@ -118,3 +126,18 @@ private fun CreditCardPreview() {
)
CreditCard(card = card, onFavoriteClick = { _, _ -> })
}

@Preview(showBackground = true, name = "All optional params are null")
@Composable
private fun CreditCardMinimalPreview() {
val card = CreditCard(
number = "1234 1234 1234 1234",
expiryDate = "03/30",
securityCode = null,
issuingCountry = null,
is3DS = false,
isFavorite = false,
icon = null,
)
CreditCard(card = card, onFavoriteClick = { _, _ -> })
}
7 changes: 4 additions & 3 deletions app/src/main/java/com/adyen/testcards/ui/GiftCard.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.adyen.testcards.ui

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
@@ -68,10 +70,9 @@ internal fun GiftCard(
) {
Column {
Text(text = giftCard.number)
Spacer(modifier = Modifier.padding(4.dp))
Row {
Spacer(modifier = Modifier.height(8.dp))
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Text(text = giftCard.type, style = MaterialTheme.typography.labelSmall)
Spacer(modifier = Modifier.padding(8.dp))
Text(text = giftCard.securityCode, style = MaterialTheme.typography.labelSmall)
}
}
7 changes: 4 additions & 3 deletions app/src/main/java/com/adyen/testcards/ui/IBAN.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.adyen.testcards.ui

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
@@ -68,10 +70,9 @@ internal fun IBAN(
) {
Column {
Text(text = iban.iban)
Spacer(modifier = Modifier.padding(4.dp))
Row {
Spacer(modifier = Modifier.height(8.dp))
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Text(text = iban.holderName, style = MaterialTheme.typography.labelSmall)
Spacer(modifier = Modifier.padding(8.dp))
Text(text = iban.issuingCountry, style = MaterialTheme.typography.labelSmall)
}
}
7 changes: 4 additions & 3 deletions app/src/main/java/com/adyen/testcards/ui/UsernamePassword.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.adyen.testcards.ui

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
@@ -68,10 +70,9 @@ internal fun UsernamePassword(
) {
Column {
Text(text = data.username)
Spacer(modifier = Modifier.padding(4.dp))
Row {
Spacer(modifier = Modifier.height(8.dp))
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Text(text = data.type, style = MaterialTheme.typography.labelSmall)
Spacer(modifier = Modifier.padding(8.dp))
Text(text = data.password, style = MaterialTheme.typography.labelSmall)
}
}
3 changes: 2 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<resources>
<string name="app_name">Adyen Test Cards</string>
<string name="title_activity_main">MainActivity</string>
</resources>
<string name="cvc_not_applicable">No CVC</string>
</resources>

0 comments on commit 25a1adc

Please sign in to comment.