Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-13 19:34:01 +04:00
parent 2b12514ee1
commit e5d588030b
5 changed files with 271 additions and 47 deletions

View file

@ -292,25 +292,25 @@
<string name="express_exchange_notification_verification_text">確認するには、プロバイダーのウェブサイトにアクセスしてください。</string>
<string name="express_exchange_notification_verification_title">プロバイダーによる本人確認手続きが必要です。</string>
<string name="express_exchange_status_bought">買付完了</string>
<string name="express_exchange_status_buying">買付</string>
<string name="express_exchange_status_buying">買付待ち</string>
<string name="express_exchange_status_buying_active">買付中...</string>
<string name="express_exchange_status_canceled">キャンセルされました</string>
<string name="express_exchange_status_confirmed">確認済み</string>
<string name="express_exchange_status_confirming">確認</string>
<string name="express_exchange_status_confirming_active">確認...</string>
<string name="express_exchange_status_exchanged">交換済み</string>
<string name="express_exchange_status_exchanging">交換</string>
<string name="express_exchange_status_exchanging_active">交換中...</string>
<string name="express_exchange_status_failed">失敗しました</string>
<string name="express_exchange_status_paused">停止中</string>
<string name="express_exchange_status_canceled">取引はキャンセルされました</string>
<string name="express_exchange_status_confirmed">入金確認済み</string>
<string name="express_exchange_status_confirming">確認待ち</string>
<string name="express_exchange_status_confirming_active">確認待ち...</string>
<string name="express_exchange_status_exchanged">交換完了</string>
<string name="express_exchange_status_exchanging">交換待ち</string>
<string name="express_exchange_status_exchanging_active">スワップ待ち...</string>
<string name="express_exchange_status_failed">交換に失敗しました</string>
<string name="express_exchange_status_paused">交換は一時停止されました</string>
<string name="express_exchange_status_received">入金済み</string>
<string name="express_exchange_status_receiving">入金待ち</string>
<string name="express_exchange_status_receiving_active">入金待ち...</string>
<string name="express_exchange_status_refunded">返金済み</string>
<string name="express_exchange_status_refunding">処理中</string>
<string name="express_exchange_status_refunded">払い戻し完了</string>
<string name="express_exchange_status_refunding">払い戻し待ち</string>
<string name="express_exchange_status_sending">あなたへ送金しています</string>
<string name="express_exchange_status_sending_active">送金中...</string>
<string name="express_exchange_status_sent">送金済み</string>
<string name="express_exchange_status_sending_active">資金の送金中...</string>
<string name="express_exchange_status_sent">送金済み資金</string>
<string name="express_exchange_status_subtitle">プロバイダー提供のデータ。推定額は市場動向により変更される場合があります。</string>
<string name="express_exchange_status_title">交換ステータス</string>
<string name="express_exchange_status_verifying">確認が必要です</string>
@ -334,6 +334,7 @@
<string name="express_status_hide_button_text">この取引を非表示にする</string>
<string name="express_status_hide_dialog_text">一度非表示にすると、取引状況を再度表示することはできません。代わりに、スワイプして閉じることができます。</string>
<string name="express_status_hide_dialog_title">取引状況を非表示にしますか?</string>
<string name="express_swap_with">スワップする</string>
<string name="express_token_list_empty_search">トークンが見つかりません。別のリクエストをお試しください。</string>
<string name="express_transaction_id">ID: %s</string>
<string name="express_transaction_id_copied">取引IDをコピーしました</string>
@ -1244,6 +1245,7 @@
<string name="wc_alert_verified_domain_title">検証済みドメイン</string>
<string name="wc_alert_wrong_card_description">アプリで間違ったカードまたはリングが選択されました</string>
<string name="wc_alert_wrong_card_title">問題が起きています</string>
<string name="wc_allow_to_spend">使用を許可する</string>
<string name="wc_common_address">アドレス</string>
<string name="wc_common_connect">接続する</string>
<string name="wc_common_network">ネットワーク</string>
@ -1259,6 +1261,7 @@
<string name="wc_connections">接続</string>
<string name="wc_contents">内容</string>
<string name="wc_copy_data_button_text">データをコピー</string>
<string name="wc_custom_allowance_title">使用可能量の設定</string>
<string name="wc_disconnect_all">すべての接続を解除する</string>
<string name="wc_disconnect_all_alert_desc">すべてのdAppsの接続解除に関するテキスト</string>
<string name="wc_disconnect_all_alert_title">すべてのdAppを接続解除する</string>
@ -1274,6 +1277,7 @@
<string name="wc_transaction_info_to_title">宛先</string>
<string name="wc_transaction_request">取引リクエスト</string>
<string name="wc_transaction_request_title">取引リクエスト</string>
<string name="wc_unlimited_amount">無制限</string>
<string name="wc_wallet_connect">ウォレットコネクト</string>
<string name="welcome_interrupted_backup_alert_discard">破棄</string>
<string name="welcome_interrupted_backup_alert_message">バックアップが中断されました。再開しますか?</string>

