From 7b76b6f575a085762a81de532a4489cd22dddfff Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 14 May 2026 11:15:23 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../ui/userwallet/ext/UserWalletExtensions.kt | 2 +- .../model/DynamicAddressesDelegate.kt | 12 ++++--- .../DynamicAddressesBottomSheetConfig.kt | 5 ++- .../DynamicAddressesBottomSheetContent.kt | 33 ++++++++++++------- gradle/tangem_dependencies.toml | 2 +- 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/common/ui/src/main/java/com/tangem/common/ui/userwallet/ext/UserWalletExtensions.kt b/common/ui/src/main/java/com/tangem/common/ui/userwallet/ext/UserWalletExtensions.kt index 00f4acf5a9..ba169301f1 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/userwallet/ext/UserWalletExtensions.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/userwallet/ext/UserWalletExtensions.kt @@ -1,6 +1,6 @@ package com.tangem.common.ui.userwallet.ext -import com.tangem.common.ui.R +import com.tangem.core.ui.R import com.tangem.domain.models.wallet.UserWallet fun walletInterationIcon(userWallet: UserWallet): Int? { diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/DynamicAddressesDelegate.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/DynamicAddressesDelegate.kt index b1eae9eee6..9e3ade71b0 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/DynamicAddressesDelegate.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/DynamicAddressesDelegate.kt @@ -9,6 +9,7 @@ import com.tangem.core.res.R import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.message.SnackbarMessage import com.tangem.common.ui.amountScreen.utils.getFiatString +import com.tangem.common.ui.userwallet.ext.walletInterationIcon import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.dynamicaddresses.CreateConsolidationTransactionUseCase import com.tangem.domain.dynamicaddresses.IsDynamicAddressesConsolidationRequiredUseCase @@ -20,6 +21,7 @@ import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository import com.tangem.domain.models.currency.CryptoCurrencyStatus import com.tangem.domain.models.network.Network import com.tangem.domain.models.wallet.UserWallet +import com.tangem.domain.models.wallet.isHotWallet import com.tangem.utils.Provider import com.tangem.domain.transaction.error.SendTransactionError import com.tangem.domain.transaction.usecase.GetFeeUseCase @@ -66,7 +68,6 @@ internal class DynamicAddressesDelegate @AssistedInject constructor( private val _bottomSheetConfig = MutableStateFlow( DynamicAddressesBottomSheetConfig.Enable( - isCardScanRequired = false, onEnableClick = {}, ), ) @@ -107,9 +108,9 @@ internal class DynamicAddressesDelegate @AssistedInject constructor( return } - val isCardScanRequired = !isXpubAlreadyDerived(network) + val iconRes = if (!isXpubAlreadyDerived(network)) walletInterationIcon(userWallet) else null _bottomSheetConfig.value = DynamicAddressesBottomSheetConfig.Enable( - isCardScanRequired = isCardScanRequired, + iconRes = iconRes, onEnableClick = ::onEnableClick, ) showBottomSheet() @@ -121,7 +122,6 @@ internal class DynamicAddressesDelegate @AssistedInject constructor( analyticsEventHandler.send(TokenDetailsAnalyticsEvent.ButtonEnableDynamicAddresses(currency)) coroutineScope.launch(dispatchers.main) { _bottomSheetConfig.value = DynamicAddressesBottomSheetConfig.Enable( - isCardScanRequired = false, isLoading = true, onEnableClick = {}, ) @@ -235,6 +235,8 @@ internal class DynamicAddressesDelegate @AssistedInject constructor( private fun showDisableSheetAndLoadFee() { resettableOneTimeEventSender.reset(NOT_ENOUGH_FEE_EVENT_KEY) _bottomSheetConfig.value = DynamicAddressesBottomSheetConfig.DisableWithConsolidation( + iconRes = walletInterationIcon(userWallet), + isHoldToConfirm = userWallet.isHotWallet, feeState = DynamicAddressesBottomSheetConfig.DisableFeeState.Loading, onDisableClick = ::onDisableClick, onRefreshFee = ::loadDisableFee, @@ -302,6 +304,8 @@ internal class DynamicAddressesDelegate @AssistedInject constructor( private fun disableWithConsolidationConfig(): DynamicAddressesBottomSheetConfig.DisableWithConsolidation { return _bottomSheetConfig.value as? DynamicAddressesBottomSheetConfig.DisableWithConsolidation ?: DynamicAddressesBottomSheetConfig.DisableWithConsolidation( + iconRes = walletInterationIcon(userWallet), + isHoldToConfirm = userWallet.isHotWallet, onDisableClick = ::onDisableClick, onRefreshFee = ::loadDisableFee, onReadMoreClick = ::onReadMoreClick, diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetConfig.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetConfig.kt index 7270a74d1e..a7bae77a6d 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetConfig.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetConfig.kt @@ -1,5 +1,6 @@ package com.tangem.feature.tokendetails.presentation.tokendetails.ui.components.dynamicaddresses +import androidx.annotation.DrawableRes import androidx.compose.runtime.Immutable import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent @@ -7,7 +8,7 @@ import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent internal sealed class DynamicAddressesBottomSheetConfig : TangemBottomSheetConfigContent { data class Enable( - val isCardScanRequired: Boolean, + @DrawableRes val iconRes: Int? = null, val isLoading: Boolean = false, val onEnableClick: () -> Unit, ) : DynamicAddressesBottomSheetConfig() @@ -18,6 +19,8 @@ internal sealed class DynamicAddressesBottomSheetConfig : TangemBottomSheetConfi ) : DynamicAddressesBottomSheetConfig() data class DisableWithConsolidation( + @DrawableRes val iconRes: Int? = null, + val isHoldToConfirm: Boolean = false, val feeState: DisableFeeState = DisableFeeState.Loading, val isSending: Boolean = false, val onDisableClick: () -> Unit, diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetContent.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetContent.kt index 1b40922d1d..34dd0fc2db 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetContent.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/components/dynamicaddresses/DynamicAddressesBottomSheetContent.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withLink import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview +import com.tangem.core.ui.components.HoldToConfirmButton import com.tangem.core.ui.components.PrimaryButton import com.tangem.core.ui.components.PrimaryButtonIconEnd import com.tangem.core.ui.components.TextShimmer @@ -92,7 +93,7 @@ internal fun DynamicAddressesEnableContent(content: DynamicAddressesBottomSheetC PrimaryButtonIconEnd( text = stringResourceSafe(id = R.string.dynamic_addresses_enter_main_button_title), - iconResId = if (content.isCardScanRequired) CoreR.drawable.ic_tangem_24 else null, + iconResId = content.iconRes, onClick = content.onEnableClick, modifier = Modifier.fillMaxWidth(), showProgress = content.isLoading, @@ -169,14 +170,24 @@ internal fun DynamicAddressesDisableWithConsolidationContent( Spacer(modifier = Modifier.height(TangemTheme.dimens.spacing24)) - PrimaryButtonIconEnd( - text = stringResourceSafe(id = R.string.dynamic_addresses_disable_main_button_title), - iconResId = CoreR.drawable.ic_tangem_24, - onClick = content.onDisableClick, - modifier = Modifier.fillMaxWidth(), - showProgress = content.isSending, - enabled = isConfirmEnabled, - ) + if (content.isHoldToConfirm) { + HoldToConfirmButton( + text = stringResourceSafe(id = R.string.dynamic_addresses_disable_main_button_title), + onConfirm = content.onDisableClick, + modifier = Modifier.fillMaxWidth(), + enabled = isConfirmEnabled, + isLoading = content.isSending, + ) + } else { + PrimaryButtonIconEnd( + text = stringResourceSafe(id = R.string.dynamic_addresses_disable_main_button_title), + iconResId = content.iconRes, + onClick = content.onDisableClick, + modifier = Modifier.fillMaxWidth(), + showProgress = content.isSending, + enabled = isConfirmEnabled, + ) + } Spacer(modifier = Modifier.height(TangemTheme.dimens.spacing16)) } @@ -398,7 +409,7 @@ private fun Preview_Enable() { TangemThemePreview { DynamicAddressesEnableContent( content = DynamicAddressesBottomSheetConfig.Enable( - isCardScanRequired = false, + iconRes = null, onEnableClick = {}, ), ) @@ -412,7 +423,7 @@ private fun Preview_EnableWithCardScan() { TangemThemePreview { DynamicAddressesEnableContent( content = DynamicAddressesBottomSheetConfig.Enable( - isCardScanRequired = true, + iconRes = CoreR.drawable.ic_tangem_24, onEnableClick = {}, ), ) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 8fbd09509c..ae683fa0aa 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,7 +5,7 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "develop-1506" +tangemBlockchainSdk = "develop-1509" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-614" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^