Updated on 2026-08-14

This commit is contained in:
Tangem 2023-01-19 20:27:59 +08:00
parent 6d69a5706a
commit 9c1931f7d7
81 changed files with 686 additions and 981 deletions

View file

@ -63,7 +63,7 @@ private fun AgreementHtmlView(url: String) {
@Preview
@Composable
fun Preview_AgreementBottomSheet_InLightTheme() {
private fun Preview_AgreementBottomSheet_InLightTheme() {
TangemTheme(isDark = false) {
AgreementBottomSheetContent(url = "https://tangem.com/en/")
}
@ -71,7 +71,7 @@ fun Preview_AgreementBottomSheet_InLightTheme() {
@Preview
@Composable
fun Preview_AgreementBottomSheet_InDarkTheme() {
private fun Preview_AgreementBottomSheet_InDarkTheme() {
TangemTheme(isDark = true) {
AgreementBottomSheetContent(url = "https://tangem.com/en/")
}

View file

@ -19,7 +19,7 @@ import com.tangem.core.ui.res.TangemTheme
import com.tangem.feature.referral.presentation.R
@Composable
internal fun AgreementText(@StringRes firstPartResId: Int, onClicked: () -> Unit) {
internal fun AgreementText(@StringRes firstPartResId: Int, onClick: () -> Unit) {
val agreementText = annotatedAgreementString(firstPart = stringResource(firstPartResId))
ClickableText(
text = agreementText,
@ -31,7 +31,7 @@ internal fun AgreementText(@StringRes firstPartResId: Int, onClicked: () -> Unit
onClick = {
val clickableSpanStyle = requireNotNull(agreementText.spanStyles.getOrNull(1))
if (it in clickableSpanStyle.start..clickableSpanStyle.end) {
onClicked()
onClick()
}
},
)
@ -54,20 +54,20 @@ private fun annotatedAgreementString(firstPart: String): AnnotatedString {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_AgreementText_InLightTheme() {
private fun Preview_AgreementText_InLightTheme() {
TangemTheme(isDark = false) {
Box(modifier = Modifier.background(TangemTheme.colors.background.primary)) {
AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClicked = {})
AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClick = {})
}
}
}
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_AgreementText_InDarkTheme() {
private fun Preview_AgreementText_InDarkTheme() {
TangemTheme(isDark = true) {
Box(modifier = Modifier.background(TangemTheme.colors.background.primary)) {
AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClicked = {})
AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClick = {})
}
}
}

View file

@ -12,37 +12,37 @@ import com.tangem.core.ui.res.TangemTheme
import com.tangem.feature.referral.presentation.R
@Composable
internal fun NonParticipateBottomBlock(onAgreementClicked: () -> Unit, onParticipateClicked: () -> Unit) {
internal fun NonParticipateBottomBlock(onAgreementClick: () -> Unit, onParticipateClick: () -> Unit) {
Column {
AgreementText(
firstPartResId = R.string.referral_tos_not_enroled_prefix,
onClicked = onAgreementClicked,
onClick = onAgreementClick,
)
PrimaryEndIconButton(
modifier = Modifier.padding(all = TangemTheme.dimens.spacing16),
text = stringResource(id = R.string.referral_button_participate),
iconResId = R.drawable.ic_tangem_24,
onClicked = onParticipateClicked,
onClick = onParticipateClick,
)
}
}
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_NonParticipateBottomBlock_InLightTheme() {
private fun Preview_NonParticipateBottomBlock_InLightTheme() {
TangemTheme(isDark = false) {
Column(Modifier.background(TangemTheme.colors.background.primary)) {
NonParticipateBottomBlock(onAgreementClicked = {}, onParticipateClicked = {})
NonParticipateBottomBlock(onAgreementClick = {}, onParticipateClick = {})
}
}
}
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_NonParticipateBottomBlock_InDarkTheme() {
private fun Preview_NonParticipateBottomBlock_InDarkTheme() {
TangemTheme(isDark = true) {
Column(Modifier.background(TangemTheme.colors.background.primary)) {
NonParticipateBottomBlock(onAgreementClicked = {}, onParticipateClicked = {})
NonParticipateBottomBlock(onAgreementClick = {}, onParticipateClick = {})
}
}
}

View file

@ -36,10 +36,10 @@ internal fun ParticipateBottomBlock(
purchasedWalletCount: Int,
code: String,
shareLink: String,
onAgreementClicked: () -> Unit,
showCopySnackbar: () -> Unit,
onCopyClicked: () -> Unit,
onShareClicked: () -> Unit,
onAgreementClick: () -> Unit,
onShowCopySnackbar: () -> Unit,
onCopyClick: () -> Unit,
onShareClick: () -> Unit,
) {
Column(
modifier = Modifier
@ -62,11 +62,11 @@ internal fun ParticipateBottomBlock(
AdditionalButtons(
code = code,
shareLink = shareLink,
showCopySnackbar = showCopySnackbar,
onCopyClicked = onCopyClicked,
onShareClicked = onShareClicked,
onShowCopySnackbar = onShowCopySnackbar,
onCopyClick = onCopyClick,
onShareClick = onShareClick,
)
AgreementText(firstPartResId = R.string.referral_tos_enroled_prefix, onClicked = onAgreementClicked)
AgreementText(firstPartResId = R.string.referral_tos_enroled_prefix, onClick = onAgreementClick)
}
}
@ -106,9 +106,9 @@ private fun PersonalCodeCard(code: String) {
private fun AdditionalButtons(
code: String,
shareLink: String,
showCopySnackbar: () -> Unit,
onCopyClicked: () -> Unit,
onShareClicked: () -> Unit,
onShowCopySnackbar: () -> Unit,
onCopyClick: () -> Unit,
onShareClick: () -> Unit,
) {
val clipboardManager = LocalClipboardManager.current
val hapticFeedback = LocalHapticFeedback.current
@ -121,11 +121,11 @@ private fun AdditionalButtons(
modifier = Modifier.weight(1f),
text = stringResource(id = R.string.common_copy),
iconResId = R.drawable.ic_copy_24,
onClicked = {
onCopyClicked.invoke()
onClick = {
onCopyClick.invoke()
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
clipboardManager.setText(AnnotatedString(code))
showCopySnackbar()
onShowCopySnackbar()
},
)
@ -134,8 +134,8 @@ private fun AdditionalButtons(
modifier = Modifier.weight(1f),
text = stringResource(id = R.string.common_share),
iconResId = R.drawable.ic_share_24,
onClicked = {
onShareClicked.invoke()
onClick = {
onShareClick.invoke()
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
context.shareText(context.getString(R.string.referral_share_link, shareLink))
},
@ -155,17 +155,17 @@ private fun Context.shareText(text: String) {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ParticipateBottomBlock_InLightTheme() {
private fun Preview_ParticipateBottomBlock_InLightTheme() {
TangemTheme(isDark = false) {
Column(Modifier.background(TangemTheme.colors.background.primary)) {
ParticipateBottomBlock(
purchasedWalletCount = 3,
code = "x4JdK",
shareLink = "",
onAgreementClicked = {},
showCopySnackbar = {},
onCopyClicked = {},
onShareClicked = {},
onAgreementClick = {},
onShowCopySnackbar = {},
onCopyClick = {},
onShareClick = {},
)
}
}
@ -173,17 +173,17 @@ fun Preview_ParticipateBottomBlock_InLightTheme() {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ParticipateBottomBlock_InDarkTheme() {
private fun Preview_ParticipateBottomBlock_InDarkTheme() {
TangemTheme(isDark = true) {
Column(Modifier.background(TangemTheme.colors.background.primary)) {
ParticipateBottomBlock(
purchasedWalletCount = 3,
code = "x4JdK",
shareLink = "",
onAgreementClicked = {},
showCopySnackbar = {},
onCopyClicked = {},
onShareClicked = {},
onAgreementClick = {},
onShowCopySnackbar = {},
onCopyClick = {},
onShareClick = {},
)
}
}

View file

@ -101,7 +101,7 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
content = {
ReferralContent(
stateHolder = stateHolder,
onAgreementClicked = {
onAgreementClick = {
stateHolder.analytics.onAgreementClicked.invoke()
coroutineScope.launch {
if (bottomSheetScaffoldState.bottomSheetState.isCollapsed) {
@ -119,7 +119,7 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
@OptIn(ExperimentalFoundationApi::class)
@Composable
private fun ReferralContent(stateHolder: ReferralStateHolder, onAgreementClicked: () -> Unit) {
private fun ReferralContent(stateHolder: ReferralStateHolder, onAgreementClick: () -> Unit) {
val isCopyButtonPressed = remember { mutableStateOf(false) }
Box {
@ -140,8 +140,8 @@ private fun ReferralContent(stateHolder: ReferralStateHolder, onAgreementClicked
item {
ReferralInfo(
stateHolder = stateHolder,
onAgreementClicked = onAgreementClicked,
showCopySnackbar = { isCopyButtonPressed.value = true },
onAgreementClick = onAgreementClick,
onShowCopySnackbar = { isCopyButtonPressed.value = true },
)
}
}
@ -179,8 +179,8 @@ private fun Header() {
@Composable
private fun ReferralInfo(
stateHolder: ReferralStateHolder,
onAgreementClicked: () -> Unit,
showCopySnackbar: () -> Unit,
onAgreementClick: () -> Unit,
onShowCopySnackbar: () -> Unit,
) {
when (val state = stateHolder.referralInfoState) {
is ReferralInfoState.ParticipantContent -> {
@ -189,18 +189,18 @@ private fun ReferralInfo(
purchasedWalletCount = state.purchasedWalletCount,
code = state.code,
shareLink = state.shareLink,
onAgreementClicked = onAgreementClicked,
showCopySnackbar = showCopySnackbar,
onCopyClicked = stateHolder.analytics.onCopyClicked,
onShareClicked = stateHolder.analytics.onShareClicked,
onAgreementClick = onAgreementClick,
onShowCopySnackbar = onShowCopySnackbar,
onCopyClick = stateHolder.analytics.onCopyClicked,
onShareClick = stateHolder.analytics.onShareClicked,
)
}
is ReferralInfoState.NonParticipantContent -> {
Conditions(state = state)
VerticalSpacer(spaceResId = R.dimen.spacing44)
NonParticipateBottomBlock(
onAgreementClicked = onAgreementClicked,
onParticipateClicked = state.onParticipateClicked,
onAgreementClick = onAgreementClick,
onParticipateClick = state.onParticipateClicked,
)
}
is ReferralInfoState.Loading -> {
@ -465,7 +465,7 @@ private fun BoxScope.CopySnackbarHost(isCopyButtonPressed: MutableState<Boolean>
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ReferralScreen_Participant_InLightTheme() {
private fun Preview_ReferralScreen_Participant_InLightTheme() {
TangemTheme(isDark = false) {
ReferralScreen(
stateHolder = ReferralStateHolder(
@ -493,7 +493,7 @@ fun Preview_ReferralScreen_Participant_InLightTheme() {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ReferralScreen_Participant_InDarkTheme() {
private fun Preview_ReferralScreen_Participant_InDarkTheme() {
TangemTheme(isDark = true) {
ReferralScreen(
stateHolder = ReferralStateHolder(
@ -521,7 +521,7 @@ fun Preview_ReferralScreen_Participant_InDarkTheme() {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ReferralScreen_NonParticipant_InLightTheme() {
private fun Preview_ReferralScreen_NonParticipant_InLightTheme() {
TangemTheme(isDark = false) {
ReferralScreen(
stateHolder = ReferralStateHolder(
@ -546,7 +546,7 @@ fun Preview_ReferralScreen_NonParticipant_InLightTheme() {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ReferralScreen_NonParticipant_InDarkTheme() {
private fun Preview_ReferralScreen_NonParticipant_InDarkTheme() {
TangemTheme(isDark = true) {
ReferralScreen(
stateHolder = ReferralStateHolder(
@ -571,7 +571,7 @@ fun Preview_ReferralScreen_NonParticipant_InDarkTheme() {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ReferralScreen_Loading_InLightTheme() {
private fun Preview_ReferralScreen_Loading_InLightTheme() {
TangemTheme(isDark = false) {
ReferralScreen(
stateHolder = ReferralStateHolder(
@ -590,7 +590,7 @@ fun Preview_ReferralScreen_Loading_InLightTheme() {
@Preview(widthDp = 360, showBackground = true)
@Composable
fun Preview_ReferralScreen_Loading_InDarkTheme() {
private fun Preview_ReferralScreen_Loading_InDarkTheme() {
TangemTheme(isDark = true) {
ReferralScreen(
stateHolder = ReferralStateHolder(

View file

@ -88,10 +88,11 @@ fun SwapPermissionBottomSheetContent(
SecondaryButton(
text = stringResource(id = R.string.common_cancel),
modifier = Modifier.fillMaxWidth(),
) {
data?.cancelButton?.onClick?.invoke()
onCancel()
}
onClick = {
data?.cancelButton?.onClick?.invoke()
onCancel()
},
)
SpacerH32()
@ -195,7 +196,7 @@ private fun FeeItem(fee: String) {
@Preview
@Composable
fun Preview_AgreementBottomSheet_InLightTheme() {
private fun Preview_AgreementBottomSheet_InLightTheme() {
TangemTheme(isDark = false) {
SwapPermissionBottomSheetContent(data = previewData) {}
}
@ -203,7 +204,7 @@ fun Preview_AgreementBottomSheet_InLightTheme() {
@Preview
@Composable
fun Preview_AgreementBottomSheet_InDarkTheme() {
private fun Preview_AgreementBottomSheet_InDarkTheme() {
TangemTheme(isDark = true) {
SwapPermissionBottomSheetContent(data = previewData) {}
}

View file

@ -51,11 +51,7 @@ import com.tangem.feature.swap.presentation.R
@Suppress("LongMethod")
@Composable
internal fun SwapScreenContent(
modifier: Modifier = Modifier,
state: SwapStateHolder,
onPermissionWarningClick: () -> Unit,
) {
internal fun SwapScreenContent(state: SwapStateHolder, onPermissionWarningClick: () -> Unit) {
val keyboard by keyboardAsState()
Box(
@ -65,7 +61,7 @@ internal fun SwapScreenContent(
) {
Column(
modifier = modifier
modifier = Modifier
.fillMaxWidth()
.background(color = TangemTheme.colors.background.primary)
.verticalScroll(rememberScrollState())
@ -308,7 +304,7 @@ private val state = SwapStateHolder(
@Preview
@Composable
fun SwapScreenContentPreview() {
private fun SwapScreenContentPreview() {
TangemTheme(isDark = false) {
SwapScreenContent(state = state) {}
}

View file

@ -49,8 +49,8 @@ fun SwapSelectTokenScreen(state: SwapSelectTokenStateHolder, onBack: () -> Unit)
title = stringResource(R.string.swapping_token_list_your_title),
onBackClick = onBack,
placeholderSearchText = stringResource(id = R.string.search_tokens_title),
onSearchChanged = state.onSearchEntered,
onSearchDisplayClosed = { state.onSearchEntered("") },
onSearchChange = state.onSearchEntered,
onSearchDisplayClose = { state.onSearchEntered("") },
)
},
)
@ -85,7 +85,7 @@ private fun ListOfTokens(state: SwapSelectTokenStateHolder, modifier: Modifier =
}
@Composable
private fun TokenItem(token: TokenToSelect, onTokenClick: (String) -> Unit) {
private fun TokenItem(token: TokenToSelect, onTokenClick: () -> Unit) {
Row(
modifier = Modifier
.fillMaxWidth()
@ -94,7 +94,7 @@ private fun TokenItem(token: TokenToSelect, onTokenClick: (String) -> Unit) {
bottom = TangemTheme.dimens.spacing14,
end = TangemTheme.dimens.spacing16,
)
.clickable { onTokenClick(token.id) },
.clickable(onClick = onTokenClick),
verticalAlignment = Alignment.CenterVertically,
) {
TokenIcon(token = token)
@ -209,7 +209,7 @@ private val tokenNotAvailable = token.copy(available = false)
@Preview
@Composable
fun TokenScreenPreview() {
private fun TokenScreenPreview() {
SwapSelectTokenScreen(
state = SwapSelectTokenStateHolder(
listOf(token, tokenNotAvailable, token), {}, {},

View file

@ -48,7 +48,7 @@ private val state = SwapSuccessStateHolder(
@Preview(showBackground = true)
@Composable
fun Preview_Success_InLightTheme() {
private fun Preview_Success_InLightTheme() {
TangemTheme(isDark = false) {
SwapSuccessScreen(state) {}
}
@ -56,7 +56,7 @@ fun Preview_Success_InLightTheme() {
@Preview(showBackground = true)
@Composable
fun Preview_Success_InDarkTheme() {
private fun Preview_Success_InDarkTheme() {
TangemTheme(isDark = true) {
SwapSuccessScreen(state) {}
}

View file

@ -63,7 +63,6 @@ import com.valentinilk.shimmer.shimmer
@Suppress("LongParameterList")
@Composable
fun TransactionCard(
modifier: Modifier = Modifier,
type: TransactionCardType,
balance: String,
amount: String?,
@ -74,7 +73,6 @@ fun TransactionCard(
onChangeTokenClick: (() -> Unit)? = null,
) {
Card(
modifier = modifier,
shape = RoundedCornerShape(TangemTheme.dimens.radius12),
backgroundColor = TangemTheme.colors.background.primary,
elevation = TangemTheme.dimens.elevation2,
@ -211,7 +209,7 @@ private fun Content(
is TransactionCardType.SendCard -> {
AutoSizeTextField(
amount = amount ?: "1",
onAmoutChanged = { type.onAmountChanged(it) },
onAmountChange = { type.onAmountChanged(it) },
)
}
}
@ -247,10 +245,7 @@ private fun Content(
@Suppress("MagicNumber")
@Composable
private fun AutoSizeTextField(
amount: String,
onAmoutChanged: (String) -> Unit,
) {
private fun AutoSizeTextField(amount: String, onAmountChange: (String) -> Unit) {
val focusManager = LocalFocusManager.current
val textFieldFocusRequester = remember { FocusRequester() }
@ -281,7 +276,7 @@ private fun AutoSizeTextField(
BasicTextField(
value = amount,
onValueChange = {
onAmoutChanged(it)
onAmountChange(it)
},
singleLine = true,
modifier = Modifier
@ -338,7 +333,7 @@ fun Token(
.crossfade(true)
.build(),
loading = { TokenImageShimmer(modifier = tokenImageModifier) },
error = { CurrencyPlaceholderIcon(modifier = tokenImageModifier, tokenCurrency) },
error = { CurrencyPlaceholderIcon(modifier = tokenImageModifier, id = tokenCurrency) },
contentDescription = null,
)
@ -412,7 +407,7 @@ private fun TokenImageShimmer(
@Preview(widthDp = 328, heightDp = 116, showBackground = true)
@Composable
fun Preview_SwapMainCard_InLightTheme() {
private fun Preview_SwapMainCard_InLightTheme() {
TangemTheme(isDark = false) {
TransactionCardPreview()
}
@ -420,7 +415,7 @@ fun Preview_SwapMainCard_InLightTheme() {
@Preview(widthDp = 328, heightDp = 116, showBackground = true)
@Composable
fun Preview_SwapMainCard_InDarkTheme() {
private fun Preview_SwapMainCard_InDarkTheme() {
TangemTheme(isDark = true) {
TransactionCardPreview()
}