Skip to content

Commit 49190e3

Browse files
authored
Merge pull request #680 from code-payments/fix/currency-creator-upsell-card-image-overlap
fix(tokens): prevent bill image overlap on CurrencyCreatorUpsellCard
2 parents 81b0401 + 89848e4 commit 49190e3

2 files changed

Lines changed: 51 additions & 55 deletions

File tree

apps/flipcash/shared/theme/src/main/kotlin/com/flipcash/app/theme/FlipcashPreview.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.runtime.Composable
88
import androidx.compose.runtime.CompositionLocalProvider
99
import androidx.compose.ui.Modifier
1010
import androidx.compose.ui.graphics.Color
11+
import androidx.compose.ui.tooling.preview.Preview
1112
import androidx.compose.ui.tooling.preview.PreviewWrapper
1213
import androidx.compose.ui.tooling.preview.PreviewWrapperProvider
1314
import com.getcode.animation.LocalSharedTransitionScope
@@ -66,4 +67,12 @@ class FlipcashThemeWrapper: PreviewWrapperProvider {
6667

6768
Flipcash2DesignSystem(previewContent)
6869
}
69-
}
70+
}
71+
72+
@Preview(name = "Samsung Galaxy Note 20", widthDp = 320, device = "id:Samsung Galaxy Note 20")
73+
@Preview(name = "Pixel 3", widthDp = 360, device = "id:pixel_3")
74+
@Preview(name = "Solana Seeker", widthDp = 415)
75+
@Preview(name = "Pixel 9a", widthDp = 412, device = "id:pixel_9a")
76+
@Preview(name = "Pixel 9 Pro XL", widthDp = 480, device = "id:pixel_9_pro_xl")
77+
@Preview(name = "Pixel 9 Pro Fold (closed)", widthDp = 443)
78+
annotation class MultiDevicePreview

apps/flipcash/shared/tokens/src/main/kotlin/com/flipcash/app/tokens/ui/CurrencyCreatorUpsellCard.kt

Lines changed: 41 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,29 @@ package com.flipcash.app.tokens.ui
22

33
import androidx.compose.foundation.Image
44
import androidx.compose.foundation.layout.Arrangement
5-
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.Column
7-
import androidx.compose.foundation.layout.defaultMinSize
6+
import androidx.compose.foundation.layout.Row
87
import androidx.compose.foundation.layout.fillMaxWidth
98
import androidx.compose.foundation.layout.padding
10-
import androidx.compose.foundation.text.InlineTextContent
11-
import androidx.compose.foundation.text.appendInlineContent
9+
import androidx.compose.foundation.layout.size
10+
import androidx.compose.foundation.text.TextAutoSize
1211
import androidx.compose.material.icons.Icons
1312
import androidx.compose.material.icons.automirrored.filled.ArrowForward
1413
import androidx.compose.material3.Icon
1514
import androidx.compose.material3.Surface
1615
import androidx.compose.material3.Text
1716
import androidx.compose.runtime.Composable
18-
import androidx.compose.runtime.getValue
19-
import androidx.compose.runtime.mutableStateOf
20-
import androidx.compose.runtime.remember
21-
import androidx.compose.runtime.setValue
2217
import androidx.compose.ui.Alignment
2318
import androidx.compose.ui.Modifier
24-
import androidx.compose.ui.layout.onSizeChanged
25-
import androidx.compose.ui.platform.LocalDensity
19+
import androidx.compose.ui.layout.ContentScale
2620
import androidx.compose.ui.res.painterResource
2721
import androidx.compose.ui.res.stringResource
28-
import androidx.compose.ui.text.Placeholder
29-
import androidx.compose.ui.text.PlaceholderVerticalAlign
30-
import androidx.compose.ui.text.buildAnnotatedString
3122
import androidx.compose.ui.tooling.preview.Preview
3223
import androidx.compose.ui.tooling.preview.PreviewWrapper
3324
import androidx.compose.ui.unit.dp
25+
import androidx.compose.ui.unit.sp
3426
import com.flipcash.app.theme.FlipcashThemeWrapper
27+
import com.flipcash.app.theme.MultiDevicePreview
3528
import com.flipcash.shared.tokens.R
3629
import com.getcode.theme.CodeTheme
3730

