Updated on 2026-08-14

This commit is contained in:
Tangem 2024-05-31 10:30:37 +05:00
parent 92605c988e
commit 5dd22fc686
7 changed files with 129 additions and 20 deletions

View file

@ -1,5 +1,6 @@
package com.tangem.features.send.impl.presentation.ui
import android.content.res.Configuration
import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.AnimatedContentTransitionScope
@ -12,15 +13,21 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.tangem.core.ui.components.appbar.AppBarWithBackButtonAndIcon
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.send.impl.R
import com.tangem.features.send.impl.presentation.state.SendUiCurrentScreen
import com.tangem.features.send.impl.presentation.state.SendUiState
import com.tangem.features.send.impl.presentation.state.SendUiStateType
import com.tangem.features.send.impl.presentation.state.previewdata.ConfirmStatePreviewData
import com.tangem.features.send.impl.presentation.state.previewdata.SendStatesPreviewData
import com.tangem.features.send.impl.presentation.ui.amount.SendAmountContent
import com.tangem.features.send.impl.presentation.ui.fee.SendSpeedAndFeeContent
import com.tangem.features.send.impl.presentation.ui.recipient.SendRecipientContent
@ -182,4 +189,49 @@ private fun SendScreenContent(uiState: SendUiState, currentState: SendUiCurrentS
}
}
}
}
}
// region Preview
@Preview(showBackground = true, widthDp = 360, heightDp = 736)
@Preview(showBackground = true, widthDp = 360, heightDp = 736, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun SendScreen_Preview(@PreviewParameter(SendScreenPreviewProvider::class) data: SendScreenPreview) {
TangemThemePreview {
SendScreen(
uiState = data.uiState,
currentState = data.currentState,
)
}
}
private class SendScreenPreviewProvider : PreviewParameterProvider<SendScreenPreview> {
override val values: Sequence<SendScreenPreview>
get() = sequenceOf(
SendScreenPreview(
uiState = SendStatesPreviewData.uiState,
currentState = SendUiCurrentScreen(type = SendUiStateType.Recipient, isFromConfirmation = false),
),
SendScreenPreview(
uiState = SendStatesPreviewData.uiState,
currentState = SendUiCurrentScreen(type = SendUiStateType.Amount, isFromConfirmation = false),
),
SendScreenPreview(
uiState = SendStatesPreviewData.uiState,
currentState = SendUiCurrentScreen(type = SendUiStateType.Send, isFromConfirmation = false),
),
SendScreenPreview(
uiState = SendStatesPreviewData.uiState,
currentState = SendUiCurrentScreen(type = SendUiStateType.EditFee, isFromConfirmation = true),
),
SendScreenPreview(
uiState = SendStatesPreviewData.uiState.copy(sendState = ConfirmStatePreviewData.sendDoneState),
currentState = SendUiCurrentScreen(type = SendUiStateType.Send, isFromConfirmation = false),
),
)
}
private data class SendScreenPreview(
val uiState: SendUiState,
val currentState: SendUiCurrentScreen,
)
// endregion

View file

@ -94,19 +94,20 @@ private fun SendAmountCurrencyButton(button: SendAmountSegmentedButtonsConfig, i
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
) {
val iconModifier = Modifier.size(TangemTheme.dimens.size18)
.padding(horizontal = TangemTheme.dimens.spacing1)
if (button.isFiat) {
FiatIcon(
url = button.iconUrl,
size = TangemTheme.dimens.size18,
isGrayscale = !isSegmentedButtonsEnabled,
modifier = Modifier.size(TangemTheme.dimens.size18),
modifier = iconModifier,
)
} else if (button.iconState != null) {
TokenIcon(
state = button.iconState,
shouldDisplayNetwork = false,
modifier = Modifier
.size(TangemTheme.dimens.size18),
modifier = iconModifier,
)
}
Text(

View file

@ -44,11 +44,11 @@ internal fun SendAmountContent(
}
// region Preview
@Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Preview(showBackground = true, widthDp = 360)
@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun AmountFieldPreview(
@PreviewParameter(AmountFieldPreviewProvider::class) amountState: SendStates.AmountState,
private fun SendAmountContentPreview(
@PreviewParameter(SendAmountContentPreviewProvider::class) amountState: SendStates.AmountState,
) {
TangemThemePreview {
SendAmountContent(
@ -59,7 +59,7 @@ private fun AmountFieldPreview(
}
}
private class AmountFieldPreviewProvider : PreviewParameterProvider<SendStates.AmountState> {
private class SendAmountContentPreviewProvider : PreviewParameterProvider<SendStates.AmountState> {
override val values: Sequence<SendStates.AmountState>
get() = sequenceOf(
AmountStatePreviewData.amountState,

View file

@ -1,5 +1,6 @@
package com.tangem.features.send.impl.presentation.ui.fee
import android.content.res.Configuration
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.fillMaxWidth
@ -8,10 +9,16 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.send.impl.presentation.state.SendStates
import com.tangem.features.send.impl.presentation.state.fee.FeeSelectorState
import com.tangem.features.send.impl.presentation.state.fee.FeeType
import com.tangem.features.send.impl.presentation.state.previewdata.FeeStatePreviewData
import com.tangem.features.send.impl.presentation.state.previewdata.SendClickIntentsStub
import com.tangem.features.send.impl.presentation.ui.common.notifications
import com.tangem.features.send.impl.presentation.viewmodel.SendClickIntents
@ -75,4 +82,30 @@ internal fun LazyListScope.customFee(
.padding(top = TangemTheme.dimens.spacing12),
)
}
}
}
// region Preview
@Preview(showBackground = true, widthDp = 360)
@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun SendSpeedAndFeeContent_Preview(
@PreviewParameter(FeeStatePreviewProvider::class) feeState: SendStates.FeeState,
) {
TangemThemePreview {
SendSpeedAndFeeContent(
state = feeState,
clickIntents = SendClickIntentsStub,
)
}
}
private class FeeStatePreviewProvider : PreviewParameterProvider<SendStates.FeeState> {
override val values: Sequence<SendStates.FeeState>
get() = sequenceOf(
FeeStatePreviewData.feeState,
FeeStatePreviewData.feeChoosableState,
FeeStatePreviewData.feeCustomState,
FeeStatePreviewData.errorFeeState,
)
}
// endregion

View file

@ -25,6 +25,7 @@ import com.tangem.common.Strings.STARS
import com.tangem.core.ui.components.inputrow.InputRowRecipient
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.send.impl.R
import com.tangem.features.send.impl.presentation.analytics.EnterAddressSource
import com.tangem.features.send.impl.presentation.domain.SendRecipientListContent
@ -260,7 +261,7 @@ private fun AnimateRecentAppearance(isVisible: Boolean, content: @Composable ()
private fun SendRecipientContent_Preview(
@PreviewParameter(SendRecipientContentPreviewProvider::class) recipientState: SendStates.RecipientState,
) {
TangemTheme(isDark = false) {
TangemThemePreview {
SendRecipientContent(
uiState = recipientState,
clickIntents = SendClickIntentsStub,

View file

@ -56,10 +56,7 @@ internal fun AmountBlock(
.clip(TangemTheme.shapes.roundedCornersXMedium)
.background(backgroundColor)
.clickable(enabled = !isClickDisabled && !isEditingDisabled, onClick = onClick)
.padding(
vertical = TangemTheme.dimens.spacing14,
horizontal = TangemTheme.dimens.spacing16,
),
.padding(TangemTheme.dimens.spacing16),
) {
TokenIcon(state = amountState.tokenIconState)
ResizableText(
@ -79,10 +76,7 @@ internal fun AmountBlock(
textAlign = TextAlign.Center,
modifier = Modifier
.fillMaxWidth()
.padding(
top = TangemTheme.dimens.spacing8,
bottom = TangemTheme.dimens.spacing2,
),
.padding(top = TangemTheme.dimens.spacing8),
)
}
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.send.impl.presentation.ui.send
import android.content.res.Configuration
import androidx.compose.animation.*
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.foundation.ExperimentalFoundationApi
@ -20,10 +21,16 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.tangem.core.ui.components.transactions.TransactionDoneTitle
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.send.impl.R
import com.tangem.features.send.impl.presentation.state.SendUiState
import com.tangem.features.send.impl.presentation.state.previewdata.ConfirmStatePreviewData
import com.tangem.features.send.impl.presentation.state.previewdata.SendStatesPreviewData
import com.tangem.features.send.impl.presentation.ui.common.notifications
import kotlinx.coroutines.delay
@ -133,4 +140,25 @@ private fun LazyListScope.tapHelp(isDisplay: Boolean, modifier: Modifier = Modif
}
}
}
}
}
// region Preview
@Preview(showBackground = true, widthDp = 360)
@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun SendContent_Preview(@PreviewParameter(SendContentPreviewProvider::class) uiState: SendUiState) {
TangemThemePreview {
SendContent(
uiState = uiState,
)
}
}
private class SendContentPreviewProvider : PreviewParameterProvider<SendUiState> {
override val values: Sequence<SendUiState>
get() = sequenceOf(
SendStatesPreviewData.uiState,
SendStatesPreviewData.uiState.copy(sendState = ConfirmStatePreviewData.sendDoneState),
)
}
// endregion