diff --git a/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt b/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt index cbef876b7a..216e6c755c 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/message/EventMessage.kt @@ -19,6 +19,27 @@ import com.tangem.core.ui.message.SnackbarMessage.Duration @Immutable sealed interface EventMessage : UiMessage +data class ToastMessage( + val message: TextReference, + val duration: Duration = ToastMessage.Duration.Short, +) : EventMessage { + /** + * The duration of the snackbar. + * */ + enum class Duration { + + /** + * Shows the toast for a short period of time. + * */ + Short, + + /** + * Shows the toast for a long period of time. + * */ + Long, + } +} + /** * Shows a snackbar. * diff --git a/core/ui/src/main/java/com/tangem/core/ui/message/EventMessageEffect.kt b/core/ui/src/main/java/com/tangem/core/ui/message/EventMessageEffect.kt index 17a9c0edb0..25984f4a44 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/message/EventMessageEffect.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/message/EventMessageEffect.kt @@ -1,6 +1,7 @@ package com.tangem.core.ui.message import android.content.Context +import android.widget.Toast import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult @@ -24,6 +25,7 @@ fun EventMessageEffect( onShowSnackbar: suspend (SnackbarMessage, Context) -> Unit = { message, context -> showSnackbar(snackbarHostState, message, context) }, + onShowToast: (ToastMessage, Context) -> Unit = { message, context -> showToast(message, context) }, ) { val messageEvent by messageHandler.collectAsState() val context = LocalContext.current @@ -46,6 +48,9 @@ fun EventMessageEffect( is BottomSheetMessageV2 -> { bottomSheetMessageV2 = message } + is ToastMessage -> { + onShowToast(message, context) + } } } @@ -162,4 +167,15 @@ private suspend fun showSnackbar(snackbarHostState: SnackbarHostState, message: SnackbarResult.Dismissed -> message.onDismissRequest() SnackbarResult.ActionPerformed -> message.action?.invoke() } +} + +private fun showToast(message: ToastMessage, context: Context) { + Toast.makeText( + /* context = */ context, + /* text = */ message.message.resolveReference(context.resources), + /* duration = */ when (message.duration) { + ToastMessage.Duration.Short -> Toast.LENGTH_SHORT + ToastMessage.Duration.Long -> Toast.LENGTH_LONG + }, + ).show() } \ No newline at end of file diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt index 62d5a3ae67..a8c67a9ce6 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt @@ -9,6 +9,9 @@ import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.decompose.navigation.Router +import com.tangem.core.decompose.ui.UiMessageSender +import com.tangem.core.ui.extensions.stringReference +import com.tangem.core.ui.message.ToastMessage import com.tangem.domain.models.network.Network import com.tangem.domain.walletconnect.model.WcPairRequest import com.tangem.domain.walletconnect.model.WcSessionApprove @@ -42,6 +45,7 @@ internal interface WcPairComponentCallback : @ModelScoped internal class WcPairModel @Inject constructor( private val router: Router, + private val messageSender: UiMessageSender, override val dispatchers: CoroutineDispatcherProvider, wcPairUseCaseFactory: WcPairUseCase.Factory, getWalletsUseCase: GetWalletsUseCase, @@ -87,6 +91,10 @@ internal class WcPairModel @Inject constructor( router.pop() } is WcPairState.Error -> { + appInfoUiState.transformerUpdate( + WcConnectButtonProgressTransformer(showProgress = false), + ) + messageSender.send(ToastMessage(message = stringReference(pairState.error.message))) Timber.e(pairState.error) } is WcPairState.Loading -> appInfoUiState.update { createLoadingState() }