From 4ea3823aa4b45bee1ea8c7efb5eace43d9572388 Mon Sep 17 00:00:00 2001 From: Oscar Spruit Date: Wed, 12 Feb 2025 17:43:58 +0100 Subject: [PATCH] Display address lookup data on 2 lines COAND-1069 --- .../card/internal/ui/view/CardView.kt | 2 +- .../internal/ui/model/AddressOutputData.kt | 18 ++++++-- .../ui/view/AddressLookupOptionsAdapter.kt | 42 ++++++++++--------- .../ui/model/AddressOutputDataTest.kt | 9 ++-- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/card/src/main/java/com/adyen/checkout/card/internal/ui/view/CardView.kt b/card/src/main/java/com/adyen/checkout/card/internal/ui/view/CardView.kt index 44c030ca53..efe4139aef 100644 --- a/card/src/main/java/com/adyen/checkout/card/internal/ui/view/CardView.kt +++ b/card/src/main/java/com/adyen/checkout/card/internal/ui/view/CardView.kt @@ -726,7 +726,7 @@ class CardView @JvmOverloads constructor( } private fun updateAddressLookupInputText(addressOutputData: AddressOutputData) { - binding.autoCompleteTextViewAddressLookup.setText(addressOutputData.toString()) + binding.autoCompleteTextViewAddressLookup.setText(addressOutputData.formatted()) } private fun updateAddressHint(addressFormUIState: AddressFormUIState, isOptional: Boolean) { diff --git a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputData.kt b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputData.kt index 2f1b1f7bcc..b6f20b3f0f 100644 --- a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputData.kt +++ b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputData.kt @@ -25,6 +25,7 @@ data class AddressOutputData( val countryOptions: List, val stateOptions: List ) : OutputData { + override val isValid: Boolean get() = postalCode.validation.isValid() && street.validation.isValid() && @@ -34,15 +35,26 @@ data class AddressOutputData( city.validation.isValid() && country.validation.isValid() - override fun toString(): String { - return listOf( + fun formatted(): String { + val line1 = arrayOf( street.value, houseNumberOrName.value, apartmentSuite.value, + ) + .filter { it.isNotBlank() } + .joinToString(" ") + + val line2 = arrayOf( postalCode.value, city.value, stateOrProvince.value, country.value, - ).filter { it.isNotBlank() }.joinToString(" ") + ) + .filter { it.isNotBlank() } + .joinToString(", ") + + return arrayOf(line1, line2) + .filter { it.isNotBlank() } + .joinToString("\n") } } diff --git a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AddressLookupOptionsAdapter.kt b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AddressLookupOptionsAdapter.kt index 766035eba8..98edd60648 100644 --- a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AddressLookupOptionsAdapter.kt +++ b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AddressLookupOptionsAdapter.kt @@ -62,27 +62,29 @@ data class LookupOption( val lookupAddress: LookupAddress, val isLoading: Boolean = false ) { - override fun toString(): String { - return listOf( - lookupAddress.address.street, - lookupAddress.address.houseNumberOrName, - lookupAddress.address.apartmentSuite, - lookupAddress.address.postalCode, - lookupAddress.address.city, - lookupAddress.address.stateOrProvince, - lookupAddress.address.country, - ).filter { !it.isNullOrBlank() }.joinToString(" ") + + val title: String = formatTitle() + + private fun formatTitle(): String = with(lookupAddress.address) { + arrayOf( + street, + houseNumberOrName, + apartmentSuite.orEmpty(), + ) + .filter { it.isNotBlank() } + .joinToString(" ") } - val title - get() = lookupAddress.address.street.ifBlank { - toString() - } + val subtitle = formatSubtitle() - val subtitle - get() = if (lookupAddress.address.street.isBlank()) { - "" - } else { - toString() - } + private fun formatSubtitle() = with(lookupAddress.address) { + arrayOf( + postalCode, + city, + stateOrProvince, + country, + ) + .filter { it.isNotBlank() } + .joinToString(", ") + } } diff --git a/ui-core/src/test/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputDataTest.kt b/ui-core/src/test/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputDataTest.kt index 1cc74057ea..da92e387e9 100644 --- a/ui-core/src/test/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputDataTest.kt +++ b/ui-core/src/test/java/com/adyen/checkout/ui/core/internal/ui/model/AddressOutputDataTest.kt @@ -13,9 +13,10 @@ import com.adyen.checkout.components.core.internal.ui.model.Validation import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -class AddressOutputDataTest { +internal class AddressOutputDataTest { + @Test - fun addressOutputDataToString() { + fun addressOutputDataFormatted() { val addressOutputData = AddressOutputData( postalCode = FieldState("postalCode", Validation.Valid), houseNumberOrName = FieldState("houseNumberOrName", Validation.Valid), @@ -29,7 +30,7 @@ class AddressOutputDataTest { stateOptions = emptyList(), ) - val expected = "street houseNumberOrName apartmentSuite postalCode city stateOrProvince country" - assertEquals(expected, addressOutputData.toString()) + val expected = "street houseNumberOrName apartmentSuite\npostalCode, city, stateOrProvince, country" + assertEquals(expected, addressOutputData.formatted()) } }