@@ -5,6 +5,7 @@ import androidx.compose.animation.fadeIn
55import androidx.compose.animation.fadeOut
66import androidx.compose.animation.togetherWith
77import androidx.compose.foundation.background
8+ import androidx.compose.foundation.clickable
89import androidx.compose.foundation.layout.Arrangement
910import androidx.compose.foundation.layout.Box
1011import androidx.compose.foundation.layout.Column
@@ -15,6 +16,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
1516import androidx.compose.foundation.layout.height
1617import androidx.compose.foundation.layout.padding
1718import androidx.compose.foundation.layout.requiredSize
19+ import androidx.compose.foundation.layout.requiredWidth
1820import androidx.compose.foundation.layout.size
1921import androidx.compose.foundation.lazy.LazyColumn
2022import androidx.compose.foundation.lazy.itemsIndexed
@@ -41,6 +43,7 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper
4143import androidx.compose.ui.unit.dp
4244import androidx.lifecycle.compose.collectAsStateWithLifecycle
4345import com.flipcash.app.contacts.device.DeviceContact
46+ import com.flipcash.app.contacts.ui.ContactAvatar
4447import com.flipcash.app.core.AppRoute
4548import com.flipcash.app.core.send.SendResult
4649import com.flipcash.app.core.send.SendStep
@@ -59,13 +62,9 @@ import com.getcode.ui.components.AppBarDefaults
5962import com.getcode.ui.components.AppBarWithTitle
6063import com.getcode.ui.components.CircularIconButton
6164import com.getcode.ui.components.SearchInput
62- import androidx.compose.foundation.clickable
63- import com.flipcash.app.contacts.ui.ContactAvatar
64- import com.flipcash.app.core.chat.ChatIdentifier
6565import com.getcode.ui.core.verticalScrollStateGradient
6666import com.getcode.ui.theme.CodeScaffold
6767import kotlinx.coroutines.flow.filterIsInstance
68- import kotlinx.coroutines.flow.map
6968
7069
7170@Composable
@@ -298,37 +297,50 @@ private fun ContactRowItem(
298297 modifier = Modifier
299298 .fillMaxWidth()
300299 .clickable(onClick = onClick)
301- .padding(
302- vertical = CodeTheme .dimens.inset,
303- horizontal = CodeTheme .dimens.inset,
304- ),
300+ .padding(vertical = CodeTheme .dimens.inset)
301+ .padding(end = CodeTheme .dimens.inset),
305302 verticalAlignment = Alignment .CenterVertically ,
306303 horizontalArrangement = Arrangement .spacedBy(CodeTheme .dimens.grid.x3),
307304 ) {
308- if (isNonContactDm && contact.photoUri == null ) {
309- Box (
310- modifier = Modifier
311- .requiredSize(CodeTheme .dimens.staticGrid.x8)
312- .clip(CircleShape )
313- .background(Brush .linearGradient(CodeTheme .colors.contactAvatar.colors)),
314- contentAlignment = Alignment .Center ,
315- ) {
316- Icon (
317- imageVector = Icons .Default .Person ,
318- contentDescription = null ,
319- tint = CodeTheme .colors.textSecondary,
320- modifier = Modifier .size(CodeTheme .dimens.staticGrid.x5),
305+ Row (
306+ verticalAlignment = Alignment .CenterVertically ,
307+ ) {
308+ if (unreadCount > 0 ) {
309+ UnreadBadge (
310+ modifier = Modifier .padding(
311+ start = CodeTheme .dimens.grid.x1,
312+ end = CodeTheme .dimens.grid.x1,
313+ ),
314+ count = unreadCount)
315+ } else {
316+ Box (modifier = Modifier .requiredWidth(CodeTheme .dimens.inset))
317+ }
318+ if (isNonContactDm && contact.photoUri == null ) {
319+ Box (
320+ modifier = Modifier
321+ .requiredSize(CodeTheme .dimens.staticGrid.x8)
322+ .clip(CircleShape )
323+ .background(Brush .linearGradient(CodeTheme .colors.contactAvatar.colors)),
324+ contentAlignment = Alignment .Center ,
325+ ) {
326+ Icon (
327+ imageVector = Icons .Default .Person ,
328+ contentDescription = null ,
329+ tint = CodeTheme .colors.textSecondary,
330+ modifier = Modifier .size(CodeTheme .dimens.staticGrid.x5),
331+ )
332+ }
333+ } else {
334+ ContactAvatar (
335+ photoUri = contact.photoUri,
336+ displayName = contact.displayName,
337+ modifier = Modifier
338+ .requiredSize(CodeTheme .dimens.staticGrid.x8)
339+ .clip(CircleShape ),
321340 )
322341 }
323- } else {
324- ContactAvatar (
325- photoUri = contact.photoUri,
326- displayName = contact.displayName,
327- modifier = Modifier
328- .requiredSize(CodeTheme .dimens.staticGrid.x8)
329- .clip(CircleShape ),
330- )
331342 }
343+
332344 Column (modifier = Modifier .weight(1f )) {
333345 Text (
334346 text = contact.displayName,
@@ -349,15 +361,11 @@ private fun ContactRowItem(
349361 }
350362
351363 if (isOnFlipcash) {
352- if (unreadCount > 0 ) {
353- UnreadBadge (count = unreadCount)
354- } else {
355- Icon (
356- painter = painterResource(id = R .drawable.ic_chevron_right),
357- contentDescription = null ,
358- tint = CodeTheme .colors.textSecondary,
359- )
360- }
364+ Icon (
365+ painter = painterResource(id = R .drawable.ic_chevron_right),
366+ contentDescription = null ,
367+ tint = CodeTheme .colors.textSecondary,
368+ )
361369 } else {
362370 Text (
363371 modifier = Modifier
@@ -394,7 +402,7 @@ private fun ContactRowItem(
394402private fun UnreadBadge (count : Int , modifier : Modifier = Modifier ) {
395403 Box (
396404 modifier = modifier
397- .size(CodeTheme .dimens.grid.x4 )
405+ .size(CodeTheme .dimens.grid.x2 )
398406 .background(
399407 color = CodeTheme .colors.indicator,
400408 shape = CircleShape ,
0 commit comments