diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/TransactionExtrasReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/TransactionExtrasReducer.kt index ed44869f90..3b8d9cd016 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/TransactionExtrasReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/TransactionExtrasReducer.kt @@ -54,7 +54,7 @@ class TransactionExtrasReducer : SendInternalReducer { sendState: SendState, infoState: TransactionExtrasState, ): SendState { - fun clearMemo(memo: XlmMemoState): XlmMemoState = memo.copy(text = null, id = null) + fun clearMemo(memo: XlmMemoState): XlmMemoState = memo.copy(text = null, id = null, error = null) val result = when (action) { // is XlmMemo.ChangeSelectedMemo -> { @@ -74,8 +74,16 @@ class TransactionExtrasReducer : SendInternalReducer { memo = when (infoState.xlmMemo?.selectedMemoType) { XlmMemoType.TEXT -> memo.copy(text = StellarMemo.Text(action.data)) XlmMemoType.ID -> { - val id = action.data.toIntOrNull()?.toBigInteger() - if (id != null) memo.copy(id = StellarMemo.Id(id)) else memo + val id = action.data.toBigIntegerOrNull() + if (id != null) { + if (id > XlmMemoState.MAX_NUMBER) { + memo.copy(error = TransactionExtraError.INVALID_XLM_MEMO) + } else { + memo.copy(id = StellarMemo.Id(id)) + } + } else { + memo + } } null -> memo } @@ -98,7 +106,7 @@ class TransactionExtrasReducer : SendInternalReducer { val tagState = if (tag <= XrpDestinationTagState.MAX_NUMBER){ XrpDestinationTagState(input, tag) } else { - XrpDestinationTagState(input, error = XrpDestinationTagError.INVALID_TAG) + XrpDestinationTagState(input, error = TransactionExtraError.INVALID_DESTINATION_TAG) } infoState.copy(xrpDestinationTag = tagState) } else { diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/states/AddressPayIdState.kt b/app/src/main/java/com/tangem/tap/features/send/redux/states/AddressPayIdState.kt index 877f277ab3..d17531a84a 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/states/AddressPayIdState.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/states/AddressPayIdState.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.send.redux.states import com.tangem.blockchain.blockchains.stellar.StellarMemo import com.tangem.tap.features.send.redux.AddressPayIdVerifyAction +import java.math.BigInteger data class AddressPayIdState( val viewFieldValue: InputViewValue = InputViewValue(""), @@ -39,25 +40,31 @@ data class XlmMemoState( val selectedMemoType: XlmMemoType = XlmMemoType.ID, val text: StellarMemo.Text? = null, val id: StellarMemo.Id? = null, + val error: TransactionExtraError? = null, ) { val memo: StellarMemo? get() = when (selectedMemoType) { XlmMemoType.TEXT -> text XlmMemoType.ID -> id } + + companion object { + val MAX_NUMBER: BigInteger = BigInteger("FFFFFFFFFFFFFFFF", 16) + } } // tag must contains only digits data class XrpDestinationTagState( val viewFieldValue: InputViewValue = InputViewValue(""), val tag: Long? = null, - val error: XrpDestinationTagError? = null + val error: TransactionExtraError? = null ) { companion object { const val MAX_NUMBER: Long = 4294967295 } } -enum class XrpDestinationTagError { - INVALID_TAG +enum class TransactionExtraError { + INVALID_DESTINATION_TAG, + INVALID_XLM_MEMO } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt index 0578e51cf2..8c0c8fdf23 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt @@ -70,10 +70,17 @@ class SendStateSubscriber(fragment: BaseStoreFragment) : FragmentStateSubscriber XlmMemoType.ID -> InputType.TYPE_CLASS_NUMBER } if (!it.viewFieldValue.isFromUserInput) fg.etMemo.setText(it.viewFieldValue.value) + if (it.error != null) { + if (it.error == TransactionExtraError.INVALID_XLM_MEMO) { + fg.tilMemo.error = fg.getText(R.string.send_error_invalid_memo_id) + } + } else { + fg.tilMemo.error = null + } } infoState.xrpDestinationTag?.let { if (infoState.xrpDestinationTag.error != null) { - if (infoState.xrpDestinationTag.error == XrpDestinationTagError.INVALID_TAG) { + if (infoState.xrpDestinationTag.error == TransactionExtraError.INVALID_DESTINATION_TAG) { fg.tilDestinationTag.error = fg.getText(R.string.send_error_invalid_destination_tag) } } else { diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index a93def7b54..da52a1a514 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -36,6 +36,7 @@ this wallet. Memo Destination tag Invalid destination tag. It won\'t be added to the transaction + Invalid Memo ID. It won\'t be added to the transaction