From deee4fe1838cdeb2ec263214a17d394740ca89c0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 14 Sep 2020 22:37:48 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/features/send/redux/SendScreenAction.kt | 3 +++ .../redux/middlewares/AddressPayIdMiddleware.kt | 7 ++++++- .../send/redux/middlewares/SendMiddleware.kt | 13 +++++++++++++ .../send/redux/reducers/AddressPayIdReducer.kt | 2 ++ .../features/send/redux/states/AddressPayIdState.kt | 3 ++- .../com/tangem/tap/features/send/ui/SendFragment.kt | 6 ++---- .../send/ui/stateSubscribers/SendStateSubscriber.kt | 1 + app/src/main/res/drawable/ic_paste.xml | 12 ++++++------ app/src/main/res/drawable/ic_paste_disabled.xml | 11 +++++++++++ app/src/main/res/drawable/paste_selector.xml | 9 +++++++++ .../main/res/layout/layout_send_address_payid.xml | 4 ++-- 11 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/drawable/ic_paste_disabled.xml create mode 100644 app/src/main/res/drawable/paste_selector.xml diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt b/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt index 1f76fa2399..1676c1ee66 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt @@ -37,6 +37,9 @@ sealed class AddressPayIdVerifyAction : SendScreenAction { ADDRESS_SAME_AS_WALLET } + data class VerifyClipboard(val data: String?) : AddressPayIdVerifyAction() + data class ChangePasteBtnEnableState(val isEnabled: Boolean): AddressPayIdVerifyAction() + sealed class PayIdVerification : AddressPayIdVerifyAction() { data class SetError(val payId: String, val error: Error) : PayIdVerification() data class SetPayIdWalletAddress(val payId: String, val payIdWalletAddress: String) : PayIdVerification() diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AddressPayIdMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AddressPayIdMiddleware.kt index 60e0077661..ab345e9e35 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AddressPayIdMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AddressPayIdMiddleware.kt @@ -17,7 +17,12 @@ import org.rekotlin.DispatchFunction [REDACTED_AUTHOR] */ internal class AddressPayIdMiddleware { - fun handle(data: String, appState: AppState?, dispatch: DispatchFunction) { + fun handle(data: String?, appState: AppState?, dispatch: DispatchFunction) { + if (data == null) { + dispatch(AddressVerification.SetError("", Error.ADDRESS_INVALID_OR_UNSUPPORTED_BY_BLOCKCHAIN)) + return + } + val sendState = appState?.sendState ?: return val walletManager = sendState.walletManager ?: return if (data == sendState.addressPayIdState.etFieldValue) return diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index 03645a9444..6944fd09aa 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -4,6 +4,7 @@ import com.tangem.blockchain.common.Amount import com.tangem.common.CompletionResult import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.send.redux.AddressPayIdActionUi.ChangeAddressOrPayId +import com.tangem.tap.features.send.redux.AddressPayIdVerifyAction.* import com.tangem.tap.features.send.redux.AmountActionUi.CheckAmountToSend import com.tangem.tap.features.send.redux.FeeAction.RequestFee import com.tangem.tap.features.send.redux.SendAction @@ -22,6 +23,18 @@ val sendMiddleware: Middleware = { dispatch, appState -> { action -> when (action) { is ChangeAddressOrPayId -> AddressPayIdMiddleware().handle(action.data, appState(), dispatch) + is VerifyClipboard -> { + AddressPayIdMiddleware().handle(action.data, appState()){ + when(it) { + is AddressVerification.SetWalletAddress, is PayIdVerification.SetPayIdWalletAddress -> { + dispatch(ChangePasteBtnEnableState(true)) + } + is AddressVerification.SetError, is PayIdVerification.SetError -> { + dispatch(ChangePasteBtnEnableState(false)) + } + } + } + } is CheckAmountToSend -> AmountMiddleware().handle(action.data, appState(), dispatch) is RequestFee -> RequestFeeMiddleware().handle(appState(), dispatch) is SendActionUi.SendAmountToRecipient -> verifyAndSendTransaction(appState(), dispatch) diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/AddressPayIdReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/AddressPayIdReducer.kt index 72b7e5e05b..cc5fa3430f 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/AddressPayIdReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/AddressPayIdReducer.kt @@ -36,6 +36,8 @@ class AddressPayIdReducer : SendInternalReducer { is PayIdVerification.SetError -> state.copyPayIdError(action.payId, action.error) is AddressVerification.SetWalletAddress -> state.copyWalletAddress(action.address) is AddressVerification.SetError -> state.copyError(action.address, action.error) + is AddressPayIdVerifyAction.ChangePasteBtnEnableState -> state.copy(pasteIsEnabled = action.isEnabled) + is AddressPayIdVerifyAction.VerifyClipboard -> state } return updateLastState(sendState.copy(addressPayIdState = result), result) } 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 1b6583fdd5..2c66e4adcd 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 @@ -9,7 +9,8 @@ data class AddressPayIdState( val truncatedFieldValue: String? = null, val recipientWalletAddress: String? = null, val error: AddressPayIdVerifyAction.Error? = null, - val truncateHandler: ((String) -> String)? = null + val truncateHandler: ((String) -> String)? = null, + val pasteIsEnabled: Boolean = false ) : StateType { fun isReady(): Boolean = error == null && recipientWalletAddress?.isNotEmpty() ?: false diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt index 18311e70fe..ff2728111f 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt @@ -17,13 +17,10 @@ import com.tangem.tap.common.qrCodeScan.ScanQrCodeActivity import com.tangem.tap.common.snackBar.MaxAmountSnackbar import com.tangem.tap.common.text.truncateMiddleWith import com.tangem.tap.features.send.BaseStoreFragment +import com.tangem.tap.features.send.redux.* import com.tangem.tap.features.send.redux.AddressPayIdActionUi.* import com.tangem.tap.features.send.redux.AmountActionUi.* -import com.tangem.tap.features.send.redux.FeeAction import com.tangem.tap.features.send.redux.FeeActionUi.* -import com.tangem.tap.features.send.redux.ReceiptAction -import com.tangem.tap.features.send.redux.ReleaseSendState -import com.tangem.tap.features.send.redux.SendActionUi import com.tangem.tap.features.send.redux.states.FeeType import com.tangem.tap.features.send.redux.states.MainCurrencyType import com.tangem.tap.features.send.ui.stateSubscribers.SendStateSubscriber @@ -60,6 +57,7 @@ class SendFragment : BaseStoreFragment(R.layout.fragment_send) { private fun setupAddressOrPayIdLayout() { store.dispatch(SetTruncateHandler { etAddressOrPayId.truncateMiddleWith(it, " *** ") }) + store.dispatch(AddressPayIdVerifyAction.VerifyClipboard(requireContext().getFromClipboard()?.toString())) etAddressOrPayId.setOnFocusChangeListener { v, hasFocus -> store.dispatch(TruncateOrRestore(!hasFocus)) 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 9fc85dbecb..babe2a590c 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 @@ -42,6 +42,7 @@ class SendStateSubscriber(fragment: BaseStoreFragment) : FragmentStateSubscriber } fg.btnSend.isEnabled = state.sendButtonIsEnabled + fg.imvPaste.isEnabled = state.addressPayIdState.pasteIsEnabled } private fun handleAddressPayIdState(fg: BaseStoreFragment, state: AddressPayIdState) { diff --git a/app/src/main/res/drawable/ic_paste.xml b/app/src/main/res/drawable/ic_paste.xml index 5697018aec..5bc825fa49 100644 --- a/app/src/main/res/drawable/ic_paste.xml +++ b/app/src/main/res/drawable/ic_paste.xml @@ -1,9 +1,9 @@ + android:width="16dp" + android:height="19dp" + android:viewportWidth="16" + android:viewportHeight="19"> + android:pathData="M13.8333,1.6667H10.35C10,0.7 9.0833,0 8,0C6.9167,0 6,0.7 5.65,1.6667H2.1667C1.25,1.6667 0.5,2.4167 0.5,3.3333V16.6667C0.5,17.5833 1.25,18.3333 2.1667,18.3333H13.8333C14.75,18.3333 15.5,17.5833 15.5,16.6667V3.3333C15.5,2.4167 14.75,1.6667 13.8333,1.6667ZM8,1.6667C8.4583,1.6667 8.8333,2.0417 8.8333,2.5C8.8333,2.9583 8.4583,3.3333 8,3.3333C7.5417,3.3333 7.1667,2.9583 7.1667,2.5C7.1667,2.0417 7.5417,1.6667 8,1.6667ZM13.8333,16.6667H2.1667V3.3333H3.8333V5.8333H12.1667V3.3333H13.8333V16.6667Z" + android:fillColor="#1C1C1E"/> diff --git a/app/src/main/res/drawable/ic_paste_disabled.xml b/app/src/main/res/drawable/ic_paste_disabled.xml new file mode 100644 index 0000000000..7666c5a52d --- /dev/null +++ b/app/src/main/res/drawable/ic_paste_disabled.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/paste_selector.xml b/app/src/main/res/drawable/paste_selector.xml new file mode 100644 index 0000000000..7d83495828 --- /dev/null +++ b/app/src/main/res/drawable/paste_selector.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_send_address_payid.xml b/app/src/main/res/layout/layout_send_address_payid.xml index 3a93463a6a..238933794b 100644 --- a/app/src/main/res/layout/layout_send_address_payid.xml +++ b/app/src/main/res/layout/layout_send_address_payid.xml @@ -35,7 +35,7 @@ android:id="@+id/flPaste" android:layout_width="@dimen/btn_rounded_size" android:layout_height="@dimen/btn_rounded_size" - android:layout_marginEnd="12dp" + android:layout_marginEnd="8dp" android:background="@drawable/shape_ellipse" app:layout_constraintBottom_toBottomOf="@+id/flQrCode" app:layout_constraintEnd_toStartOf="@+id/flQrCode" @@ -48,7 +48,7 @@ android:layout_gravity="center" android:background="?selectableItemBackgroundBorderless" android:padding="6dp" - app:srcCompat="@drawable/ic_paste" /> + app:srcCompat="@drawable/paste_selector" />