View file

@ -297,26 +297,26 @@
<string name="express_exchange_notification_refund_title">Сумма была возвращена в %1$s (%2$s сети)</string>
<string name="express_exchange_notification_verification_text">Посетите сайт провайдера для проверки</string>
<string name="express_exchange_notification_verification_title">Провайдер запрашивает прохождение верификации</string>
<string name="express_exchange_status_bought">Куплено</string>
<string name="express_exchange_status_buying">Покупка</string>
<string name="express_exchange_status_buying_active">Покупка...</string>
<string name="express_exchange_status_canceled">Отменен</string>
<string name="express_exchange_status_confirmed">Подтверждено</string>
<string name="express_exchange_status_confirming">Подтверждение</string>
<string name="express_exchange_status_confirming_active">Подтверждение...</string>
<string name="express_exchange_status_exchanged">Обменяно</string>
<string name="express_exchange_status_exchanging">Обмен</string>
<string name="express_exchange_status_exchanging_active">Обмен...</string>
<string name="express_exchange_status_failed">Неудачно</string>
<string name="express_exchange_status_paused">Приостановлен</string>
<string name="express_exchange_status_bought">Покупка завершена</string>
<string name="express_exchange_status_buying">Ожидание покупки</string>
<string name="express_exchange_status_buying_active">Ожидание покупки...</string>
<string name="express_exchange_status_canceled">Транзакция отменена</string>
<string name="express_exchange_status_confirmed">Депозит подтверждён</string>
<string name="express_exchange_status_confirming">Ожидает подтверждения</string>
<string name="express_exchange_status_confirming_active">Ожидает подтверждения...</string>
<string name="express_exchange_status_exchanged">Обмен завершён</string>
<string name="express_exchange_status_exchanging">Ожидает обмена</string>
<string name="express_exchange_status_exchanging_active">Ожидает обмена...</string>
<string name="express_exchange_status_failed">Ошибка обмена</string>
<string name="express_exchange_status_paused">Обмен остановлен</string>
<string name="express_exchange_status_received">Депозит получен</string>
<string name="express_exchange_status_receiving">Ожидание депозита</string>
<string name="express_exchange_status_receiving_active">Ожидаем пополнения...</string>
<string name="express_exchange_status_refunded">Возвращено</string>
<string name="express_exchange_status_refunded">Средства возвращены</string>
<string name="express_exchange_status_refunding">Возврат средств</string>
<string name="express_exchange_status_sending">Отправляем </string>
<string name="express_exchange_status_sending">Отправка средств</string>
<string name="express_exchange_status_sending_active">Отправка средств...</string>
<string name="express_exchange_status_sent">Отправлено</string>
<string name="express_exchange_status_sent">Средства отправлены</string>
<string name="express_exchange_status_subtitle">Данные провайдера. Сумма к получению может измениться в зависимости от рыночных условий.</string>
<string name="express_exchange_status_title">Статус обмена</string>
<string name="express_exchange_status_verifying">Требуется верификация</string>

View file