@@ -49,53 +42,49 @@ fun CurrencyCreatorUpsellCard(
4942
shadowElevation = 0.dp,
5043
onClick = onClick
5144
) {
52-
Box(modifier = Modifier.fillMaxWidth()) {
53-
val density = LocalDensity.current
54-
var imageHeight by remember { mutableStateOf(0.dp) }
45+
Row(
46+
modifier = Modifier.fillMaxWidth(),
47+
verticalAlignment = Alignment.Bottom
48+
) {
49+
val screenWidth = CodeTheme.dimens.screenWidth
50+
val imageWidthFraction = when {
51+
screenWidth < 360.dp -> 0.28f
52+
screenWidth < 420.dp -> 0.33f
53+
else -> 0.38f
54+
}
5555

5656
Column(
5757
modifier = Modifier
58-
.fillMaxWidth()
59-
.defaultMinSize(minHeight = imageHeight)
58+
.weight(1f)
6059
.padding(
6160
start = CodeTheme.dimens.grid.x3,
6261
top = CodeTheme.dimens.grid.x3,
6362
bottom = CodeTheme.dimens.grid.x3,
64-
),
63+
)
64+
.align(Alignment.CenterVertically),
6565
verticalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x1),
6666
) {
67-
val arrowId = "arrow"
68-
val arrowSize = with(LocalDensity.current) {
69-
CodeTheme.dimens.staticGrid.x4.toSp()
70-
}
71-
val titleText = buildAnnotatedString {
72-
append(stringResource(R.string.action_createYourOwnCurrency))
73-
append(" ")
74-
appendInlineContent(arrowId)
75-
}
76-
Text(
77-
text = titleText,
78-
style = CodeTheme.typography.screenTitle,
79-
color = CodeTheme.colors.textMain,
80-
inlineContent = mapOf(
81-
arrowId to InlineTextContent(
82-
Placeholder(
83-
width = arrowSize,
84-
height = arrowSize,
85-
placeholderVerticalAlign = PlaceholderVerticalAlign.Center
86-
)
87-
) {
88-
Icon(
89-
imageVector = Icons.AutoMirrored.Default.ArrowForward,
90-
contentDescription = null,
91-
tint = CodeTheme.colors.textMain,
92-
)
93-
}
67+
Row(
68+
verticalAlignment = Alignment.CenterVertically,
69+
horizontalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x1)
70+
) {
71+
Text(
72+
modifier = Modifier.weight(1f, fill = false),
73+
text = stringResource(R.string.action_createYourOwnCurrency),
74+
style = CodeTheme.typography.screenTitle,
75+
color = CodeTheme.colors.textMain,
76+
maxLines = 1,
77+
autoSize = TextAutoSize.StepBased(minFontSize = 11.sp),
9478
)
95-
)
79+
Icon(
80+
modifier = Modifier.size(CodeTheme.dimens.staticGrid.x4),
81+
imageVector = Icons.AutoMirrored.Default.ArrowForward,
82+
contentDescription = null,
83+
tint = CodeTheme.colors.textMain,
84+
)
85+
}
9686

9787
Text(
98-
modifier = Modifier.fillMaxWidth(0.65f),
9988
text = stringResource(R.string.subtitle_createYourOwnCurrency),
10089
style = CodeTheme.typography.textSmall,
10190
color = CodeTheme.colors.textSecondary,
@@ -104,20 +93,18 @@ fun CurrencyCreatorUpsellCard(
10493

10594
Image(
10695
modifier = Modifier
107-
.align(Alignment.BottomEnd)
108-
.onSizeChanged { size ->
109-
imageHeight = with(density) { size.height.toDp() }
110-
},
96+
.fillMaxWidth(imageWidthFraction),
11197
painter = painterResource(R.drawable.ic_bill_previews),
11298
contentDescription = null,
99+
contentScale = ContentScale.FillWidth,
113100
)
114101
}
115102
}
116103
}
117104

118-
@Preview
105+
@MultiDevicePreview
119106
@PreviewWrapper(FlipcashThemeWrapper::class)
120107
@Composable
121108
private fun Preview_CurrencyCreatorUpsellCard() {
122-
CurrencyCreatorUpsellCard() { }
109+
CurrencyCreatorUpsellCard { }
123110
}

0 commit comments

Comments
 (0)