codeslubber
09/04/2021, 10:09 PMephemient
09/05/2021, 1:12 AMfun relativeDateTimeLiveData(context: Context, millis: Long): Flow<CharSequence> = flow {
while (true) {
val elapsed = System.currentTimeMillis() - millis
emit(DateUtils.getRelativeDateTimeString(context, millis, DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0))
val interval = when (elapsed) {
in (1 - DateUtils.MINUTE_IN_MILLIS) until DateUtils.MINUTE_IN_MILLIS -> DateUtils.SECOND_IN_MILLIS
in (1 - DateUtils.HOUR_IN_MILLIS) until DateUtils.HOUR_IN_MILLIS -> DateUtils.MINUTE_IN_MILLIS
in (1 - DateUtils.DAY_IN_MILLIS) until DateUtils.DAY_IN_MILLIS -> DateUtils.HOUR_IN_MILLIS
in (1 - DateUtils.WEEK_IN_MILLIS) until DateUtils.WEEK_IN_MILLIS -> DateUtils.DAY_IN_MILLIS
else -> break
}
delay(interval - elapsed.mod(interval))
}
}
Joost Klitsie
09/05/2021, 11:41 AM