From 375afeea12898996d462719aeb4fc1a7cae2ed64 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 28 Mar 2025 12:03:09 +0300 Subject: [PATCH] Updated on 2026-08-14 --- core/error/.gitignore | 1 + core/error/build.gradle.kts | 14 +++++++++++ .../com/tangem/core/error/UniversalError.kt | 23 +++++++++++++++++++ .../kotlin/com/tangem/core/error/Utils.kt | 14 +++++++++++ core/ui/build.gradle.kts | 1 + .../tangem/core/ui/message/dialog/Dialogs.kt | 15 ++++++++++++ .../core/ui/utils/UiMessageSenderUtils.kt | 9 ++++++++ settings.gradle.kts | 1 + 8 files changed, 78 insertions(+) create mode 100644 core/error/.gitignore create mode 100644 core/error/build.gradle.kts create mode 100644 core/error/src/main/kotlin/com/tangem/core/error/UniversalError.kt create mode 100644 core/error/src/main/kotlin/com/tangem/core/error/Utils.kt create mode 100644 core/ui/src/main/java/com/tangem/core/ui/utils/UiMessageSenderUtils.kt diff --git a/core/error/.gitignore b/core/error/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/core/error/.gitignore @@ -0,0 +1 @@ +/build diff --git a/core/error/build.gradle.kts b/core/error/build.gradle.kts new file mode 100644 index 0000000000..59a90763a4 --- /dev/null +++ b/core/error/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + alias(deps.plugins.android.library) + alias(deps.plugins.kotlin.android) + id("configuration") +} + +android { + namespace = "com.tangem.core.error" +} + +dependencies { + implementation(tangemDeps.card.core) + implementation(tangemDeps.blockchain) +} \ No newline at end of file diff --git a/core/error/src/main/kotlin/com/tangem/core/error/UniversalError.kt b/core/error/src/main/kotlin/com/tangem/core/error/UniversalError.kt new file mode 100644 index 0000000000..dd7a15e9c2 --- /dev/null +++ b/core/error/src/main/kotlin/com/tangem/core/error/UniversalError.kt @@ -0,0 +1,23 @@ +package com.tangem.core.error + +/** + * Universal error interface for all errors in the app. + * Each error code must follow this format: xxxyyyzzz where + * xxx - Feature code + * yyy - Subsystem code + * zzz - Specific error code + * If you need to add new feature add it to list below incrementing last code. + * + * Features: + * `100` - App error + * `101` - TangemSdkError + * `102` - BlockchainSdkError + * `103` - Express + * `104` - Visa + * `105` - Staking + * `106` - NFT + * `107` - WalletConnect + */ +interface UniversalError { + val errorCode: Int +} \ No newline at end of file diff --git a/core/error/src/main/kotlin/com/tangem/core/error/Utils.kt b/core/error/src/main/kotlin/com/tangem/core/error/Utils.kt new file mode 100644 index 0000000000..daf75b0558 --- /dev/null +++ b/core/error/src/main/kotlin/com/tangem/core/error/Utils.kt @@ -0,0 +1,14 @@ +package com.tangem.core.error + +import com.tangem.common.core.TangemSdkError +import com.tangem.blockchain.common.BlockchainSdkError + +val TangemSdkError.universalError: UniversalError + get() = object : UniversalError { + override val errorCode: Int = 101000000 + code + } + +val BlockchainSdkError.universalError: UniversalError + get() = object : UniversalError { + override val errorCode: Int = 102000000 + code + } \ No newline at end of file diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index 0e9ea7edd7..d6b5e0c90f 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { implementation(projects.core.res) implementation(projects.core.utils) implementation(projects.core.decompose) + implementation(projects.core.error) /** AndroidX libraries */ implementation(deps.androidx.fragment.ktx) diff --git a/core/ui/src/main/java/com/tangem/core/ui/message/dialog/Dialogs.kt b/core/ui/src/main/java/com/tangem/core/ui/message/dialog/Dialogs.kt index 86aa88795f..b8cac08019 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/message/dialog/Dialogs.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/message/dialog/Dialogs.kt @@ -1,8 +1,10 @@ package com.tangem.core.ui.message.dialog +import com.tangem.core.error.UniversalError import com.tangem.core.ui.R import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.wrappedList import com.tangem.core.ui.message.DialogMessage import com.tangem.core.ui.message.EventMessageAction @@ -36,4 +38,17 @@ object Dialogs { secondActionBuilder = { cancelAction(onClick = onCancelClick) }, ) } + + /** + * Universal error dialog + */ + fun universalErrorDialog(universalError: UniversalError, onOkClick: () -> Unit): DialogMessage { + return DialogMessage( + message = resourceReference(R.string.universal_error, wrappedList(universalError.errorCode)), + firstAction = EventMessageAction( + title = resourceReference(R.string.common_ok), + onClick = onOkClick, + ), + ) + } } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/utils/UiMessageSenderUtils.kt b/core/ui/src/main/java/com/tangem/core/ui/utils/UiMessageSenderUtils.kt new file mode 100644 index 0000000000..d237f52daa --- /dev/null +++ b/core/ui/src/main/java/com/tangem/core/ui/utils/UiMessageSenderUtils.kt @@ -0,0 +1,9 @@ +package com.tangem.core.ui.utils + +import com.tangem.core.decompose.ui.UiMessageSender +import com.tangem.core.error.UniversalError +import com.tangem.core.ui.message.dialog.Dialogs + +fun UiMessageSender.showErrorDialog(universalError: UniversalError) { + send(Dialogs.universalErrorDialog(universalError) {}) +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 0cf1c30675..f45ec8e8bc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -148,6 +148,7 @@ include(":core:deep-links") include(":core:deep-links:global") include(":core:decompose") include(":core:pagination") +include(":core:error") // endregion Core modules // region Common modules