diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/TimeAgoFormatter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/TimeAgoFormatter.kt index 4cc691cfe..6d9939c0f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/TimeAgoFormatter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/TimeAgoFormatter.kt @@ -29,8 +29,8 @@ import java.text.SimpleDateFormat import java.util.Locale var locale = Locale.getDefault() -var yearFormatter = SimpleDateFormat(" • MMM dd, yyyy", locale) -var monthFormatter = SimpleDateFormat(" • MMM dd", locale) +var yearFormatter = SimpleDateFormat("MMM dd, yyyy", locale) +var monthFormatter = SimpleDateFormat("MMM dd", locale) fun timeAgo( time: Long?, @@ -46,20 +46,20 @@ fun timeAgo( if (locale != Locale.getDefault()) { locale = Locale.getDefault() - yearFormatter = SimpleDateFormat(" • MMM dd, yyyy", locale) - monthFormatter = SimpleDateFormat(" • MMM dd", locale) + yearFormatter = SimpleDateFormat("MMM dd, yyyy", locale) + monthFormatter = SimpleDateFormat("MMM dd", locale) } - yearFormatter.format(time * 1000) + " • " + yearFormatter.format(time * 1000) } else if (timeDifference > TimeUtils.ONE_MONTH) { // Dec 12 if (locale != Locale.getDefault()) { locale = Locale.getDefault() - yearFormatter = SimpleDateFormat(" • MMM dd, yyyy", locale) - monthFormatter = SimpleDateFormat(" • MMM dd", locale) + yearFormatter = SimpleDateFormat("MMM dd, yyyy", locale) + monthFormatter = SimpleDateFormat("MMM dd", locale) } - monthFormatter.format(time * 1000) + " • " + monthFormatter.format(time * 1000) } else if (timeDifference > TimeUtils.ONE_DAY) { // 2 days " • " + (timeDifference / TimeUtils.ONE_DAY).toString() + stringRes(context, R.string.d) @@ -112,6 +112,40 @@ fun timeAgoNoDot( } } +fun dateFormatter( + time: Long?, + never: String, + today: String, +): String { + if (time == null) return " " + if (time == 0L) return " $never" + + val timeDifference = TimeUtils.now() - time + + return if (timeDifference > TimeUtils.ONE_YEAR) { + // Dec 12, 2022 + + if (locale != Locale.getDefault()) { + locale = Locale.getDefault() + yearFormatter = SimpleDateFormat("MMM dd, yyyy", locale) + monthFormatter = SimpleDateFormat("MMM dd", locale) + } + + yearFormatter.format(time * 1000) + } else if (timeDifference > TimeUtils.ONE_DAY) { + // Dec 12 + if (locale != Locale.getDefault()) { + locale = Locale.getDefault() + yearFormatter = SimpleDateFormat("MMM dd, yyyy", locale) + monthFormatter = SimpleDateFormat("MMM dd", locale) + } + + monthFormatter.format(time * 1000) + } else { + today + } +} + fun timeAgoShort( mills: Long?, stringForNow: String, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomFeedView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomFeedView.kt index 729c2c63e..298794877 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomFeedView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomFeedView.kt @@ -36,6 +36,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled import com.vitorpamplona.amethyst.ui.feeds.FeedEmpty @@ -44,12 +45,16 @@ import com.vitorpamplona.amethyst.ui.feeds.FeedState import com.vitorpamplona.amethyst.ui.feeds.LoadingFeed import com.vitorpamplona.amethyst.ui.feeds.RefresheableBox import com.vitorpamplona.amethyst.ui.navigation.INav +import com.vitorpamplona.amethyst.ui.note.dateFormatter import com.vitorpamplona.amethyst.ui.screen.FeedViewModel import com.vitorpamplona.amethyst.ui.screen.SaveableFeedState import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.amethyst.ui.stringRes +import com.vitorpamplona.amethyst.ui.theme.DividerThickness import com.vitorpamplona.amethyst.ui.theme.FeedPadding import com.vitorpamplona.amethyst.ui.theme.Font14SP import com.vitorpamplona.amethyst.ui.theme.HalfPadding +import com.vitorpamplona.amethyst.ui.theme.StdPadding import com.vitorpamplona.quartz.events.DraftEvent @Composable @@ -145,7 +150,7 @@ fun ChatroomFeedLoaded( reverseLayout = true, state = listState, ) { - itemsIndexed(items.list, key = { _, item -> item.idHex }) { _, item -> + itemsIndexed(items.list, key = { _, item -> item.idHex }) { index, item -> val noteEvent = item.event if (avoidDraft == null || noteEvent !is DraftEvent || noteEvent.dTag() != avoidDraft) { ChatroomMessageCompose( @@ -156,35 +161,59 @@ fun ChatroomFeedLoaded( onWantsToReply = onWantsToReply, onWantsToEditDraft = onWantsToEditDraft, ) + + NewDateSubject(items.list.getOrNull(index + 1), item) } - NewSubject(item) } } } @Composable -fun NewSubject(note: Note) { +fun NewDateSubject( + previous: Note?, + note: Note, +) { + if (previous == null) return + + val never = stringRes(R.string.never) + val today = stringRes(R.string.today) + + val prevDate = remember(previous) { dateFormatter(previous.event?.createdAt(), never, today) } + val date = remember(note) { dateFormatter(note.event?.createdAt(), never, today) } + val subject = remember(note) { note.event?.subject() } - if (subject != null) { - NewSubject(newSubject = subject) + println("AABBCC $prevDate $date") + + if (prevDate != date) { + if (subject != null) { + ChatDivisor("$date - $subject") + } else { + ChatDivisor(date) + } + } else { + if (subject != null) { + ChatDivisor(subject) + } } } @Composable -fun NewSubject(newSubject: String) { - Row(verticalAlignment = Alignment.CenterVertically) { +fun ChatDivisor(info: String) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = StdPadding) { HorizontalDivider( modifier = Modifier.weight(1f), + thickness = DividerThickness, ) Text( - text = newSubject, + text = info, fontWeight = FontWeight.Bold, fontSize = Font14SP, modifier = HalfPadding, ) HorizontalDivider( modifier = Modifier.weight(1f), + thickness = DividerThickness, ) } }