android: show a sticky header in saved posts

This commit is contained in:
Harsh Shandilya 2022-04-14 21:08:16 +05:30
parent 66718d447a
commit 0cb1124640
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 46 additions and 7 deletions

View file

@ -0,0 +1,31 @@
package dev.msfjarvis.claw.android.ui.decorations
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import dev.msfjarvis.claw.android.ui.surfaceColorAtNavigationBarElevation
import java.time.Month
import java.time.format.TextStyle as JTextStyle
import java.util.Locale
@Composable
fun MonthHeader(month: Month) {
Box(
Modifier.fillMaxWidth()
.wrapContentHeight()
.background(MaterialTheme.colorScheme.surfaceColorAtNavigationBarElevation())
) {
Text(
text = month.getDisplayName(JTextStyle.FULL, Locale.getDefault()),
style = MaterialTheme.typography.headlineSmall,
modifier = Modifier.padding(horizontal = 12.dp, vertical = 12.dp),
)
}
}

View file

@ -1,15 +1,18 @@
package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import dev.msfjarvis.claw.android.ui.asZonedDateTime
import dev.msfjarvis.claw.android.ui.decorations.MonthHeader
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.ui.Divider
import dev.msfjarvis.claw.database.local.SavedPost
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun DatabasePosts(
items: List<SavedPost>,
@ -18,11 +21,15 @@ fun DatabasePosts(
postActions: PostActions,
modifier: Modifier = Modifier,
) {
val sorted = items.sortedBy { post -> post.createdAt.asZonedDateTime() }
val grouped = sorted.groupBy { post -> post.createdAt.asZonedDateTime().month }
LazyColumn(
state = listState,
modifier = modifier,
) {
items(items.sortedBy { post -> post.createdAt.asZonedDateTime() }) { item ->
grouped.forEach { (month, posts) ->
stickyHeader { MonthHeader(month = month) }
items(posts) { item ->
ListItem(
item = item,
isSaved = isSaved,
@ -33,3 +40,4 @@ fun DatabasePosts(
}
}
}
}