Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-14 11:15:23 +03:00
parent f153804a41
commit 7b76b6f575
5 changed files with 36 additions and 18 deletions

View file

@ -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? {

View file

@ -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>(
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,

View file

@ -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,

View file

@ -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 = {},
),
)

View file

@ -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 ^