Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-12 16:19:45 +05:00
parent 84a82bdfb2
commit 9fee474c90
4 changed files with 33 additions and 30 deletions

View file

@ -69,10 +69,7 @@ private fun GiveTxPermissionBottomSheetContent(content: GiveTxPermissionBottomSh
),
)
Text(
text = stringResource(
id = R.string.give_permission_swap_subtitle,
data.currency,
),
text = content.data.subtitle.resolveReference(),
color = TangemTheme.colors.text.secondary,
style = TangemTheme.typography.body2,
textAlign = TextAlign.Center,
@ -109,8 +106,8 @@ private fun GiveTxPermissionBottomSheetContent(content: GiveTxPermissionBottomSh
// region dialog
if (isPermissionAlertShow) {
BasicDialog(
message = stringResource(id = R.string.swapping_approve_information_text),
title = stringResource(id = R.string.swapping_approve_information_title),
message = content.data.dialogText.resolveReference(),
title = stringResource(id = R.string.common_approve),
confirmButton = DialogButton { isPermissionAlertShow = false },
onDismissDialog = {},
)
@ -210,26 +207,17 @@ private fun AmountItem(
style = TangemTheme.typography.subtitle1,
maxLines = 1,
)
when (approveType) {
ApproveType.LIMITED -> {
Text(
text = stringResource(id = R.string.give_permission_current_transaction),
color = TangemTheme.colors.text.tertiary,
style = TangemTheme.typography.body1,
maxLines = 1,
)
}
ApproveType.UNLIMITED -> {
Icon(
painter = rememberVectorPainter(
image = ImageVector.vectorResource(id = R.drawable.ic_infinity_24),
),
tint = TangemTheme.colors.text.tertiary,
contentDescription = null,
modifier = Modifier.size(TangemTheme.dimens.size20),
)
}
}
Text(
text = stringResource(
when (approveType) {
ApproveType.LIMITED -> R.string.give_permission_current_transaction
ApproveType.UNLIMITED -> R.string.give_permission_unlimited
},
),
color = TangemTheme.colors.text.tertiary,
style = TangemTheme.typography.body1,
maxLines = 1,
)
}
DropdownSelector(
isExpanded = isExpandSelector,
@ -335,6 +323,8 @@ private val previewData = GiveTxPermissionBottomSheetConfig(
approveButton = ApprovePermissionButton(true) {},
cancelButton = CancelPermissionButton(true),
onChangeApproveType = { ApproveType.UNLIMITED },
subtitle = resourceReference(R.string.give_permission_staking_subtitle),
dialogText = resourceReference(R.string.give_permission_staking_footer),
),
onCancel = {},
)

View file

@ -11,6 +11,8 @@ sealed class GiveTxPermissionState {
data object Empty : GiveTxPermissionState()
data class ReadyForRequest(
val subtitle: TextReference,
val dialogText: TextReference,
val currency: String,
val amount: String,
val walletAddress: String,

View file

@ -332,6 +332,7 @@
<string name="markets_available_networks">Available networks</string>
<string name="markets_common_my_portfolio">My portfolio</string>
<string name="markets_common_title">Market</string>
<string name="markets_generate_addresses_notification">To generate addresses for selected networks, you need to attach a Tangem card</string>
<string name="markets_select_network">Select network</string>
<string name="markets_select_wallet">Select wallet</string>
<string name="markets_selector_interval_1m_title">1m</string>

View file

@ -218,6 +218,7 @@ internal class StateBuilder(
quoteModel = quoteModel,
fromToken = fromToken,
selectedFeeType = selectedFeeType,
providerName = swapProvider.name,
)
val feeState = createFeeState(quoteModel.txFee, selectedFeeType)
val fromCurrencyStatus = quoteModel.fromTokenInfo.cryptoCurrencyStatus
@ -258,6 +259,7 @@ internal class StateBuilder(
permissionState = convertPermissionState(
lastPermissionState = uiStateHolder.permissionState,
permissionDataState = quoteModel.permissionState,
providerName = swapProvider.name,
onGivePermissionClick = actions.onGivePermissionClick,
onChangeApproveType = actions.onChangeApproveType,
),
@ -317,11 +319,12 @@ internal class StateBuilder(
quoteModel: SwapState.QuotesLoadedState,
fromToken: CryptoCurrency,
selectedFeeType: FeeType,
providerName: String,
): List<SwapWarning> {
val warnings = mutableListOf<SwapWarning>()
maybeAddDomainWarnings(quoteModel, warnings)
maybeAddNeedReserveToCreateAccountWarning(quoteModel, warnings)
maybeAddPermissionNeededWarning(quoteModel, warnings, fromToken)
maybeAddPermissionNeededWarning(quoteModel, warnings, fromToken, providerName)
maybeAddNetworkFeeCoverageWarning(quoteModel, warnings, selectedFeeType)
maybeAddUnableCoverFeeWarning(quoteModel, fromToken, warnings)
maybeAddInsufficientFundsWarning(quoteModel, warnings)
@ -469,6 +472,7 @@ internal class StateBuilder(
quoteModel: SwapState.QuotesLoadedState,
warnings: MutableList<SwapWarning>,
fromToken: CryptoCurrency,
providerName: String,
) {
if (!quoteModel.preparedSwapConfigState.isAllowedToSpend &&
quoteModel.preparedSwapConfigState.feeState is SwapFeeState.Enough &&
@ -476,7 +480,7 @@ internal class StateBuilder(
) {
warnings.add(
SwapWarning.PermissionNeeded(
createPermissionNotificationConfig(fromToken.symbol),
createPermissionNotificationConfig(providerName, fromToken.symbol),
),
)
}
@ -1147,6 +1151,7 @@ internal class StateBuilder(
private fun convertPermissionState(
lastPermissionState: GiveTxPermissionState,
permissionDataState: PermissionDataState,
providerName: String,
onGivePermissionClick: () -> Unit,
onChangeApproveType: (ApproveType) -> Unit,
): GiveTxPermissionState {
@ -1180,6 +1185,11 @@ internal class StateBuilder(
enabled = true,
),
onChangeApproveType = onChangeApproveType,
subtitle = resourceReference(
id = R.string.give_permission_swap_subtitle,
formatArgs = wrappedList(providerName, permissionDataState.currency),
),
dialogText = resourceReference(R.string.swapping_approve_information_text),
)
}
}
@ -1403,12 +1413,12 @@ internal class StateBuilder(
}
// region warnings
private fun createPermissionNotificationConfig(fromTokenSymbol: String): NotificationConfig {
private fun createPermissionNotificationConfig(providerName: String, fromTokenSymbol: String): NotificationConfig {
return NotificationConfig(
title = resourceReference(R.string.express_provider_permission_needed),
subtitle = resourceReference(
id = R.string.give_permission_swap_subtitle,
formatArgs = wrappedList(fromTokenSymbol),
formatArgs = wrappedList(providerName, fromTokenSymbol),
),
iconResId = R.drawable.ic_locked_24,
)