From b46091c9cac54f99bf7392b8e28874c7773f7e50 Mon Sep 17 00:00:00 2001 From: Rafael Date: Wed, 26 Feb 2025 17:49:18 +0600 Subject: [PATCH] Redesign address error --- .../send/address/EnterAddressFragment.kt | 56 ++++++++++--------- .../send/address/EnterAddressValidator.kt | 12 +++- .../compose/components/FormsInputAddress.kt | 33 +++++++---- app/src/main/res/values/strings.xml | 1 + 4 files changed, 63 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressFragment.kt index ad6504fd8a1..30322a0dd46 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressFragment.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressFragment.kt @@ -123,6 +123,7 @@ fun EnterAddressScreen(navController: NavController, input: EnterAddressFragment value = uiState.value, hint = stringResource(id = R.string.Send_Hint_Address), state = uiState.inputState, + showStateIcon = false, textPreprocessor = paymentAddressViewModel, navController = navController, chooseContactEnable = false, @@ -157,7 +158,10 @@ fun EnterAddressScreen(navController: NavController, input: EnterAddressFragment modifier = Modifier .fillMaxWidth() .padding(start = 16.dp, end = 16.dp), - title = stringResource(R.string.Button_Next), + title = if (uiState.addressValidationError != null) + stringResource(R.string.Send_Address_Error_InvalidAddress) + else + stringResource(R.string.Button_Next), onClick = { uiState.address?.let { navController.slideFromRight( @@ -188,31 +192,33 @@ fun AddressCheck( navController: NavController, onPaidAction: (action: IPaidAction) -> Unit ) { - Column( - modifier = Modifier - .padding(top = 16.dp) - .padding(horizontal = 16.dp) - .fillMaxWidth() - .clip(RoundedCornerShape(12.dp)) - .border( - 0.5.dp, - ComposeAppTheme.colors.steel20, - RoundedCornerShape(12.dp) - ) - ) { - checkResults.forEach { (addressCheckType, checkData) -> - CheckCell( - title = stringResource(addressCheckType.title), - checkType = addressCheckType, - inProgress = checkData.inProgress, - checkResult = checkData.checkResult, - navController, - onPaidAction - ) + if (addressValidationError == null || addressValidationError is AddressValidationError.SendToSelfForbidden) { + Column( + modifier = Modifier + .padding(top = 16.dp) + .padding(horizontal = 16.dp) + .fillMaxWidth() + .clip(RoundedCornerShape(12.dp)) + .border( + 0.5.dp, + ComposeAppTheme.colors.steel20, + RoundedCornerShape(12.dp) + ) + ) { + checkResults.forEach { (addressCheckType, checkData) -> + CheckCell( + title = stringResource(addressCheckType.title), + checkType = addressCheckType, + inProgress = checkData.inProgress, + checkResult = checkData.checkResult, + navController, + onPaidAction + ) + } } - } - Errors(addressValidationError, checkResults) + Errors(addressValidationError, checkResults) + } } @Composable @@ -297,7 +303,7 @@ private fun CheckCell( contentDescription = null, tint = ComposeAppTheme.colors.jacob, modifier = Modifier - .padding(end = 3.dp) + .padding(end = 8.dp) .size(20.dp) ) subhead2_grey(text = title) diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressValidator.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressValidator.kt index 3f70e5bc5ff..0c6dbd36b91 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressValidator.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/address/EnterAddressValidator.kt @@ -51,7 +51,9 @@ class TronAddressValidator( override suspend fun validate(address: Address) { val validAddress = io.horizontalsystems.tronkit.models.Address.fromBase58(address.hex) if (token.type == TokenType.Native && adapter.isOwnAddress(validAddress)) { - throw Exception(Translator.getString(R.string.Send_Error_SendToSelf, "TRX")) + throw AddressValidationError.SendToSelfForbidden( + Translator.getString(R.string.Send_Error_SendToSelf, "TRX") + ) } } } @@ -63,7 +65,13 @@ class ZcashAddressValidator( try { adapter.validate(address.hex) } catch (e: ZcashError.SendToSelfNotAllowed) { - throw Exception(Translator.getString(R.string.Send_Error_SendToSelf, "ZEC")) + throw AddressValidationError.SendToSelfForbidden( + Translator.getString(R.string.Send_Error_SendToSelf, "ZEC") + ) } } } + +sealed class AddressValidationError : Throwable() { + class SendToSelfForbidden(override val message: String) : AddressValidationError() +} \ No newline at end of file diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/FormsInputAddress.kt b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/FormsInputAddress.kt index 2a702504772..f6e0dd1ab42 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/FormsInputAddress.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/FormsInputAddress.kt @@ -52,6 +52,7 @@ fun FormsInputAddress( value: String, hint: String, state: DataState
? = null, + showStateIcon: Boolean = true, textPreprocessor: TextPreprocessor = TextPreprocessorImpl, navController: NavController, chooseContactEnable: Boolean, @@ -127,20 +128,28 @@ fun FormsInputAddress( HSCircularProgressIndicator() } is DataState.Error -> { - Icon( - modifier = Modifier.padding(end = 8.dp), - painter = painterResource(id = R.drawable.ic_attention_20), - contentDescription = null, - tint = cautionColor - ) + if(showStateIcon) { + Icon( + modifier = Modifier.padding(end = 8.dp), + painter = painterResource(id = R.drawable.ic_attention_20), + contentDescription = null, + tint = cautionColor + ) + } else { + HSpacer(28.dp) + } } is DataState.Success -> { - Icon( - modifier = Modifier.padding(end = 8.dp), - painter = painterResource(id = R.drawable.ic_check_20), - contentDescription = null, - tint = ComposeAppTheme.colors.remus - ) + if(showStateIcon) { + Icon( + modifier = Modifier.padding(end = 8.dp), + painter = painterResource(id = R.drawable.ic_check_20), + contentDescription = null, + tint = ComposeAppTheme.colors.remus + ) + } else { + HSpacer(28.dp) + } } else -> { Spacer(modifier = Modifier.width(28.dp)) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c3854cc6f9a..16c33304827 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -446,6 +446,7 @@ Recent Locked Invalid + Invalid Address Correct Detected Clear