Skip to content

Commit aed74d1

Browse files
authored
Merge pull request #178 from code-payments/chore/ui-polish
chore(chat): ui polish
2 parents 06acd3e + 5531c01 commit aed74d1

5 files changed

Lines changed: 43 additions & 33 deletions

File tree

app/src/main/java/com/getcode/navigation/screens/ChatScreens.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.runtime.remember
99
import androidx.compose.ui.platform.LocalLifecycleOwner
1010
import androidx.compose.ui.res.stringResource
1111
import androidx.paging.compose.collectAsLazyPagingItems
12+
import cafe.adriel.voyager.core.lifecycle.LifecycleEffect
1213
import cafe.adriel.voyager.core.screen.ScreenKey
1314
import cafe.adriel.voyager.core.screen.uniqueScreenKey
1415
import cafe.adriel.voyager.hilt.getViewModel
@@ -74,6 +75,16 @@ data object BalanceModal : ChatGraph, ModalRoot {
7475
lifecycleOwner = LocalLifecycleOwner.current,
7576
event = AnalyticsManager.Screen.Balance
7677
)
78+
79+
LifecycleEffect(
80+
onDisposed = {
81+
viewModel.dispatchEvent(
82+
BalanceSheetViewModel.Event.OnDebugBucketsVisible(
83+
false
84+
)
85+
)
86+
}
87+
)
7788
}
7889
}
7990

app/src/main/java/com/getcode/ui/components/chat/MessageNode.kt

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.getcode.ui.components.chat
22

3-
import android.annotation.SuppressLint
43
import androidx.compose.foundation.background
54
import androidx.compose.foundation.layout.Arrangement
65
import androidx.compose.foundation.layout.Box
76
import androidx.compose.foundation.layout.Column
8-
import androidx.compose.foundation.layout.PaddingValues
97
import androidx.compose.foundation.layout.fillMaxWidth
108
import androidx.compose.foundation.layout.padding
119
import androidx.compose.foundation.shape.CornerBasedShape
@@ -15,13 +13,9 @@ import androidx.compose.runtime.Composable
1513
import androidx.compose.ui.Alignment
1614
import androidx.compose.ui.Modifier
1715
import androidx.compose.ui.graphics.Color
18-
import androidx.compose.ui.platform.LocalContext
19-
import androidx.compose.ui.res.stringResource
2016
import androidx.compose.ui.text.font.FontWeight
2117
import androidx.compose.ui.unit.dp
22-
import com.getcode.BuildConfig
2318
import com.getcode.LocalExchange
24-
import com.getcode.R
2519
import com.getcode.model.KinAmount
2620
import com.getcode.model.MessageContent
2721
import com.getcode.model.Rate
@@ -36,19 +30,6 @@ import kotlinx.datetime.Instant
3630

