Skip to content

Commit 78d9c87

Browse files
committed
fix: Activity grouping by date
1 parent be3fa47 commit 78d9c87

File tree

2 files changed

+56
-79
lines changed

2 files changed

+56
-79
lines changed

app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityRow.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ private fun ActivityRowContent(
9898
formattedTime(timestamp)
9999
} else {
100100
// TODO: calculate confirmsIn text
101-
stringResource(R.string.wallet__activity_confirms_in).replace("{feeRateDescription}", "???")
101+
stringResource(R.string.wallet__activity_confirms_in).replace("{feeRateDescription}", "± 1h")
102102
}
103103
}
104104
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt

Lines changed: 55 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ import uniffi.bitkitcore.LightningActivity
3636
import uniffi.bitkitcore.OnchainActivity
3737
import uniffi.bitkitcore.PaymentState
3838
import uniffi.bitkitcore.PaymentType
39+
import java.time.Instant
40+
import java.time.ZoneId
41+
import java.time.temporal.ChronoUnit
42+
import java.time.temporal.TemporalAdjusters
43+
import java.time.temporal.WeekFields
3944
import java.util.Calendar
45+
import java.util.Locale
4046

4147
@OptIn(ExperimentalMaterial3Api::class)
4248
@Composable
@@ -166,93 +172,64 @@ fun ActivityList(
166172

167173
// region utils
168174
private fun groupActivityItems(activityItems: List<Activity>): List<Any> {
169-
val date = Calendar.getInstance()
175+
val now = Instant.now()
176+
val zoneId = ZoneId.systemDefault()
177+
val today = now.atZone(zoneId).truncatedTo(ChronoUnit.DAYS)
170178

171-
val beginningOfDay = date.apply {
172-
set(Calendar.HOUR_OF_DAY, 0)
173-
set(Calendar.MINUTE, 0)
174-
set(Calendar.SECOND, 0)
175-
set(Calendar.MILLISECOND, 0)
176-
}.timeInMillis
179+
val startOfDay = today.toInstant().epochSecond
180+
val startOfYesterday = today.minusDays(1).toInstant().epochSecond
181+
val startOfWeek = today.with(TemporalAdjusters.previousOrSame(WeekFields.of(Locale.getDefault()).firstDayOfWeek)).toInstant().epochSecond
182+
val startOfMonth = today.withDayOfMonth(1).toInstant().epochSecond
183+
val startOfYear = today.withDayOfYear(1).toInstant().epochSecond
177184

178-
val beginningOfYesterday = date.apply {
179-
timeInMillis = beginningOfDay
180-
add(Calendar.DATE, -1)
181-
}.timeInMillis
182-
183-
val beginningOfWeek = date.apply {
184-
set(Calendar.DAY_OF_WEEK, firstDayOfWeek)
185-
set(Calendar.HOUR_OF_DAY, 0)
186-
set(Calendar.MINUTE, 0)
187-
set(Calendar.SECOND, 0)
188-
set(Calendar.MILLISECOND, 0)
189-
}.timeInMillis
190-
191-
val beginningOfMonth = date.apply {
192-
set(Calendar.DAY_OF_MONTH, 1)
193-
set(Calendar.HOUR_OF_DAY, 0)
194-
set(Calendar.MINUTE, 0)
195-
set(Calendar.SECOND, 0)
196-
set(Calendar.MILLISECOND, 0)
197-
}.timeInMillis
198-
199-
val beginningOfYear = date.apply {
200-
set(Calendar.DAY_OF_YEAR, 1)
201-
set(Calendar.HOUR_OF_DAY, 0)
202-
set(Calendar.MINUTE, 0)
203-
set(Calendar.SECOND, 0)
204-
set(Calendar.MILLISECOND, 0)
205-
}.timeInMillis
206-
207-
val today = mutableListOf<Activity>()
208-
val yesterday = mutableListOf<Activity>()
209-
val week = mutableListOf<Activity>()
210-
val month = mutableListOf<Activity>()
211-
val year = mutableListOf<Activity>()
212-
val earlier = mutableListOf<Activity>()
185+
val todayItems = mutableListOf<Activity>()
186+
val yesterdayItems = mutableListOf<Activity>()
187+
val weekItems = mutableListOf<Activity>()
188+
val monthItems = mutableListOf<Activity>()
189+
val yearItems = mutableListOf<Activity>()
190+
val earlierItems = mutableListOf<Activity>()
213191

214192
for (item in activityItems) {
215193
val timestamp = when (item) {
216194
is Activity.Lightning -> item.v1.timestamp.toLong()
217195
is Activity.Onchain -> item.v1.timestamp.toLong()
218196
}
219197
when {
220-
timestamp >= beginningOfDay -> today.add(item)
221-
timestamp >= beginningOfYesterday -> yesterday.add(item)
222-
timestamp >= beginningOfWeek -> week.add(item)
223-
timestamp >= beginningOfMonth -> month.add(item)
224-
timestamp >= beginningOfYear -> year.add(item)
225-
else -> earlier.add(item)
198+
timestamp >= startOfDay -> todayItems.add(item)
199+
timestamp >= startOfYesterday -> yesterdayItems.add(item)
200+
timestamp >= startOfWeek -> weekItems.add(item)
201+
timestamp >= startOfMonth -> monthItems.add(item)
202+
timestamp >= startOfYear -> yearItems.add(item)
203+
else -> earlierItems.add(item)
226204
}
227205
}
228206

229-
val result = mutableListOf<Any>()
230-
if (today.isNotEmpty()) {
231-
result.add("TODAY")
232-
result.addAll(today)
233-
}
234-
if (yesterday.isNotEmpty()) {
235-
result.add("YESTERDAY")
236-
result.addAll(yesterday)
237-
}
238-
if (week.isNotEmpty()) {
239-
result.add("THIS WEEK")
240-
result.addAll(week)
241-
}
242-
if (month.isNotEmpty()) {
243-
result.add("THIS MONTH")
244-
result.addAll(month)
245-
}
246-
if (year.isNotEmpty()) {
247-
result.add("THIS YEAR")
248-
result.addAll(year)
249-
}
250-
if (earlier.isNotEmpty()) {
251-
result.add("EARLIER")
252-
result.addAll(earlier)
207+
return buildList {
208+
if (todayItems.isNotEmpty()) {
209+
add("TODAY")
210+
addAll(todayItems)
211+
}
212+
if (yesterdayItems.isNotEmpty()) {
213+
add("YESTERDAY")
214+
addAll(yesterdayItems)
215+
}
216+
if (weekItems.isNotEmpty()) {
217+
add("THIS WEEK")
218+
addAll(weekItems)
219+
}
220+
if (monthItems.isNotEmpty()) {
221+
add("THIS MONTH")
222+
addAll(monthItems)
223+
}
224+
if (yearItems.isNotEmpty()) {
225+
add("THIS YEAR")
226+
addAll(yearItems)
227+
}
228+
if (earlierItems.isNotEmpty()) {
229+
add("EARLIER")
230+
addAll(earlierItems)
231+
}
253232
}
254-
255-
return result
256233
}
257234
// endregion
258235

@@ -323,7 +300,7 @@ val testActivityItems: List<Activity> = listOf(
323300
value = 42_000_000_u,
324301
fee = 200_u,
325302
feeRate = 1_u,
326-
address = "bcrt1",
303+
address = "bc1",
327304
confirmed = true,
328305
timestamp = today.timeInMillis.toULong() / 1000u,
329306
isBoosted = false,
@@ -344,7 +321,7 @@ val testActivityItems: List<Activity> = listOf(
344321
status = PaymentState.PENDING,
345322
value = 30_000_u,
346323
fee = 15_u,
347-
invoice = "lnbcrt2",
324+
invoice = "lnbc2",
348325
message = "Custom message",
349326
timestamp = yesterday.timeInMillis.toULong() / 1000u,
350327
preimage = "preimage1",
@@ -360,7 +337,7 @@ val testActivityItems: List<Activity> = listOf(
360337
status = PaymentState.FAILED,
361338
value = 217_000_u,
362339
fee = 17_u,
363-
invoice = "lnbcrt3",
340+
invoice = "lnbc3",
364341
message = "",
365342
timestamp = thisWeek.timeInMillis.toULong() / 1000u,
366343
preimage = "preimage2",
@@ -377,7 +354,7 @@ val testActivityItems: List<Activity> = listOf(
377354
value = 950_000_u,
378355
fee = 110_u,
379356
feeRate = 1_u,
380-
address = "bcrt1",
357+
address = "bc1",
381358
confirmed = false,
382359
timestamp = thisMonth.timeInMillis.toULong() / 1000u,
383360
isBoosted = false,

0 commit comments

Comments
 (0)