Skip to content

Commit b6b5dde

Browse files
authored
add animation progress indicators (#2502)
1 parent e96f915 commit b6b5dde

File tree

101 files changed

+484
-397
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+484
-397
lines changed

cmp-android/dependencies/demoDebugRuntimeClasspath.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ com.russhwolf:multiplatform-settings-serialization:1.2.0
187187
com.russhwolf:multiplatform-settings:1.2.0
188188
com.squareup.okhttp3:okhttp-sse:4.12.0
189189
com.squareup.okhttp3:okhttp:4.12.0
190-
com.squareup.okio:okio-jvm:3.11.0
191-
com.squareup.okio:okio:3.11.0
190+
com.squareup.okio:okio-jvm:3.15.0
191+
com.squareup.okio:okio:3.15.0
192192
com.squareup:javawriter:2.1.1
193193
de.jensklingenberg.ktorfit:ktorfit-annotations-android-debug:2.5.2
194194
de.jensklingenberg.ktorfit:ktorfit-annotations:2.5.2
@@ -214,6 +214,14 @@ io.coil-kt.coil3:coil-network-okhttp:3.2.0
214214
io.coil-kt.coil3:coil-svg-android:3.2.0
215215
io.coil-kt.coil3:coil-svg:3.2.0
216216
io.coil-kt.coil3:coil:3.2.0
217+
io.github.alexzhirkevich:compottie-core-android:2.0.0-rc05
218+
io.github.alexzhirkevich:compottie-core:2.0.0-rc05
219+
io.github.alexzhirkevich:compottie-lite-android:2.0.0-rc05
220+
io.github.alexzhirkevich:compottie-lite:2.0.0-rc05
221+
io.github.alexzhirkevich:compottie-resources-android:2.0.0-rc05
222+
io.github.alexzhirkevich:compottie-resources:2.0.0-rc05
223+
io.github.alexzhirkevich:keight-core-android:0.0.02
224+
io.github.alexzhirkevich:keight-core:0.0.02
217225
io.github.niyajali:compose-signature-android:1.0.1
218226
io.github.niyajali:compose-signature:1.0.1
219227
io.github.niyajali:fluentui-system-icons-android:1.0.0
@@ -335,6 +343,8 @@ org.jetbrains.kotlin:kotlin-reflect:2.1.0
335343
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.23
336344
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20
337345
org.jetbrains.kotlin:kotlin-stdlib:2.2.0
346+
org.jetbrains.kotlinx:atomicfu-jvm:0.23.2
347+
org.jetbrains.kotlinx:atomicfu:0.23.2
338348
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8
339349
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8
340350
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2
@@ -345,8 +355,8 @@ org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2
345355
org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.10.2
346356
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.10.2
347357
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
348-
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.2
349-
org.jetbrains.kotlinx:kotlinx-datetime:0.6.2
358+
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
359+
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
350360
org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.7.0
351361
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.7.0
352362
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.7.0

cmp-android/dependencies/demoReleaseRuntimeClasspath.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ com.russhwolf:multiplatform-settings-serialization:1.2.0
187187
com.russhwolf:multiplatform-settings:1.2.0
188188
com.squareup.okhttp3:okhttp-sse:4.12.0
189189
com.squareup.okhttp3:okhttp:4.12.0
190-
com.squareup.okio:okio-jvm:3.11.0
191-
com.squareup.okio:okio:3.11.0
190+
com.squareup.okio:okio-jvm:3.15.0
191+
com.squareup.okio:okio:3.15.0
192192
com.squareup:javawriter:2.1.1
193193
de.jensklingenberg.ktorfit:ktorfit-annotations-android:2.5.2
194194
de.jensklingenberg.ktorfit:ktorfit-annotations:2.5.2
@@ -214,6 +214,14 @@ io.coil-kt.coil3:coil-network-okhttp:3.2.0
214214
io.coil-kt.coil3:coil-svg-android:3.2.0
215215
io.coil-kt.coil3:coil-svg:3.2.0
216216
io.coil-kt.coil3:coil:3.2.0
217+
io.github.alexzhirkevich:compottie-core-android:2.0.0-rc05
218+
io.github.alexzhirkevich:compottie-core:2.0.0-rc05
219+
io.github.alexzhirkevich:compottie-lite-android:2.0.0-rc05
220+
io.github.alexzhirkevich:compottie-lite:2.0.0-rc05
221+
io.github.alexzhirkevich:compottie-resources-android:2.0.0-rc05
222+
io.github.alexzhirkevich:compottie-resources:2.0.0-rc05
223+
io.github.alexzhirkevich:keight-core-android:0.0.02
224+
io.github.alexzhirkevich:keight-core:0.0.02
217225
io.github.niyajali:compose-signature-android:1.0.1
218226
io.github.niyajali:compose-signature:1.0.1
219227
io.github.niyajali:fluentui-system-icons-android:1.0.0
@@ -335,6 +343,8 @@ org.jetbrains.kotlin:kotlin-reflect:2.1.0
335343
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.23
336344
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20
337345
org.jetbrains.kotlin:kotlin-stdlib:2.2.0
346+
org.jetbrains.kotlinx:atomicfu-jvm:0.23.2
347+
org.jetbrains.kotlinx:atomicfu:0.23.2
338348
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8
339349
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8
340350
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2
@@ -345,8 +355,8 @@ org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2
345355
org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.10.2
346356
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.10.2
347357
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
348-
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.2
349-
org.jetbrains.kotlinx:kotlinx-datetime:0.6.2
358+
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
359+
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
350360
org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.7.0
351361
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.7.0
352362
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.7.0

cmp-android/dependencies/prodDebugRuntimeClasspath.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ com.russhwolf:multiplatform-settings-serialization:1.2.0
187187
com.russhwolf:multiplatform-settings:1.2.0
188188
com.squareup.okhttp3:okhttp-sse:4.12.0
189189
com.squareup.okhttp3:okhttp:4.12.0
190-
com.squareup.okio:okio-jvm:3.11.0
191-
com.squareup.okio:okio:3.11.0
190+
com.squareup.okio:okio-jvm:3.15.0
191+
com.squareup.okio:okio:3.15.0
192192
com.squareup:javawriter:2.1.1
193193
de.jensklingenberg.ktorfit:ktorfit-annotations-android-debug:2.5.2
194194
de.jensklingenberg.ktorfit:ktorfit-annotations:2.5.2
@@ -214,6 +214,14 @@ io.coil-kt.coil3:coil-network-okhttp:3.2.0
214214
io.coil-kt.coil3:coil-svg-android:3.2.0
215215
io.coil-kt.coil3:coil-svg:3.2.0
216216
io.coil-kt.coil3:coil:3.2.0
217+
io.github.alexzhirkevich:compottie-core-android:2.0.0-rc05
218+
io.github.alexzhirkevich:compottie-core:2.0.0-rc05
219+
io.github.alexzhirkevich:compottie-lite-android:2.0.0-rc05
220+
io.github.alexzhirkevich:compottie-lite:2.0.0-rc05
221+
io.github.alexzhirkevich:compottie-resources-android:2.0.0-rc05
222+
io.github.alexzhirkevich:compottie-resources:2.0.0-rc05
223+
io.github.alexzhirkevich:keight-core-android:0.0.02
224+
io.github.alexzhirkevich:keight-core:0.0.02
217225
io.github.niyajali:compose-signature-android:1.0.1
218226
io.github.niyajali:compose-signature:1.0.1
219227
io.github.niyajali:fluentui-system-icons-android:1.0.0
@@ -335,6 +343,8 @@ org.jetbrains.kotlin:kotlin-reflect:2.1.0
335343
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.23
336344
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20
337345
org.jetbrains.kotlin:kotlin-stdlib:2.2.0
346+
org.jetbrains.kotlinx:atomicfu-jvm:0.23.2
347+
org.jetbrains.kotlinx:atomicfu:0.23.2
338348
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8
339349
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8
340350
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2
@@ -345,8 +355,8 @@ org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2
345355
org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.10.2
346356
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.10.2
347357
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
348-
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.2
349-
org.jetbrains.kotlinx:kotlinx-datetime:0.6.2
358+
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
359+
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
350360
org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.7.0
351361
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.7.0
352362
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.7.0

cmp-android/dependencies/prodReleaseRuntimeClasspath.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ com.russhwolf:multiplatform-settings-serialization:1.2.0
187187
com.russhwolf:multiplatform-settings:1.2.0
188188
com.squareup.okhttp3:okhttp-sse:4.12.0
189189
com.squareup.okhttp3:okhttp:4.12.0
190-
com.squareup.okio:okio-jvm:3.11.0
191-
com.squareup.okio:okio:3.11.0
190+
com.squareup.okio:okio-jvm:3.15.0
191+
com.squareup.okio:okio:3.15.0
192192
com.squareup:javawriter:2.1.1
193193
de.jensklingenberg.ktorfit:ktorfit-annotations-android:2.5.2
194194
de.jensklingenberg.ktorfit:ktorfit-annotations:2.5.2
@@ -214,6 +214,14 @@ io.coil-kt.coil3:coil-network-okhttp:3.2.0
214214
io.coil-kt.coil3:coil-svg-android:3.2.0
215215
io.coil-kt.coil3:coil-svg:3.2.0
216216
io.coil-kt.coil3:coil:3.2.0
217+
io.github.alexzhirkevich:compottie-core-android:2.0.0-rc05
218+
io.github.alexzhirkevich:compottie-core:2.0.0-rc05
219+
io.github.alexzhirkevich:compottie-lite-android:2.0.0-rc05
220+
io.github.alexzhirkevich:compottie-lite:2.0.0-rc05
221+
io.github.alexzhirkevich:compottie-resources-android:2.0.0-rc05
222+
io.github.alexzhirkevich:compottie-resources:2.0.0-rc05
223+
io.github.alexzhirkevich:keight-core-android:0.0.02
224+
io.github.alexzhirkevich:keight-core:0.0.02
217225
io.github.niyajali:compose-signature-android:1.0.1
218226
io.github.niyajali:compose-signature:1.0.1
219227
io.github.niyajali:fluentui-system-icons-android:1.0.0
@@ -335,6 +343,8 @@ org.jetbrains.kotlin:kotlin-reflect:2.1.0
335343
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.23
336344
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20
337345
org.jetbrains.kotlin:kotlin-stdlib:2.2.0
346+
org.jetbrains.kotlinx:atomicfu-jvm:0.23.2
347+
org.jetbrains.kotlinx:atomicfu:0.23.2
338348
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8
339349
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8
340350
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2
@@ -345,8 +355,8 @@ org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2
345355
org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.10.2
346356
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.10.2
347357
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
348-
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.2
349-
org.jetbrains.kotlinx:kotlinx-datetime:0.6.2
358+
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
359+
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
350360
org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.7.0
351361
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.7.0
352362
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.7.0

core/common/src/commonMain/kotlin/com/mifos/core/common/utils/DateHelper.kt

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,18 @@
1010
package com.mifos.core.common.utils
1111

1212
import com.mifos.core.common.utils.FileUtils.Companion.logger
13-
import kotlinx.datetime.Clock
14-
import kotlinx.datetime.Instant
1513
import kotlinx.datetime.LocalDate
1614
import kotlinx.datetime.LocalDateTime
1715
import kotlinx.datetime.Month
1816
import kotlinx.datetime.TimeZone
1917
import kotlinx.datetime.format
2018
import kotlinx.datetime.format.FormatStringsInDatetimeFormats
2119
import kotlinx.datetime.format.byUnicodePattern
20+
import kotlinx.datetime.number
2221
import kotlinx.datetime.toLocalDateTime
22+
import kotlin.time.Clock
23+
import kotlin.time.ExperimentalTime
24+
import kotlin.time.Instant
2325

2426
@OptIn(FormatStringsInDatetimeFormats::class)
2527
object DateHelper {
@@ -133,8 +135,8 @@ object DateHelper {
133135
// Extension function to format LocalDate
134136
fun LocalDate.format(pattern: String): String {
135137
val year = this.year.toString().padStart(4, '0')
136-
val month = this.monthNumber.toString().padStart(2, '0')
137-
val day = this.dayOfMonth.toString().padStart(2, '0')
138+
val month = this.month.toString().padStart(2, '0')
139+
val day = this.day.toString().padStart(2, '0')
138140

139141
return pattern
140142
.replace("yyyy", year)
@@ -169,6 +171,7 @@ object DateHelper {
169171
* Example timestamp "1698278400000"
170172
* Output examples: "dd-MM-yyyy" - "14-04-2016"
171173
*/
174+
@OptIn(ExperimentalTime::class)
172175
fun getDateAsStringFromLong(timeInMillis: Long): String {
173176
val instant = Instant.fromEpochMilliseconds(timeInMillis)
174177
.toLocalDateTime(TimeZone.currentSystemDefault())
@@ -181,13 +184,14 @@ object DateHelper {
181184
* Example timestamp "1698278400000"
182185
* Output examples: "14 April"
183186
*/
187+
@OptIn(ExperimentalTime::class)
184188
fun getMonthAsStringFromLong(timeInMillis: Long): String {
185189
val instant = Instant.fromEpochMilliseconds(timeInMillis)
186190
.toLocalDateTime(TimeZone.currentSystemDefault())
187191

188192
val monthName = instant.month.name.lowercase().capitalize()
189193

190-
return "${instant.dayOfMonth} $monthName"
194+
return "${instant.day} $monthName"
191195
}
192196

193197
/**
@@ -257,6 +261,7 @@ object DateHelper {
257261
* "Today at 05:41"
258262
* "Tomorrow at 05:41"
259263
*/
264+
@OptIn(ExperimentalTime::class)
260265
fun String.toFormattedDateTime(): String {
261266
// Parse the datetime string
262267
val dateTime = try {
@@ -281,41 +286,41 @@ object DateHelper {
281286
nowDateTime.year == dateTime.year -> {
282287
when {
283288
// Same month
284-
nowDateTime.monthNumber == dateTime.monthNumber -> {
289+
nowDateTime.month.number == dateTime.month.number -> {
285290
when {
286291
// Tomorrow
287-
dateTime.dayOfMonth - nowDateTime.dayOfMonth == 1 -> {
292+
dateTime.day - nowDateTime.day == 1 -> {
288293
"Tomorrow at ${dateTime.format()}"
289294
}
290295
// Today
291-
dateTime.dayOfMonth == nowDateTime.dayOfMonth -> {
296+
dateTime.day == nowDateTime.day -> {
292297
"Today at ${dateTime.format()}"
293298
}
294299
// Yesterday
295-
nowDateTime.dayOfMonth - dateTime.dayOfMonth == 1 -> {
300+
nowDateTime.day - dateTime.day == 1 -> {
296301
"Yesterday at ${dateTime.format()}"
297302
}
298303
// Same month but different day
299304
else -> {
300305
"${
301306
dateTime.month.name.lowercase().capitalize()
302-
} ${dateTime.dayOfMonth}, ${dateTime.format()}"
307+
} ${dateTime.day}, ${dateTime.format()}"
303308
}
304309
}
305310
}
306311
// Different month, same year
307312
else -> {
308313
"${
309314
dateTime.month.name.lowercase().capitalize()
310-
} ${dateTime.dayOfMonth}, ${dateTime.format()}"
315+
} ${dateTime.day}, ${dateTime.format()}"
311316
}
312317
}
313318
}
314319
// Different year
315320
else -> {
316321
"${
317322
dateTime.month.name.lowercase().capitalize()
318-
} ${dateTime.dayOfMonth} ${dateTime.year}, ${dateTime.format()}"
323+
} ${dateTime.day} ${dateTime.year}, ${dateTime.format()}"
319324
}
320325
}
321326
}
@@ -327,6 +332,7 @@ object DateHelper {
327332
* "Today at 12:00"
328333
* "Tomorrow at 15:30"
329334
*/
335+
@OptIn(ExperimentalTime::class)
330336
fun String.toPrettyDate(): String {
331337
val timestamp = this.toLong()
332338
val instant = Instant.fromEpochMilliseconds(timestamp)
@@ -339,44 +345,44 @@ object DateHelper {
339345
nowDateTime.year == neededDateTime.year -> {
340346
when {
341347
// Same month
342-
nowDateTime.monthNumber == neededDateTime.monthNumber -> {
348+
nowDateTime.month.number == neededDateTime.month.number -> {
343349
when {
344350
// Tomorrow
345-
neededDateTime.dayOfMonth - nowDateTime.dayOfMonth == 1 -> {
351+
neededDateTime.day - nowDateTime.day == 1 -> {
346352
val time = neededDateTime.format()
347353
"Tomorrow at $time"
348354
}
349355
// Today
350-
neededDateTime.dayOfMonth == nowDateTime.dayOfMonth -> {
356+
neededDateTime.day == nowDateTime.day -> {
351357
val time = neededDateTime.format()
352358
"Today at $time"
353359
}
354360
// Yesterday
355-
nowDateTime.dayOfMonth - neededDateTime.dayOfMonth == 1 -> {
361+
nowDateTime.day - neededDateTime.day == 1 -> {
356362
val time = neededDateTime.format()
357363
"Yesterday at $time"
358364
}
359365
// Same month but different day
360366
else -> {
361367
"${
362368
neededDateTime.month.name.lowercase().capitalize()
363-
} ${neededDateTime.dayOfMonth}, ${neededDateTime.format()}"
369+
} ${neededDateTime.day}, ${neededDateTime.format()}"
364370
}
365371
}
366372
}
367373
// Different month, same year
368374
else -> {
369375
"${
370376
neededDateTime.month.name.lowercase().capitalize()
371-
} ${neededDateTime.dayOfMonth}, ${neededDateTime.format()}"
377+
} ${neededDateTime.day}, ${neededDateTime.format()}"
372378
}
373379
}
374380
}
375381
// Different year
376382
else -> {
377383
"${
378384
neededDateTime.month.name.lowercase().capitalize()
379-
} ${neededDateTime.dayOfMonth} ${neededDateTime.year}, ${neededDateTime.format()}"
385+
} ${neededDateTime.day} ${neededDateTime.year}, ${neededDateTime.format()}"
380386
}
381387
}
382388
}
@@ -391,6 +397,7 @@ object DateHelper {
391397
if (it.isLowerCase()) it.titlecase() else it.toString()
392398
}
393399

400+
@OptIn(ExperimentalTime::class)
394401
val currentDate = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
395402

396403
/**
@@ -415,14 +422,15 @@ object DateHelper {
415422
* @param isoString take IOS date as a String
416423
* Example : ISO string 2025-08-28T16:02:32.242705+05:30 and return 28 08 2025
417424
*/
425+
@OptIn(ExperimentalTime::class)
418426
fun formatIsoDateToDdMmYyyy(isoString: String): String {
419427
// Parse the string into an Instant
420428
val instant = Instant.parse(isoString)
421429

422430
// Convert to LocalDateTime in system timezone
423431
val localDate = instant.toLocalDateTime(TimeZone.currentSystemDefault()).date
424432

425-
val day = localDate.dayOfMonth.toString().padStart(2, '0')
433+
val day = localDate.day.toString().padStart(2, '0')
426434
val monthName = localDate.month.name.lowercase()
427435
.replaceFirstChar { it.uppercase() } // "January", "February", etc.
428436
val year = localDate.year

core/common/src/commonMain/kotlin/com/mifos/core/common/utils/FormatDate.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
*/
1010
package com.mifos.core.common.utils
1111

12-
import kotlinx.datetime.Instant
1312
import kotlinx.datetime.TimeZone
1413
import kotlinx.datetime.toLocalDateTime
14+
import kotlin.time.ExperimentalTime
15+
import kotlin.time.Instant
1516

17+
@OptIn(ExperimentalTime::class)
1618
fun formatDate(millis: Long): String {
1719
val dateTime = Instant.fromEpochMilliseconds(millis).toLocalDateTime(TimeZone.currentSystemDefault())
18-
return "${dateTime.dayOfMonth} ${dateTime.month.name.lowercase().replaceFirstChar { it.uppercase() }} ${dateTime.year}"
20+
return "${dateTime.day} ${dateTime.month.name.lowercase().replaceFirstChar { it.uppercase() }} ${dateTime.year}"
1921
}

0 commit comments

Comments
 (0)