@@ -36,7 +36,13 @@ import uniffi.bitkitcore.LightningActivity
3636import uniffi.bitkitcore.OnchainActivity
3737import uniffi.bitkitcore.PaymentState
3838import 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
3944import 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
168174private 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