Skip to content

Commit 20a1ee2

Browse files
authored
Merge pull request #391 from code-payments/chore/arrange-get-kin
style: arrange GetKin wrt spacing closer to iOS
2 parents 4a24ea6 + 8d59ba3 commit 20a1ee2

File tree

1 file changed

+115
-121
lines changed

1 file changed

+115
-121
lines changed

app/src/main/java/com/getcode/view/main/getKin/GetKinSheet.kt

Lines changed: 115 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package com.getcode.view.main.getKin
22

33
import androidx.compose.foundation.Image
44
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.Arrangement
56
import androidx.compose.foundation.layout.Column
67
import androidx.compose.foundation.layout.Row
78
import androidx.compose.foundation.layout.Spacer
89
import androidx.compose.foundation.layout.fillMaxHeight
10+
import androidx.compose.foundation.layout.fillMaxSize
911
import androidx.compose.foundation.layout.fillMaxWidth
1012
import androidx.compose.foundation.layout.height
1113
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.layout.requiredHeight
1215
import androidx.compose.foundation.layout.size
1316
import androidx.compose.material.Snackbar
1417
import androidx.compose.material.SnackbarHost
@@ -33,7 +36,6 @@ import androidx.compose.ui.res.painterResource
3336
import androidx.compose.ui.res.stringResource
3437
import androidx.compose.ui.text.style.TextDecoration
3538
import androidx.compose.ui.unit.dp
36-
import androidx.constraintlayout.compose.ConstraintLayout
3739
import com.getcode.R
3840
import com.getcode.manager.TopBarManager
3941
import com.getcode.navigation.core.LocalCodeNavigator
@@ -45,9 +47,9 @@ import com.getcode.navigation.screens.RequestTip
4547
import com.getcode.theme.BrandLight
4648
import com.getcode.theme.BrandMuted
4749
import com.getcode.theme.CodeTheme
50+
import com.getcode.theme.Success
4851
import com.getcode.theme.White
4952
import com.getcode.theme.White05
50-
import com.getcode.theme.Success
5153
import com.getcode.ui.components.CodeCircularProgressIndicator
5254
import com.getcode.ui.components.CodeScaffold
5355
import com.getcode.ui.components.showSnackbar
@@ -152,129 +154,16 @@ fun GetKinSheet(
152154
}
153155
}
154156
) { padding ->
155-
ConstraintLayout(
157+
Column(
156158
modifier = Modifier
157-
.fillMaxWidth()
158-
.fillMaxHeight()
159+
.fillMaxSize()
159160
.padding(horizontal = CodeTheme.dimens.inset)
160161
.then(Modifier.padding(padding)),
162+
verticalArrangement = Arrangement.SpaceBetween
161163
) {
162-
val (topSection, bottomSection) = createRefs()
163-
164-
Column(
165-
modifier = Modifier
166-
.fillMaxWidth()
167-
.constrainAs(topSection) {
168-
top.linkTo(parent.top)
169-
start.linkTo(parent.start)
170-
end.linkTo(parent.end)
171-
},
172-
) {
173-
Image(
174-
painter = painterResource(R.drawable.ic_graphic_wallet),
175-
contentDescription = "",
176-
modifier = Modifier.padding(vertical = CodeTheme.dimens.grid.x2),
177-
)
178-
Text(
179-
text = stringResource(R.string.title_getKin),
180-
style = CodeTheme.typography.h1,
181-
modifier = Modifier.padding(vertical = CodeTheme.dimens.grid.x3),
182-
)
183-
Text(
184-
text = stringResource(R.string.subtitle_getKin),
185-
style = CodeTheme.typography.body1,
186-
modifier = Modifier.padding(vertical = CodeTheme.dimens.grid.x2),
187-
)
188-
}
189-
190-
val x10 = CodeTheme.dimens.grid.x15
191-
Column(
192-
modifier = Modifier
193-
.fillMaxWidth()
194-
.padding(top = x10)
195-
.constrainAs(bottomSection) {
196-
top.linkTo(topSection.bottom)
197-
start.linkTo(parent.start)
198-
end.linkTo(parent.end)
199-
},
200-
) {
201-
Column {
202-
for (item in items) {
203-
if (!item.isVisible) {
204-
continue
205-
}
206-
207-
Spacer(
208-
modifier = Modifier
209-
.fillMaxWidth()
210-
.height(1.dp)
211-
.background(White05),
212-
)
213-
214-
Row(
215-
modifier = Modifier
216-
.addIf(
217-
item.isStrikeThrough.not(),
218-
) {
219-
Modifier.rememberedClickable { item.onClick() }
220-
}
221-
.padding(
222-
vertical = CodeTheme.dimens.grid.x4,
223-
horizontal = CodeTheme.dimens.grid.x2
224-
),
225-
verticalAlignment = Alignment.CenterVertically,
226-
) {
227-
Image(
228-
modifier = Modifier.size(CodeTheme.dimens.staticGrid.x5),
229-
painter = if (item.isActive) painterResource(id = item.imageResId) else painterResource(
230-
id = item.inactiveImageResId
231-
),
232-
contentDescription = "",
233-
)
234-
Column(
235-
modifier = Modifier
236-
.padding(start = CodeTheme.dimens.grid.x3)
237-
.weight(1f),
238-
) {
239-
Text(
240-
text = item.titleText,
241-
color = if (item.isActive) Color.White else BrandLight,
242-
style = CodeTheme.typography.body2.copy(
243-
textDecoration = if (item.isStrikeThrough) TextDecoration.LineThrough else CodeTheme.typography.button.textDecoration,
244-
),
245-
)
246-
item.subtitleText?.let {
247-
Text(
248-
modifier = Modifier.padding(top = CodeTheme.dimens.grid.x1),
249-
text = it,
250-
style = CodeTheme.typography.caption,
251-
color = BrandLight
252-
)
253-
}
254-
}
255-
256-
if (item.isLoading) {
257-
CodeCircularProgressIndicator(
258-
strokeWidth = CodeTheme.dimens.thickBorder,
259-
color = White,
260-
modifier = Modifier
261-
.size(CodeTheme.dimens.grid.x3)
262-
.align(Alignment.CenterVertically),
263-
)
264-
} else {
265-
Spacer(modifier = Modifier.weight(1f))
266-
}
267-
}
268-
}
269-
}
270-
271-
Spacer(
272-
modifier = Modifier
273-
.fillMaxWidth()
274-
.height(1.dp)
275-
.background(White05),
276-
)
277-
}
164+
Header()
165+
Items(items)
166+
Spacer(modifier = Modifier.requiredHeight(CodeTheme.dimens.grid.x12))
278167
}
279168
}
280169

@@ -290,3 +179,108 @@ fun GetKinSheet(
290179
}
291180
}
292181
}
182+
183+
@Composable
184+
private fun Header() {
185+
Column(modifier = Modifier.fillMaxWidth()) {
186+
Image(
187+
painter = painterResource(R.drawable.ic_graphic_wallet),
188+
contentDescription = "",
189+
modifier = Modifier.padding(vertical = CodeTheme.dimens.grid.x2),
190+
)
191+
Text(
192+
text = stringResource(R.string.title_getKin),
193+
style = CodeTheme.typography.h1,
194+
modifier = Modifier.padding(vertical = CodeTheme.dimens.grid.x3),
195+
)
196+
Text(
197+
text = stringResource(R.string.subtitle_getKin),
198+
style = CodeTheme.typography.body1,
199+
modifier = Modifier.padding(vertical = CodeTheme.dimens.grid.x2),
200+
)
201+
}
202+
}
203+
204+
@Composable
205+
private fun Items(items: List<GetKinItem>) {
206+
Column(modifier = Modifier.fillMaxWidth()) {
207+
Column {
208+
items
209+
.filter { it.isVisible }
210+
.onEach { item ->
211+
Spacer(
212+
modifier = Modifier
213+
.fillMaxWidth()
214+
.height(1.dp)
215+
.background(White05),
216+
)
217+
GetKinItemRow(item = item)
218+
}
219+
}
220+
221+
Spacer(
222+
modifier = Modifier
223+
.fillMaxWidth()
224+
.height(1.dp)
225+
.background(White05),
226+
)
227+
}
228+
}
229+
230+
@Composable
231+
private fun GetKinItemRow(modifier: Modifier = Modifier, item: GetKinItem) {
232+
Row(
233+
modifier = modifier
234+
.addIf(
235+
item.isStrikeThrough.not(),
236+
) {
237+
Modifier.rememberedClickable { item.onClick() }
238+
}
239+
.padding(
240+
vertical = CodeTheme.dimens.grid.x4,
241+
horizontal = CodeTheme.dimens.grid.x2
242+
),
243+
verticalAlignment = Alignment.CenterVertically,
244+
) {
245+
Image(
246+
modifier = Modifier.size(CodeTheme.dimens.staticGrid.x5),
247+
painter = if (item.isActive) painterResource(id = item.imageResId) else painterResource(
248+
id = item.inactiveImageResId
249+
),
250+
contentDescription = "",
251+
)
252+
Column(
253+
modifier = Modifier
254+
.padding(start = CodeTheme.dimens.grid.x3)
255+
.weight(1f),
256+
) {
257+
Text(
258+
text = item.titleText,
259+
color = if (item.isActive) Color.White else BrandLight,
260+
style = CodeTheme.typography.body2.copy(
261+
textDecoration = if (item.isStrikeThrough) TextDecoration.LineThrough else CodeTheme.typography.button.textDecoration,
262+
),
263+
)
264+
item.subtitleText?.let {
265+
Text(
266+
modifier = Modifier.padding(top = CodeTheme.dimens.grid.x1),
267+
text = it,
268+
style = CodeTheme.typography.caption,
269+
color = BrandLight
270+
)
271+
}
272+
}
273+
274+
if (item.isLoading) {
275+
CodeCircularProgressIndicator(
276+
strokeWidth = CodeTheme.dimens.thickBorder,
277+
color = White,
278+
modifier = Modifier
279+
.size(CodeTheme.dimens.grid.x3)
280+
.align(Alignment.CenterVertically),
281+
)
282+
} else {
283+
Spacer(modifier = Modifier.weight(1f))
284+
}
285+
}
286+
}

0 commit comments

Comments
 (0)