@ -295,26 +295,26 @@
<string name="express_exchange_notification_refund_title">The amount was refunded in %1$s (%2$s network)</string>
<string name="express_exchange_notification_verification_text">Visit providers website for verification</string>
<string name="express_exchange_notification_verification_title">KYC verification required by provider</string>
<string name="express_exchange_status_bought">Bought</string>
<string name="express_exchange_status_buying">Buying</string>
<string name="express_exchange_status_buying_active">Buying...</string>
<string name="express_exchange_status_canceled">Canceled</string>
<string name="express_exchange_status_confirmed">Confirmed</string>
<string name="express_exchange_status_confirming">Confirming</string>
<string name="express_exchange_status_confirming_active">Confirming...</string>
<string name="express_exchange_status_exchanged">Exchanged</string>
<string name="express_exchange_status_exchanging">Exchanging</string>
<string name="express_exchange_status_exchanging_active">Exchanging...</string>
<string name="express_exchange_status_failed">Failed</string>
<string name="express_exchange_status_paused">Paused</string>
<string name="express_exchange_status_bought">Purchase completed</string>
<string name="express_exchange_status_buying">Awaiting Purchase</string>
<string name="express_exchange_status_buying_active">Awaiting Purchase...</string>
<string name="express_exchange_status_canceled">Transaction canceled</string>
<string name="express_exchange_status_confirmed">Deposit confirmed</string>
<string name="express_exchange_status_confirming">Waiting for confirmation</string>
<string name="express_exchange_status_confirming_active">Waiting for confirmation...</string>
<string name="express_exchange_status_exchanged">Exchange completed</string>
<string name="express_exchange_status_exchanging">Waiting for exchange</string>
<string name="express_exchange_status_exchanging_active">Waiting for exchange...</string>
<string name="express_exchange_status_failed">Exchange failed</string>
<string name="express_exchange_status_paused">Exchange paused</string>
<string name="express_exchange_status_received">Deposit received</string>
<string name="express_exchange_status_receiving">Awaiting deposit</string>
<string name="express_exchange_status_receiving">Waiting for deposit</string>
<string name="express_exchange_status_receiving_active">Awaiting deposit...</string>
<string name="express_exchange_status_refunded">Refunded</string>
<string name="express_exchange_status_refunding">Refunding</string>
<string name="express_exchange_status_refunded">Refund completed</string>
<string name="express_exchange_status_refunding">Waiting for refund</string>
<string name="express_exchange_status_sending">Sending to you</string>
<string name="express_exchange_status_sending_active">Sending to you...</string>
<string name="express_exchange_status_sent">Sent</string>
<string name="express_exchange_status_sending_active">Sending funds...</string>
<string name="express_exchange_status_sent">Funds sent</string>
<string name="express_exchange_status_subtitle">Provider-sourced data. Estimated amount subject to change due to market conditions.</string>
<string name="express_exchange_status_title">Exchange status</string>
<string name="express_exchange_status_verifying">Verification required</string>
@ -338,6 +338,7 @@
<string name="express_status_hide_button_text">Hide this transaction</string>
<string name="express_status_hide_dialog_text">Once hidden, the transaction status cannot be viewed again. You can simply swipe to dismiss instead.</string>
<string name="express_status_hide_dialog_title">Hide Transaction Status?</string>
<string name="express_swap_with">Swap with</string>
<string name="express_token_list_empty_search">No tokens found. Please try another request</string>
<string name="express_transaction_id">ID: %s</string>
<string name="express_transaction_id_copied">Transaction ID copied</string>
@ -1337,6 +1338,7 @@
<string name="wc_transaction_info_to_title">To</string>
<string name="wc_transaction_request">Transaction request</string>
<string name="wc_transaction_request_title">Transaction request</string>
<string name="wc_unlimited_amount">Unlimited Amount</string>
<string name="wc_wallet_connect">Wallet connect</string>
<string name="welcome_interrupted_backup_alert_discard">Discard</string>
<string name="welcome_interrupted_backup_alert_message">You have an interrupted backup. Do you want to resume?</string>

View file

@ -28,4 +28,4 @@ internal data class WcCustomAllowanceUM(
val tokenIconUrl: String,
val amountText: String,
val isUnlimited: Boolean,
)
) : TangemBottomSheetConfigContent

View file

