From 94192eba6804e681372fe97a33713ba0a1e78add Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 18 Jun 2021 10:04:37 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/common/DialogManager.kt | 14 +++++++++++++- .../domain/walletconnect/WalletConnectManager.kt | 4 ++++ .../redux/walletconnect/WalletConnectAction.kt | 2 ++ .../walletconnect/WalletConnectMiddleware.kt | 6 ++++++ .../redux/walletconnect/WalletConnectReducer.kt | 3 ++- .../redux/walletconnect/WalletConnectState.kt | 1 + ...pportedCardDialog.kt => SimpleAlertDialog.kt} | 16 ++++++++++------ app/src/main/res/values/strings_untranslated.xml | 2 ++ 8 files changed, 40 insertions(+), 8 deletions(-) rename app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/{UnsupportedCardDialog.kt => SimpleAlertDialog.kt} (53%) diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 1de2e9cb6d..96992a5d7a 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -6,6 +6,7 @@ import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.features.details.redux.walletconnect.WalletConnectDialog import com.tangem.tap.features.details.ui.walletconnect.dialogs.* import com.tangem.tap.store +import com.tangem.wallet.R import org.rekotlin.StoreSubscriber class DialogManager : StoreSubscriber { @@ -38,7 +39,18 @@ class DialogManager : StoreSubscriber { when (state.dialog) { is WalletConnectDialog.UnsupportedCard -> - dialog = UnsupportedCardDialog.create(context) + dialog = SimpleAlertDialog.create( + titleRes = R.string.wallet_connect, + messageRes = R.string.wallet_connect_scanner_error_no_ethereum_wallet, + context = context + ) + is WalletConnectDialog.OpeningSessionRejected -> { + dialog = SimpleAlertDialog.create( + titleRes = R.string.wallet_connect, + messageRes = R.string.wallet_connect_same_wcuri, + context = context + ) + } is WalletConnectDialog.ApproveWcSession -> dialog = ApproveWcSessionDialog.create(state.dialog.session, context) is WalletConnectDialog.ClipboardOrScanQr -> diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt index 442b46ce83..44eece7399 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt @@ -44,6 +44,10 @@ class WalletConnectManager { fun connect(wcUri: String, wallet: WalletForSession) { val session = WCSession.from(wcUri) ?: return + if (sessions[session] != null) { + store.dispatchOnMain(WalletConnectAction.RefuseOpeningSession) + return + } val client = WCClient(httpClient = okHttpClient) setListeners(client) val peerId = UUID.randomUUID().toString() diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt index 6e950a1cab..a2308891de 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt @@ -29,6 +29,8 @@ sealed class WalletConnectAction : Action { val wallet: WalletForSession, ) : WalletConnectAction() + object RefuseOpeningSession : WalletConnectAction() + data class AcceptOpeningSession(val session: WalletConnectSession) : WalletConnectAction() data class ApproveSession( diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 2aa35ae196..f3c581daf4 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -115,6 +115,12 @@ class WalletConnectMiddleware { ) } + is WalletConnectAction.RefuseOpeningSession -> { + store.dispatch(GlobalAction.ShowDialog( + WalletConnectDialog.OpeningSessionRejected + )) + } + is WalletConnectAction.AcceptOpeningSession -> { store.dispatchOnMain(GlobalAction.ShowDialog(WalletConnectDialog.ApproveWcSession( action.session))) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt index 17669f9451..df3eec9834 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt @@ -25,8 +25,9 @@ class WalletConnectReducer { state.copy(sessions = sessions) } is WalletConnectAction.ScanCard -> state.copy(loading = true) - is WalletConnectAction.UnsupportedCard -> state.copy(loading = false) + is WalletConnectAction.UnsupportedCard -> state.copy(loading = false) + is WalletConnectAction.RefuseOpeningSession -> state.copy(loading = false) is WalletConnectAction.FailureEstablishingSession -> state.copy(loading = false) else -> state diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt index 369ae46dc0..f5b7ce0c5f 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt @@ -41,6 +41,7 @@ data class WalletForSession( sealed class WalletConnectDialog : StateDialog { data class ClipboardOrScanQr(val clipboardUri: String) : WalletConnectDialog() object UnsupportedCard : WalletConnectDialog() + object OpeningSessionRejected : WalletConnectDialog() data class ApproveWcSession(val session: WalletConnectSession) : WalletConnectDialog() data class RequestTransaction(val dialogData: TransactionRequestDialogData) : WalletConnectDialog() diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/UnsupportedCardDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SimpleAlertDialog.kt similarity index 53% rename from app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/UnsupportedCardDialog.kt rename to app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SimpleAlertDialog.kt index cd408d7cd2..f4efd59532 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/UnsupportedCardDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SimpleAlertDialog.kt @@ -6,15 +6,19 @@ import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.store import com.tangem.wallet.R -class UnsupportedCardDialog { +class SimpleAlertDialog { companion object { - fun create(context: Context): AlertDialog { + fun create( + titleRes: Int, + messageRes: Int, + buttonRes: Int = R.string.common_ok, + context: Context, + ): AlertDialog { return AlertDialog.Builder(context).apply { - setTitle(context.getString(R.string.wallet_connect)) - setMessage(context.getText(R.string.wallet_connect_scanner_error_no_ethereum_wallet)) - setPositiveButton(context.getText(R.string.common_ok)) { _, _ -> } -// setNegativeButton(context.getText(R.string.common_reject)) { _, _ -> } + setTitle(context.getString(titleRes)) + setMessage(context.getText(messageRes)) + setPositiveButton(context.getText(buttonRes)) { _, _ -> } setOnDismissListener { store.dispatch(GlobalAction.HideDialog) } diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index ef04081bbb..d6c4426536 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -154,4 +154,6 @@ this wallet. Paste from clipboard Scan new code This card can’t be used to establish WalletConnect session + The operation couldn\'t be completed + The operation couldn\'t be completed. \n\nYou have already established a WalletConnect session with this parameters.