From f4ee8b7b88923f0445f2dcc1fcd8ff01e229ae87 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 8 Apr 2021 18:23:36 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/tap/common/extensions/Collections.kt | 11 +++++++++++ .../tap/common/redux/global/GlobalMidlleware.kt | 7 ++----- .../tap/common/redux/global/GlobalReducer.kt | 1 - .../com/tangem/tap/domain/TapWalletManager.kt | 3 +-- .../warningMessage/WarningMessagesManager.kt | 14 +++++--------- .../tap/features/send/redux/SendScreenAction.kt | 9 +++++++-- .../send/redux/middlewares/SendMiddleware.kt | 10 ++++++++++ .../send/redux/reducers/SendScreenReducer.kt | 2 +- .../tangem/tap/features/send/ui/SendFragment.kt | 4 +--- .../tap/features/wallet/redux/WalletAction.kt | 3 ++- .../tap/features/wallet/redux/WalletState.kt | 3 +++ .../redux/middlewares/WarningsMiddleware.kt | 15 ++++++++++----- .../wallet/redux/reducers/WalletReducer.kt | 10 ++-------- 13 files changed, 55 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/extensions/Collections.kt diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Collections.kt b/app/src/main/java/com/tangem/tap/common/extensions/Collections.kt new file mode 100644 index 0000000000..a280071a02 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/extensions/Collections.kt @@ -0,0 +1,11 @@ +package com.tangem.tap.common.extensions + +/** +[REDACTED_AUTHOR] + */ +fun List.containsAny(list: List): Boolean { + this.forEach { mainItem -> + list.forEach { if (it == mainItem) return true } + } + return false +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt index bc4a389355..dce356f1be 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt @@ -3,7 +3,6 @@ package com.tangem.tap.common.redux.global import com.tangem.TangemSdkError import com.tangem.common.CompletionResult import com.tangem.tap.common.redux.AppState -import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.home.redux.HomeAction import com.tangem.tap.features.send.redux.SendAction @@ -45,10 +44,8 @@ val globalMiddleware: Middleware = { dispatch, appState -> store.dispatch(WalletAction.Warnings.CheckHashesCount.SaveCardId) } - store.dispatch(WalletAction.Warnings.SetWarnings( - it.getWarnings(WarningMessage.Location.MainScreen))) - store.dispatch(SendAction.SetWarnings( - it.getWarnings(WarningMessage.Location.SendScreen))) + store.dispatch(WalletAction.Warnings.Update) + store.dispatch(SendAction.Warnings.Update) } } } diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt index eeecf8fb76..bfc866a06c 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt @@ -39,7 +39,6 @@ fun globalReducer(action: Action, state: AppState): GlobalState { globalState.copy(configManager = action.configManager) } is GlobalAction.SetWarningManager -> globalState.copy(warningManager = action.warningManager) - is GlobalAction.HideWarningMessage -> globalState is GlobalAction.UpdateSecurityOptions -> { val card = when (action.securityOption) { SecurityOption.LongTap -> globalState.scanNoteResponse?.card?.copy( diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 48d387adc3..4dc3906281 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -86,7 +86,6 @@ class TapWalletManager { } TapWorkarounds.updateCard(data.card) store.state.globalState.feedbackManager?.infoHolder?.setCardInfo(data.card) - store.state.globalState.warningManager?.setBlockchain(data.walletManager?.wallet?.blockchain) updateConfigManager(data) withContext(Dispatchers.Main) { @@ -127,7 +126,6 @@ class TapWalletManager { suspend fun loadData(data: ScanNoteResponse) { withContext(Dispatchers.Main) { - store.dispatch(WalletAction.Warnings.CheckIfNeeded) val artworkId = data.verifyResponse?.artworkInfo?.id if (data.walletManager != null) { val config = store.state.globalState.configManager?.config ?: return@withContext @@ -175,6 +173,7 @@ class TapWalletManager { store.dispatch(WalletAction.LoadData.Failure(TapError.UnknownBlockchain)) store.dispatch(WalletAction.LoadArtwork(data.card, artworkId)) } + store.dispatch(WalletAction.Warnings.CheckIfNeeded) } } diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt index 391bbc9b13..81739ee7b5 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt @@ -2,6 +2,7 @@ package com.tangem.tap.domain.configurable.warningMessage import com.tangem.blockchain.common.Blockchain import com.tangem.tangem_sdk_new.ui.animation.VoidCallback +import com.tangem.tap.common.extensions.containsAny import com.tangem.wallet.R /** @@ -11,7 +12,6 @@ class WarningMessagesManager( private val warningLoader: RemoteWarningLoader, ) { - private var blockchain: Blockchain? = null private val warningsList: MutableList = mutableListOf() fun load(onComplete: VoidCallback? = null) { @@ -23,10 +23,6 @@ class WarningMessagesManager( } } - fun setBlockchain(blockchain: Blockchain?) { - this.blockchain = blockchain - } - fun addWarning(warning: WarningMessage) { if (findWarning(warning) == null) { warningsList.add(warning) @@ -34,14 +30,14 @@ class WarningMessagesManager( } } - fun getWarnings(location: WarningMessage.Location): List { + fun getWarnings(location: WarningMessage.Location, forBlockchains: List = emptyList()): List { return warningsList .filter { !it.isHidden && it.location.contains(location) } .filter { - val blockchainList = it.blockchainList + val list = it.blockchainList when { - blockchainList == null -> true - blockchainList.contains(blockchain) -> true + list == null -> true + list.containsAny(forBlockchains) -> true else -> false } } 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 0d0d2d8bc7..08c3b35a09 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 @@ -149,8 +149,13 @@ sealed class SendAction : SendScreenAction { val sendAllCallback: () -> Unit, val reduceAmount: BigDecimal, ) : Dialog() - data class SendTransactionFails(val errorMessage: String): Dialog() + + data class SendTransactionFails(val errorMessage: String) : Dialog() object Hide : Dialog() } - data class SetWarnings(val warningList: List) : SendAction() + + sealed class Warnings : SendAction() { + object Update : SendAction() + data class Set(val warningList: List) : SendAction() + } } \ No newline at end of file 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 d1b7246ef2..5a5f927b30 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 @@ -15,6 +15,7 @@ import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.TapError import com.tangem.tap.domain.TapWorkarounds +import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.extensions.minimalAmount import com.tangem.tap.features.send.redux.* import com.tangem.tap.features.send.redux.FeeAction.RequestFee @@ -46,6 +47,7 @@ val sendMiddleware: Middleware = { dispatch, appState -> is SendActionUi.SendAmountToRecipient -> verifyAndSendTransaction(action, appState(), dispatch) is PrepareSendScreen -> setIfSendingToPayIdEnabled(appState(), dispatch) + is SendAction.Warnings.Update -> updateWarnings(dispatch) } nextDispatch(action) } @@ -224,3 +226,11 @@ private fun setIfSendingToPayIdEnabled(appState: AppState?, dispatch: (Action) - dispatch(AddressPayIdActionUi.ChangePayIdState(isSendingToPayIdEnabled)) } +private fun updateWarnings(dispatch: (Action) -> Unit) { + val warningsManager = store.state.globalState.warningManager ?: return + val blockchain = store.state.sendState.walletManager?.wallet?.blockchain ?: return + + val warnings = warningsManager.getWarnings(WarningMessage.Location.SendScreen, listOf(blockchain)) + dispatch(SendAction.Warnings.Set(warnings)) +} + diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt index e6ab87ef01..9db3d6e7ca 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt @@ -45,7 +45,7 @@ private class SendReducer : SendInternalReducer { is SendAction.Dialog.TezosWarningDialog -> sendState.copy(dialog = action) is SendAction.Dialog.SendTransactionFails -> sendState.copy(dialog = action) is SendAction.Dialog.Hide -> sendState.copy(dialog = null) - is SendAction.SetWarnings -> sendState.copy(sendWarningsList = action.warningList) + is SendAction.Warnings.Set -> sendState.copy(sendWarningsList = action.warningList) else -> return sendState } 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 6ee78a5baf..080114705d 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 @@ -25,7 +25,6 @@ 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.common.toggleWidget.* -import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.features.send.BaseStoreFragment import com.tangem.tap.features.send.redux.* import com.tangem.tap.features.send.redux.AddressPayIdActionUi.* @@ -249,8 +248,7 @@ class SendFragment : BaseStoreFragment(R.layout.fragment_send) { rv_warning_messages.addItemDecoration(SpacesItemDecoration(rv_warning_messages.dpToPx(16f).toInt())) rv_warning_messages.adapter = warningsAdapter - val warnings = store.state.globalState.warningManager?.getWarnings(WarningMessage.Location.SendScreen) ?: listOf() - store.dispatch(SendAction.SetWarnings(warnings)) + store.dispatch(SendAction.Warnings.Update) } override fun subscribeToStore() { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index f623671395..682b4dc0d2 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -71,7 +71,8 @@ sealed class WalletAction : Action { } object CheckIfNeeded : Warnings() - data class SetWarnings(val warningList: List) : Warnings() + object Update : Warnings() + data class Set(val warningList: List) : Warnings() object AppRating : Warnings() { object SetNeverToShow : Warnings() diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index 4bf58caa8c..f8e47d81bb 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -42,6 +42,9 @@ data class WalletState( primaryWallet?.currencyData?.status != com.tangem.tap.features.wallet.ui.BalanceStatus.EmptyCard && primaryWallet?.currencyData?.status != com.tangem.tap.features.wallet.ui.BalanceStatus.UnknownBlockchain + val blockchains: List + get() = walletManagers.map { it.wallet.blockchain } + fun getWalletManager(currencyName: CryptoCurrencyName?): WalletManager? { if (currencyName == null) return null val walletManager = walletManagers.find { it.wallet.blockchain.currency == currencyName } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt index ad2c009c9c..d158d3d323 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt @@ -29,6 +29,7 @@ import java.math.BigDecimal class WarningsMiddleware { fun handle(action: WalletAction.Warnings, globalState: GlobalState?) { when (action) { + WalletAction.Warnings.Update -> setWarningMessages() is WalletAction.Warnings.CheckIfNeeded -> { showCardWarningsIfNeeded(globalState) val readyToShow = preferencesStorage.appRatingLaunchObserver.isReadyToShow() @@ -76,7 +77,7 @@ class WarningsMiddleware { addWarningMessage(WarningMessagesManager.onlineVerificationFailed()) } } - updateWarningMessages() + setWarningMessages() } } @@ -130,11 +131,15 @@ class WarningsMiddleware { private fun addWarningMessage(warning: WarningMessage, autoUpdate: Boolean = false) { store.state.globalState.warningManager?.addWarning(warning) - if (autoUpdate) updateWarningMessages() + if (autoUpdate) setWarningMessages() } - private fun updateWarningMessages() { - val warningManager = store.state.globalState.warningManager ?: return - store.dispatch(WalletAction.Warnings.SetWarnings(warningManager.getWarnings(WarningMessage.Location.MainScreen))) + private fun setWarningMessages() { + store.dispatch(WalletAction.Warnings.Set(getWarnings())) + } + + private fun getWarnings(): List { + val warningManager = store.state.globalState.warningManager ?: return emptyList() + return warningManager.getWarnings(WarningMessage.Location.MainScreen, store.state.walletState.blockchains) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt index 051594b368..e9241531cc 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt @@ -294,16 +294,10 @@ fun createAddressList(wallet: Wallet?, walletAddresses: WalletAddresses? = null) private fun handleCheckSignedHashesActions(action: WalletAction.Warnings, state: WalletState): WalletState { return when (action) { - WalletAction.Warnings.CheckHashesCount.CheckHashesCountOnline -> state WalletAction.Warnings.CheckHashesCount.ConfirmHashesCount -> state.copy(hashesCountVerified = true) WalletAction.Warnings.CheckHashesCount.NeedToCheckHashesCountOnline -> state.copy(hashesCountVerified = false) - WalletAction.Warnings.CheckHashesCount.SaveCardId -> state - is WalletAction.Warnings.SetWarnings -> state.copy(mainWarningsList = action.warningList) - WalletAction.Warnings.CheckIfNeeded -> state - WalletAction.Warnings.AppRating -> state - WalletAction.Warnings.CheckHashesCount -> state - WalletAction.Warnings.AppRating.RemindLater -> state - WalletAction.Warnings.AppRating.SetNeverToShow -> state + is WalletAction.Warnings.Set -> state.copy(mainWarningsList = action.warningList) + else -> state } }