Skip to content

Commit 724c347

Browse files
committed
feat: layout balance/chat unread indicator more inline w/ iOS
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent be78ced commit 724c347

2 files changed

Lines changed: 62 additions & 21 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.getcode.util
2+
3+
import androidx.compose.ui.layout.MeasureScope
4+
import androidx.compose.ui.layout.Placeable
5+
6+
@Suppress("UnusedReceiverParameter")
7+
fun MeasureScope.widthOrZero(placeable: Placeable?): Int {
8+
return placeable?.measuredWidth ?: 0
9+
}
10+
11+
@Suppress("UnusedReceiverParameter")
12+
fun MeasureScope.heightOrZero(placeable: Placeable?): Int {
13+
return placeable?.measuredHeight ?: 0
14+
}

app/src/main/java/com/getcode/view/main/home/components/HomeBottom.kt

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@ import androidx.compose.ui.Alignment
1414
import androidx.compose.ui.Modifier
1515
import androidx.compose.ui.draw.clip
1616
import androidx.compose.ui.graphics.painter.Painter
17+
import androidx.compose.ui.layout.Layout
18+
import androidx.compose.ui.layout.layoutId
1719
import androidx.compose.ui.res.painterResource
1820
import androidx.compose.ui.res.stringResource
1921
import androidx.compose.ui.tooling.preview.Preview
2022
import androidx.compose.ui.unit.Dp
2123
import com.getcode.R
2224
import com.getcode.theme.CodeTheme
25+
import com.getcode.util.heightOrZero
2326
import com.getcode.util.rememberedClickable
27+
import com.getcode.util.widthOrZero
2428
import com.getcode.view.components.Badge
2529
import com.getcode.view.components.Row
2630
import com.getcode.view.components.chat.ChatNodeDefaults
@@ -49,7 +53,7 @@ internal fun HomeBottom(
4953
top = CodeTheme.dimens.grid.x1,
5054
bottom = CodeTheme.dimens.grid.x2,
5155
),
52-
imageSize = CodeTheme.dimens.grid.x6,
56+
imageSize = CodeTheme.dimens.grid.x7,
5357
painter = painterResource(R.drawable.ic_wallet),
5458
onClick = { onPress(HomeBottomSheet.GET_KIN) }
5559
)
@@ -88,28 +92,51 @@ private fun BottomBarAction(
8892
badge: @Composable () -> Unit = { },
8993
onClick: () -> Unit,
9094
) {
91-
Box(modifier = modifier) {
92-
Column(
93-
modifier = Modifier
94-
.align(Alignment.Center)
95-
.clip(CodeTheme.shapes.medium)
96-
.rememberedClickable { onClick() },
97-
horizontalAlignment = Alignment.CenterHorizontally
98-
) {
99-
Image(
95+
Layout(
96+
modifier = modifier,
97+
content = {
98+
Column(
10099
modifier = Modifier
101-
.padding(contentPadding)
102-
.size(imageSize),
103-
painter = painter,
104-
contentDescription = null,
105-
)
106-
Text(
107-
text = label,
108-
style = CodeTheme.typography.body2
109-
)
100+
.clip(CodeTheme.shapes.medium)
101+
.rememberedClickable { onClick() }
102+
.layoutId("action"),
103+
horizontalAlignment = Alignment.CenterHorizontally
104+
) {
105+
Image(
106+
modifier = Modifier
107+
.padding(contentPadding)
108+
.size(imageSize),
109+
painter = painter,
110+
contentDescription = null,
111+
)
112+
Text(
113+
text = label,
114+
style = CodeTheme.typography.body2
115+
)
116+
}
117+
118+
Box(modifier = Modifier.layoutId("badge")) {
119+
badge()
120+
}
110121
}
111-
Box(modifier = Modifier.align(Alignment.TopEnd)) {
112-
badge()
122+
) { measurables, incomingConstraints ->
123+
val constraints = incomingConstraints.copy(minWidth = 0, minHeight = 0)
124+
val actionPlaceable =
125+
measurables.find { it.layoutId == "action" }?.measure(constraints)
126+
val badgePlaceable =
127+
measurables.find { it.layoutId == "badge" }?.measure(constraints)
128+
129+
val maxWidth = widthOrZero(actionPlaceable)
130+
val maxHeight = heightOrZero(actionPlaceable) // + heightOrZero(badgePlaceable) / 2
131+
layout(
132+
width = maxWidth,
133+
height = maxHeight,
134+
) {
135+
actionPlaceable?.placeRelative(0, 0)
136+
badgePlaceable?.placeRelative(
137+
x = maxWidth - widthOrZero(badgePlaceable),
138+
y = -(heightOrZero(badgePlaceable) / 2)
139+
)
113140
}
114141
}
115142
}

0 commit comments

Comments
 (0)