diff --git a/app/build.gradle b/app/build.gradle index 6e6e29efb..7bea96099 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -294,6 +294,7 @@ dependencies { implementation 'androidx.activity:activity-compose' implementation 'androidx.compose.ui:ui-tooling-preview' implementation 'androidx.compose.ui:ui-text:1.7.0-beta03' // Needed for parsing HTML to AnnotatedString + implementation 'com.github.nanihadesuka:LazyColumnScrollbar:2.1.0' // Paging implementation 'androidx.paging:paging-rxjava3:3.3.0' diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentSection.kt b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentSection.kt index 45a8b5e72..dc4104b9d 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentSection.kt +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentSection.kt @@ -2,6 +2,7 @@ package org.schabi.newpipe.fragments.list.comments import android.content.res.Configuration import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.HorizontalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview @@ -10,6 +11,8 @@ import androidx.paging.PagingData import androidx.paging.compose.collectAsLazyPagingItems import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf +import my.nanihadesuka.compose.LazyColumnScrollbar +import my.nanihadesuka.compose.ScrollbarSettings import org.schabi.newpipe.extractor.comments.CommentsInfoItem import org.schabi.newpipe.extractor.stream.Description import org.schabi.newpipe.ui.theme.AppTheme @@ -20,17 +23,20 @@ fun CommentSection( parentComment: CommentsInfoItem? = null, ) { val replies = flow.collectAsLazyPagingItems() + val listState = rememberLazyListState() - LazyColumn { - if (parentComment != null) { - item { - CommentRepliesHeader(comment = parentComment) - HorizontalDivider(thickness = 1.dp) + LazyColumnScrollbar(state = listState, settings = ScrollbarSettings.Default) { + LazyColumn(state = listState) { + if (parentComment != null) { + item { + CommentRepliesHeader(comment = parentComment) + HorizontalDivider(thickness = 1.dp) + } } - } - items(replies.itemCount) { - Comment(comment = replies[it]!!) + items(replies.itemCount) { + Comment(comment = replies[it]!!) + } } } } @@ -39,15 +45,13 @@ fun CommentSection( @Preview(name = "Dark mode", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable private fun CommentSectionPreview() { - val comment1 = CommentsInfoItem( - commentText = Description("This is a comment", Description.PLAIN_TEXT), - uploaderName = "Test", - ) - val comment2 = CommentsInfoItem( - commentText = Description("This is another comment.
This is another line.", Description.HTML), - uploaderName = "Test 2", - ) - val flow = flowOf(PagingData.from(listOf(comment1, comment2))) + val comments = (0..100).map { + CommentsInfoItem( + commentText = Description("Comment $it", Description.PLAIN_TEXT), + uploaderName = "Test" + ) + } + val flow = flowOf(PagingData.from(comments)) AppTheme { CommentSection(flow = flow) @@ -65,16 +69,13 @@ private fun CommentRepliesPreview() { isPinned = true, isHeartedByUploader = true ) - - val reply1 = CommentsInfoItem( - commentText = Description("This is a reply", Description.PLAIN_TEXT), - uploaderName = "Test 2", - ) - val reply2 = CommentsInfoItem( - commentText = Description("This is another reply.
This is another line.", Description.HTML), - uploaderName = "Test 3", - ) - val flow = flowOf(PagingData.from(listOf(reply1, reply2))) + val replies = (0..100).map { + CommentsInfoItem( + commentText = Description("Reply $it", Description.PLAIN_TEXT), + uploaderName = "Test" + ) + } + val flow = flowOf(PagingData.from(replies)) AppTheme { CommentSection(parentComment = comment, flow = flow)