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