3731
object MessageNodeDefaults {
3832

39-
@Composable
40-
fun verticalPadding(
41-
isPreviousSameMessage: Boolean,
42-
isNextSameMessage: Boolean
43-
): PaddingValues {
44-
return when {
45-
isPreviousSameMessage && isNextSameMessage -> PaddingValues(vertical = CodeTheme.dimens.grid.x1 / 2)
46-
isPreviousSameMessage -> PaddingValues(top = CodeTheme.dimens.grid.x1 / 2)
47-
isNextSameMessage -> PaddingValues(bottom = CodeTheme.dimens.grid.x1 / 2)
48-
else -> PaddingValues(vertical = CodeTheme.dimens.grid.x1)
49-
}
50-
}
51-
5233
val DefaultShape: CornerBasedShape
5334
@Composable get() = CodeTheme.shapes.small
5435
val PreviousSameShape: CornerBasedShape
@@ -67,8 +48,8 @@ object MessageNodeDefaults {
6748
private val MessageContent.widthFraction: Float
6849
get() = when (this) {
6950
is MessageContent.Exchange -> 0.895f
70-
is MessageContent.Localized -> 0.8358f
71-
MessageContent.SodiumBox -> 0.8358f
51+
is MessageContent.Localized -> 0.895f
52+
MessageContent.SodiumBox -> 0.895f
7253
}
7354

7455
@Composable
@@ -81,12 +62,7 @@ fun MessageNode(
8162
) {
8263
Box(
8364
modifier = modifier
84-
.padding(
85-
MessageNodeDefaults.verticalPadding(
86-
isPreviousSameMessage = isPreviousSameMessage,
87-
isNextSameMessage = isNextSameMessage
88-
)
89-
)
65+
.padding(vertical = CodeTheme.dimens.grid.x1)
9066
) {
9167
val exchange = LocalExchange.current
9268

@@ -196,7 +172,7 @@ private fun MessageText(modifier: Modifier = Modifier, text: String, date: Insta
196172
Text(
197173
modifier = Modifier.align(Alignment.End),
198174
text = date.formatTimeRelatively(),
199-
style = CodeTheme.typography.caption,
175+
style = CodeTheme.typography.overline,
200176
color = BrandLight,
201177
)
202178
}

app/src/main/java/com/getcode/util/DateUtils.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import kotlinx.datetime.Clock
88
import kotlinx.datetime.Instant
99
import kotlinx.datetime.TimeZone
1010
import kotlinx.datetime.daysUntil
11+
import timber.log.Timber
1112
import java.util.*
1213
import kotlin.math.abs
1314
import kotlin.time.Duration.Companion.days
@@ -31,15 +32,17 @@ object DateUtils {
3132

3233
fun getDateRelatively(millis: Long): String {
3334
val date = Instant.fromEpochMilliseconds(millis)
34-
val weekAgo = date.minus(7.days)
35+
.toLocalDate().atStartOfDay()
36+
val weekAgo = Clock.System.now()
37+
.minus(7.days)
38+
.toLocalDate().atStartOfDay()
3539

3640
return if (DateUtils.isToday(millis)) {
3741
"Today"
3842
} else if (isYesterday(millis)) {
3943
"Yesterday"
40-
} else if (date.toEpochMilliseconds() < weekAgo.toEpochMilliseconds()) {
41-
val daysBetween = abs(date.daysUntil(Clock.System.now(), TimeZone.currentSystemDefault()))
42-
"$daysBetween days ago"
44+
} else if (date.toEpochMilliseconds() > weekAgo.toEpochMilliseconds()) {
45+
getDate(millis, format = "EEEE")
4346
} else {
4447
getDate(millis, format = "EEE, MMM dd")
4548
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.getcode.util
2+
3+
import kotlinx.datetime.DatePeriod
4+
import kotlinx.datetime.DateTimeUnit
5+
import kotlinx.datetime.Instant
6+
import kotlinx.datetime.LocalDate
7+
import kotlinx.datetime.TimeZone
8+
import kotlinx.datetime.atStartOfDayIn
9+
import kotlinx.datetime.minus
10+
import kotlinx.datetime.plus
11+
import kotlinx.datetime.toLocalDateTime
12+
13+
fun Instant.toLocalDate(timeZone: TimeZone = TimeZone.currentSystemDefault()) =
14+
toLocalDateTime(timeZone).date
15+
16+
fun LocalDate.atStartOfDay(tz: TimeZone = TimeZone.currentSystemDefault()) = atStartOfDayIn(tz)
17+
18+
fun LocalDate.atEndOfDay(tz: TimeZone = TimeZone.currentSystemDefault()): Instant {
19+
val tomorrowAtMidnight = ((this + DatePeriod(days = 1)).atStartOfDayIn(tz))
20+
return tomorrowAtMidnight.minus(value = 1, unit = DateTimeUnit.NANOSECOND)
21+
}

app/src/main/java/com/getcode/view/main/chat/ChatScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ fun ChatScreen(
134134
positiveText = context.getString(if (state.isMuted) R.string.action_unmute else R.string.action_mute),
135135
negativeText = context.getString(R.string.action_nevermind),
136136
onPositive = { dispatch(ChatViewModel.Event.OnMuteToggled) },
137-
isDismissible = false,
138137
)
139138
)
140139
},

0 commit comments

Comments
 (0)