diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/SendScreen.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/SendScreen.kt index 819655152a..cdef0b59c6 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/SendScreen.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/SendScreen.kt @@ -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 } } } -} \ No newline at end of file +} + +// 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 { + override val values: Sequence + 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 \ No newline at end of file diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountButtons.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountButtons.kt index acb6e230a0..19325703a5 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountButtons.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountButtons.kt @@ -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( diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt index dbd6b2043b..6181fc2174 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt @@ -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 { +private class SendAmountContentPreviewProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( AmountStatePreviewData.amountState, diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/fee/SendSpeedAndFeeContent.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/fee/SendSpeedAndFeeContent.kt index 4b6919dd3e..dedf7fa608 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/fee/SendSpeedAndFeeContent.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/fee/SendSpeedAndFeeContent.kt @@ -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), ) } -} \ No newline at end of file +} + +// 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 { + override val values: Sequence + get() = sequenceOf( + FeeStatePreviewData.feeState, + FeeStatePreviewData.feeChoosableState, + FeeStatePreviewData.feeCustomState, + FeeStatePreviewData.errorFeeState, + ) +} +// endregion \ No newline at end of file diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/recipient/SendRecipientContent.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/recipient/SendRecipientContent.kt index 38f13f0ab9..b3402a2bbe 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/recipient/SendRecipientContent.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/recipient/SendRecipientContent.kt @@ -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, diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/AmountBlock.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/AmountBlock.kt index 504ab85abb..a4912c792e 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/AmountBlock.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/AmountBlock.kt @@ -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), ) } } diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/SendContent.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/SendContent.kt index 3c7716a64c..0f6304ae81 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/SendContent.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/send/SendContent.kt @@ -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 } } } -} \ No newline at end of file +} + +// 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 { + override val values: Sequence + get() = sequenceOf( + SendStatesPreviewData.uiState, + SendStatesPreviewData.uiState.copy(sendState = ConfirmStatePreviewData.sendDoneState), + ) +} +// endregion \ No newline at end of file