@ -0,0 +1,218 @@
package com.tangem.features.walletconnect.transaction.ui.approve
import android.content.res.Configuration
import androidx.annotation.DrawableRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Devices
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
import coil.compose.AsyncImage
import com.tangem.core.ui.components.PrimaryButton
import com.tangem.core.ui.components.TangemSwitch
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheet
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetTitle
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.walletconnect.impl.R
import com.tangem.features.walletconnect.transaction.entity.approve.WcCustomAllowanceUM
@Composable
internal fun WcCustomAllowanceContent(
allowance: WcCustomAllowanceUM,
onAmountChange: (String) -> Unit,
onToggleChange: (Boolean) -> Unit,
onClickDone: () -> Unit,
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
.background(TangemTheme.colors.background.tertiary)
.fillMaxWidth()
.padding(TangemTheme.dimens.size16),
) {
AmountTextField(
allowance = allowance,
onAmountChange = onAmountChange,
)
Spacer(modifier = Modifier.height(TangemTheme.dimens.spacing16))
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.clip(RoundedCornerShape(TangemTheme.dimens.radius14))
.background(color = TangemTheme.colors.background.action)
.padding(TangemTheme.dimens.spacing16)
.fillMaxWidth(),
) {
Text(
text = stringResourceSafe(R.string.wc_unlimited_amount),
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
modifier = Modifier.weight(1f),
)
TangemSwitch(
checked = allowance.isUnlimited,
onCheckedChange = onToggleChange,
)
}
Spacer(modifier = Modifier.height(TangemTheme.dimens.spacing60))
PrimaryButton(
modifier = Modifier.fillMaxWidth(),
text = stringResourceSafe(R.string.common_done),
onClick = onClickDone,
)
}
}
@Composable
private fun AmountTextField(
allowance: WcCustomAllowanceUM,
onAmountChange: (String) -> Unit,
modifier: Modifier = Modifier,
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
.clip(RoundedCornerShape(TangemTheme.dimens.radius14))
.background(color = TangemTheme.colors.background.action)
.padding(
end = TangemTheme.dimens.size8,
top = TangemTheme.dimens.size4,
bottom = TangemTheme.dimens.size4,
)
.fillMaxWidth(),
) {
TextField(
value = allowance.amountText,
onValueChange = onAmountChange,
label = {
Text(
text = stringResourceSafe(R.string.send_amount_label),
style = TangemTheme.typography.subtitle2,
color = TangemTheme.colors.text.tertiary,
)
},
textStyle = TangemTheme.typography.body1,
modifier = Modifier.weight(1f),
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Number,
),
colors = TextFieldDefaults.colors(
unfocusedContainerColor = Color.Transparent,
focusedContainerColor = Color.Transparent,
focusedTextColor = TangemTheme.colors.text.primary1,
unfocusedTextColor = TangemTheme.colors.text.primary1,
focusedPlaceholderColor = TangemTheme.colors.text.disabled,
unfocusedPlaceholderColor = TangemTheme.colors.text.disabled,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
cursorColor = TangemTheme.colors.icon.primary1,
),
)
TokenWithNetworkIcon(
tokenIconUrl = allowance.tokenIconUrl,
networkIconRes = allowance.networkIconRes,
)
}
}
@Composable
private fun TokenWithNetworkIcon(
tokenIconUrl: String,
@DrawableRes networkIconRes: Int,
modifier: Modifier = Modifier,
) {
Box(
modifier = modifier
.size(TangemTheme.dimens.size48),
) {
AsyncImage(
modifier = Modifier
.aspectRatio(1f)
.clip(CircleShape)
.align(Alignment.Center)
.padding(TangemTheme.dimens.spacing8),
model = tokenIconUrl,
contentDescription = null,
)
Image(
modifier = Modifier
.align(Alignment.TopEnd)
.size(TangemTheme.dimens.size18)
.border(TangemTheme.dimens.size2, TangemTheme.colors.background.action, CircleShape)
.padding(TangemTheme.dimens.spacing2),
painter = painterResource(id = networkIconRes),
contentDescription = null,
)
}
}
@Composable
@Preview(showBackground = true, device = Devices.PIXEL_7_PRO)
@Preview(showBackground = true, device = Devices.PIXEL_7_PRO, uiMode = Configuration.UI_MODE_NIGHT_YES)
internal fun PreviewWcCustomAllowanceContent(
@PreviewParameter(WcCustomAllowanceStateProvider::class) state: WcCustomAllowanceUM,
) {
TangemThemePreview {
TangemModalBottomSheet<WcCustomAllowanceUM>(
config = TangemBottomSheetConfig(
isShown = true,
onDismissRequest = {},
content = state,
),
containerColor = TangemTheme.colors.background.tertiary,
title = {
TangemModalBottomSheetTitle(
title = resourceReference(R.string.wc_custom_allowance_title),
endIconRes = null,
onEndClick = {},
startIconRes = R.drawable.ic_back_24,
onStartClick = {},
)
},
content = {
WcCustomAllowanceContent(
allowance = state,
onAmountChange = {},
onToggleChange = {},
onClickDone = {},
)
},
)
}
}
private class WcCustomAllowanceStateProvider : CollectionPreviewParameterProvider<WcCustomAllowanceUM>(
listOf(
WcCustomAllowanceUM(
networkIconRes = R.drawable.img_eth_22,
tokenIconUrl = "https://tangem.com",
amountText = "100",
isUnlimited = false,
),
),
)